Как передать файл в качестве аргумента для файла docker

На самом деле я не уверен, что это можно сделать, но я знаю, что всегда есть хак, поэтому я с энтузиазмом отношусь к тому, что вы скажете об этом специалистам.

Я хочу передать пакет в качестве аргумента при создании образа докеров, чтобы я мог развернуть отдельные версии приложений с одним и тем же файлом docker.

Это пример того, что я хочу добиться: возможность передавать пакет в качестве аргумента при создании изображения (я знаю, что синтаксис неверен, это просто пример)

 docker build -t myapp/myapp:v1 . package_myapp_v1.tar  

Затем используйте ADD в Dockerfile, чтобы извлечь его в контейнер.

ADD passed_package ./ 

Итак, если я хочу создать образ для своего приложения v2, я могу просто указать новый пакет в команде docker build, не меняя Dockerfile.

Кто-нибудь знает, в чем трюк, чтобы заставить работать?

Спасибо:)

1
задан 23 August 2016 в 13:17

1 ответ

Кажется, что это контекст, который должен быть изменен между сборками, а не файлом 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.
1
ответ дан 23 May 2018 в 06:53

Другие вопросы по тегам:

Похожие вопросы: