Извлекать образы докеров из частного репозитория во время сборки докеров?

Есть ли способ вытаскивать изображения из частного реестра во время docker build вместо концентратора докеров?

Я развернул частный реестр, и я хотел бы иметь возможность не называть его конкретную ip:port в инструкции Dockerfile FROM. Я ожидал, что параметр docker build или переменная среды docker изменит реестр по умолчанию.

Ответ 1

Люди-докеры обычно хотят убедиться, что если вы запустите docker pull foo/bar, вы получите то же самое (т.е. изображение foo/bar из Docker Hub) независимо от вашей локальной среды.

Это означает, что нет доступных опций, чтобы Docker использовал что-либо еще без явного имени хоста/порта.

Ответ 2

Имя изображения должно включать полное доменное имя узла реестра. Поэтому, если вы хотите FROM <some private image>, вы должны указать его как FROM registry_host:5000/foo/bar

В будущем это не будет требованием, но, к сожалению, пока оно есть.

Ответ 3

Я столкнулся с той же проблемой в 2019 году. Я решил эту проблему с помощью аргументов (ARG).
https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact
Аргументы позволяют вам устанавливать необязательные параметры (со значениями по умолчанию), которые можно использовать в вашей строке FROM.

Dockerfile-проект-DEV

ARG REPO_LOCATION=privaterepo.company.net/
ARG BASE_VERSION=latest
FROM ${REPO_LOCATION}project/base:${BASE_VERSION}
...

Для моего случая использования я обычно хочу извлечь из частного репозитория, но если я работаю с Dockerfiles, я могу захотеть построить из образа на моем собственном компьютере, без необходимости изменять строку FROM в моем Dockerfile. Чтобы сказать Docker, что нужно искать образ на моей локальной машине во время сборки, я сделал бы следующее:

docker build -t project/dev:latest -f ./Dockerfile-project-dev --build-arg REPO_LOCATION='' .