Как передать файл как аргумент в пользу dockerfile

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

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

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

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

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

ADD passed_package ./ 

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

Кто-либо знает то, что прием должен получить ту работу?

Спасибо :)

7
задан 23 August 2016 в 03:17

2 ответа

Мне удалось решить это после двух минут чтения в документ .

докера, инструкция по АРГУМЕНТУ определяет переменную, которую пользователи могут передать во время изготовления разработчику с командой сборки докера с помощью - аргумент сборки = флаг. Если пользователь указывает аргумент сборки, который не был определен в Dockerfile, сборка производит ошибку.

, Таким образом, я использовал это для создания моего изображения

docker build -t myapp/v1 --build-arg package=package_myapp_v1.tar.gz .

Затем для получения пакета в Dockerfile использование ARG инструкция:

ARG package
ADD $package ./

содержание $package переменная package_myapp_v1.tar.gz, который передается через тег package.

10
ответ дан 23 November 2019 в 06:23

Кажется, что это - контекст, который должен изменяться между сборками, не Dockerfile, правильно? Так или иначе один способ достигнуть этого состоит в том, чтобы использовать способность Докера получить контекст как tar (дополнительно gz) файл с Dockerfile в его корне:

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 файл, где Докер ожидает их.

  • второе transform удаляет номер версии из файла пакета, так, чтобы Вы не редактировали ADD package.tgz . строка в Вашем Dockerfile.

1
ответ дан 23 November 2019 в 06:23

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

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