#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