На самом деле я не уверен, что это можно сделать, но я знаю, что всегда есть хак, поэтому я с энтузиазмом отношусь к тому, что вы скажете об этом специалистам.
Я хочу передать пакет в качестве аргумента при создании образа докеров, чтобы я мог развернуть отдельные версии приложений с одним и тем же файлом docker.
Это пример того, что я хочу добиться: возможность передавать пакет в качестве аргумента при создании изображения (я знаю, что синтаксис неверен, это просто пример)
docker build -t myapp/myapp:v1 . package_myapp_v1.tar
Затем используйте ADD в Dockerfile, чтобы извлечь его в контейнер.
ADD passed_package ./
Итак, если я хочу создать образ для своего приложения v2, я могу просто указать новый пакет в команде docker build, не меняя Dockerfile.
Кто-нибудь знает, в чем трюк, чтобы заставить работать?
Спасибо:)
Кажется, что это контекст, который должен быть изменен между сборками, а не файлом Dockerfile, правильно? В любом случае, одним из способов достижения этой цели является использование возможности Docker для получения контекста в виде файла tar (необязательно gz) с файлом Docker в его корне:
tar --create \
/some/path/to/Dockerfile \
/other/path/to/package-X.Y.Z.tgz \
--transform 's,.*/,,' \
--transform 's/package.*tgz/package.tgz/' |
docker build -t myapp/myapp:v1 -
Примечание:
Первый transform выравнивает структуру каталогов, поэтому все файлы появляются в корне файла tar, где Docker ожидает их. Второй transform удаляет номер версии из файла пакета, так что вам не нужно редактировать строку ADD package.tgz . в файле Docker.