Изменение реестра Docker в зависимости от среды

#docker #dockerfile

Вопрос:

Моя локальная среда разработки находится за корпоративным прокси-сервером, с нашим собственным реестром докеров и т. Д. Однако мы развертываемся в общедоступной инфраструктуре, что означает, что мы не можем получить доступ к корпоративным реестрам, и поэтому нам приходится использовать общедоступный (например, DockerHub).

Есть ли какой-либо способ (например, с помощью переменных среды) для меня настроить Docker для извлечения из частного реестра при локальной разработке и из общедоступного реестра, когда он проходит через наш конвейер CI/CD?

Например, предположим, что мы развертываем узел.Приложение JS — локально, я бы хотел FROM node:16 , чтобы строка интерпретировалась как FROM corporate.proxy/node:16 .

Есть пара методов, которые , вероятно, сработали бы — наличие двух отдельных файлов Dockerfile, например Dockerfile.dev , и Dockerfile.prod или обертывание их в какой-то скрипт, который позаботится о внесении изменений. Я ищу способ сделать это с помощью конфигурации Docker, если это вообще возможно.

Ответ №1:

Вы можете использовать инструкцию ARG для изменения строки FROM в файле Dockerfile.

 ARG IMG
FROM ${IMG}
 

Затем вы можете создать такой образ:

 docker build --build-arg IMG=node:16 .
 

или

 docker build --build-arg IMG=corporate.proxy/node:16 .
 

Из справочного документа Dockerfile:

ARG-это единственная инструкция, которая может предшествовать в файле Dockerfile

https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact