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

Есть ли способ получить образы из частного реестра во время docker build вместо docker-хаба?

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


person Julio Guerra    schedule 18.06.2015    source источник


Ответы (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}
...

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

docker build -t project/dev:latest -f ./Dockerfile-project-dev --build-arg REPO_LOCATION='' .
person Matt L    schedule 09.10.2019

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

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

person cpuguy83    schedule 18.06.2015
comment
Вы говорите In the future this won't be a requirement. Источник? - person starbeamrainbowlabs; 06.05.2020
comment
@starbeamrainbowlabs этот ответ был первоначально дан в 2015 году. Я думаю, что в то время это была будущая функциональность. Документация (по крайней мере) для использования ARG в FROM, упомянутая в моем ответе, была добавлена ​​в 2017 году. github.com/docker/cli/commit/ Дальше я не копал. - person Matt L; 05.11.2020

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

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

person larsks    schedule 18.06.2015
comment
Это где-то задокументировано? Это делает невозможным использование зеркала реестра без изменения всех файлов Docker. - person Julio Guerra; 18.06.2015
comment
Я не думаю, что это явно задокументировано, но оно появилось в системе отслеживания проблем здесь и по разному в списке рассылки. - person larsks; 18.06.2015
comment
@JulioGuerra Вы можете настроить реестр в зеркальном режиме и сообщить докеру о зеркале. Нет необходимости менять имя изображения, чтобы вытащить его из зеркала. - person cpuguy83; 16.02.2018