У своєму Dockerfile я хотів би визначити змінні, які я можу використовувати пізніше в Dockerfile .
Мені відомо ENVінструкція, але я не хочу, щоб ці змінні були змінними середовища.
Чи є спосіб оголосити змінні в Dockerfile області ?
У своєму Dockerfile я хотів би визначити змінні, які я можу використовувати пізніше в Dockerfile .
Мені відомо ENVінструкція, але я не хочу, щоб ці змінні були змінними середовища.
Чи є спосіб оголосити змінні в Dockerfile області ?
Відповіді:
Ви можете використовувати ARG- див. Https://docs.docker.com/engine/reference/builder/#arg
ARGІнструкція визначає змінну , що користувачі можуть проходити при побудові часу будівельника зdocker buildкомандою , використовуючи--build-arg <varname>=<value>прапор. Якщо користувач вказує аргумент збірки, який не був визначений в Dockerfile, збірка видає помилку.
Наскільки мені відомо, це ENVдозволяє лише те, як згадувалося в " Заміна навколишнього середовища "
Змінні середовища (задекларовані разом із
ENVтвердженням) також можуть використовуватися в певних інструкціях як змінні для інтерпретації Dockerfile.
Вони повинні бути змінними середовища, щоб їх можна було повторно декларувати у кожному новому контейнері, створеному для кожного рядка Dockerfile docker build.
Іншими словами, ці змінні інтерпретуються не безпосередньо в Dockerfile, а в контейнері, створеному для рядка Dockerfile, отже, використання змінної середовища.
В цей день, я використовую обидва ARG( докер 1.10+, іdocker build --build-arg var=value ) і ENV.
Якщо використовувати ARGодне, означає, що ваша змінна видима під час збирання, а не під час виконання.
Мій Dockerfile зазвичай містить:
ARG var
ENV var=${var}
У вашому випадку ARGцього достатньо: я зазвичай використовую його для встановлення змінної http_proxy, яка потребує побудови докера для доступу до Інтернету під час збирання.
Щоб відповісти на ваше запитання:
У своєму Dockerfile я хотів би визначити змінні, які я можу використовувати пізніше в Dockerfile.
Ви можете визначити змінну за допомогою:
ARG myvalue=3
Пробіли навколо рівного символу не допускаються.
І використовувати його згодом із:
RUN echo $myvalue > /test
Якщо змінна буде повторно використана в рамках тієї ж RUNінструкції, можна просто встановити змінну оболонки. Мені дуже подобається, як вони підходили до цього з офіційним Ruby Dockerfile .
RUN foo=$(date) && echo $foo
Ви можете використовувати ARG variable defaultValueта під час виконання команди навіть можна оновити це значення, використовуючи --build-arg variable=value. Щоб використовувати ці змінні у файлі docker, ви можете посилати їх як $variableна команду run.
Примітка. Ці змінні були б доступні для таких команд Linux, RUN echo $variableі вони не збережуться у зображенні.