Извлекать образы докеров из частного репозитория во время сборки докеров?
Есть ли способ вытаскивать изображения из частного реестра во время 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='' .