На самом деле я не уверен, что это может быть сделано, но я знаю, что всегда существует взлом, таким образом, я восторжен по поводу того, что Вы эксперты скажут об этом.
l хотят передать пакет как аргумент при создании моего изображения докера так, чтобы я мог развернуть версии отдельного приложения с тем же dockerfile.
Это - пример для того, чего я хочу достигнуть:
Способность передать пакет как аргумент при создании изображения (я знаю синтаксис, является неправильной, это - просто пример),
docker build -t myapp/myapp:v1 . package_myapp_v1.tar
Затем используйте ADD
в Dockerfile
извлечь его в контейнер.
ADD passed_package ./
Так, чтобы, если я хочу создать изображение для своего приложения v2, я мог просто указать новый пакет в docker build
команда, не изменяясь Dockerfile
.
Кто-либо знает то, что прием должен получить ту работу?
Спасибо :)
Мне удалось решить это после двух минут чтения в документ .
докера, инструкция по АРГУМЕНТУ определяет переменную, которую пользователи могут передать во время изготовления разработчику с командой сборки докера с помощью - аргумент сборки = флаг. Если пользователь указывает аргумент сборки, который не был определен в 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
.
Кажется, что это - контекст, который должен изменяться между сборками, не 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.