κΈ°μ
Afaik, μ€ν
μ΄μ§κ°μ λ³μλ₯Ό 곡μ ν μμλ λ°©λ²μ΄ μμ΅λλ€ (λ΄κ° νλ Έλ€λ©΄ μμ ν΄μ£ΌμΈμ). ν λΉλ λ¨κ³μμ λ€μ λ¨κ³λ‘ 곡μ νλ €λ©΄ ν λ¨κ³μ λλ ν 리μμ νμ¬ λ¨κ³λ‘ COPY
νμΌμ 곡μ νλ κ²μ΄ μ μΌν μ΅μ
μ
λλ€. λΉλ μκ° λ³μ λ€νλ₯Ό μ¬μ©νμ¬ JSON νμΌκ³Ό κ°μ κ²μ λΉλ ν μ μμ§λ§μ΄ λ¬Έμ λ λ무 μμ£Ό λ°μνκ³ λ€λ¨κ³ λΉλμ λͺ¨λ μ’
λ₯μ λ―ΈμΉ JSON ꡬ문 λΆμ λ¬Έμ κ° λμΉ κ²μ΄λΌκ³ μκ°ν©λλ€. μ΄κ²μ μλν ν μ μμ΅λκΉ?
λ¬Έμ μ¬ν λ¨κ³ :
FROM alpine:latest as base1
ARG v1=test
ENV v1=$v1
RUN echo ${v1}
FROM alpine:latest as base2
RUN echo ${v1}
λ°μ κ²°κ³Όλ₯Ό μ€λͺ νμμμ€.
docker build --no-cache .
Step 4/6 : RUN echo ${v1}
---> Running in b60a3079864b
test
...
Step 5/6 : FROM alpine:latest as base2
---> 3fd9065eaf02
Step 6/6 : RUN echo ${v1}
---> Running in 1147977afd60
μμ ν κ²°κ³Όλ₯Ό μ€λͺ νμμμ€.
docker build --no-cache --multistage-share-env --multistage-share-arg .
Step 4/6 : RUN echo ${v1}
---> Running in b60a3079864b
test
...
Step 5/6 : FROM alpine:latest as base2
---> 3fd9065eaf02
Step 6/6 : RUN echo ${v1}
---> Running in 1147977afd60
test
λλ λ€μ μ€νμ΄μ€μ κ°μ κ²μ μ¬μ©νμ¬ ${base1.v1}
λ₯Ό λ³΄κ° ν μ μμ΅λλ€.
μ νν©λλ€. ENV
vars λ° ARG
ν¬ν¨ν Dockerfile λͺ
λ Ήμ΄λ λΉλ λ¨κ³λ³λ‘ λ²μκ° μ§μ λλ©° λ€μ λ¨κ³μμ 보쑴λμ§ μμ΅λλ€. μ΄κ²μ μλμ μΌλ‘ μ€κ³λ κ²μ
λλ€.
κ·Έλ¬λ _can_ _global_ ARG
(첫 λ²μ§Έ λΉλ λ¨κ³ μ΄μ μ μ€μ )λ₯Ό μ€μ νκ³ κ° λΉλ λ¨κ³μμ ν΄λΉ κ°μ μ¬μ©ν μ μμ΅λλ€.
ARG version_default=v1
FROM alpine:latest as base1
ARG version_default
ENV version=$version_default
RUN echo ${version}
RUN echo ${version_default}
FROM alpine:latest as base2
ARG version_default
RUN echo ${version_default}
--build-arg
μΈνΈμμ΄ λΉλ ν λ;
docker build --no-cache -<<'EOF'
ARG version_default=v1
FROM alpine:latest as base1
ARG version_default
ENV version=$version_default
RUN echo ${version}
RUN echo ${version_default}
FROM alpine:latest as base2
ARG version_default
RUN echo ${version_default}
EOF
μ΄κ²μ λ€μμ μμ±ν©λλ€.
Sending build context to Docker daemon 2.048kB
Step 1/9 : ARG version_default=v1
Step 2/9 : FROM alpine:latest as base1
---> 3fd9065eaf02
Step 3/9 : ARG version_default
---> Running in 702c05d6f294
Removing intermediate container 702c05d6f294
---> 1b2cac6e7585
Step 4/9 : ENV version=$version_default
---> Running in 6fb73bc8cdb9
Removing intermediate container 6fb73bc8cdb9
---> 656d82ccb6d7
Step 5/9 : RUN echo ${version}
---> Running in 403c720d0031
v1
Removing intermediate container 403c720d0031
---> d6071c5bd329
Step 6/9 : RUN echo ${version_default}
---> Running in d5c76d7d3aaa
v1
Removing intermediate container d5c76d7d3aaa
---> 554df1d8584b
Step 7/9 : FROM alpine:latest as base2
---> 3fd9065eaf02
Step 8/9 : ARG version_default
---> Running in 92400e85c722
Removing intermediate container 92400e85c722
---> 5f0cb12f4448
Step 9/9 : RUN echo ${version_default}
---> Running in f38802f0d690
v1
Removing intermediate container f38802f0d690
---> 4b8caab7870a
Successfully built 4b8caab7870a
κ·Έλ¦¬κ³ _with_ a --build-arg
;
docker build --no-cache --build-arg version_default=v2 -<<'EOF'
ARG version_default=v1
FROM alpine:latest as base1
ARG version_default
ENV version=$version_default
RUN echo ${version}
RUN echo ${version_default}
FROM alpine:latest as base2
ARG version_default
RUN echo ${version_default}
EOF
Sending build context to Docker daemon 2.048kB
Step 1/9 : ARG version_default=v1
Step 2/9 : FROM alpine:latest as base1
---> 3fd9065eaf02
Step 3/9 : ARG version_default
---> Running in 7f5dd5885859
Removing intermediate container 7f5dd5885859
---> 482ffb014095
Step 4/9 : ENV version=$version_default
---> Running in b6c6e9aa3489
Removing intermediate container b6c6e9aa3489
---> 83f1c0b82986
Step 5/9 : RUN echo ${version}
---> Running in 0805ec04fd20
v2
Removing intermediate container 0805ec04fd20
---> ef39d4bd6306
Step 6/9 : RUN echo ${version_default}
---> Running in f8747a5bfeeb
v2
Removing intermediate container f8747a5bfeeb
---> 72d497d25306
Step 7/9 : FROM alpine:latest as base2
---> 3fd9065eaf02
Step 8/9 : ARG version_default
---> Running in 57aa2e097787
Removing intermediate container 57aa2e097787
---> 45e167d234ce
Step 9/9 : RUN echo ${version_default}
---> Running in 8615cd6f6ab6
v2
Removing intermediate container 8615cd6f6ab6
---> 1674ad8d3b88
Successfully built 1674ad8d3b88
λ λ€λ₯Έ λ°©λ²μ μ¬λ¬ λ¨κ³μ κΈ°λ³Έ 컨ν μ΄λλ₯Ό μ¬μ©νλ κ²μ λλ€.
FROM alpine:latest as base
ARG version_default
ENV version=$version_default
FROM base
RUN echo ${version}
FROM base
RUN echo ${version}
docker build --build-arg=version_default=123 --no-cache .
Sending build context to Docker daemon 92.67kB
Step 1/7 : FROM alpine:latest as base
---> 3fd9065eaf02
Step 2/7 : ARG version_default
---> Running in a1ebfdf79f07
Removing intermediate container a1ebfdf79f07
---> 3e78800ed9ea
Step 3/7 : ENV version=$version_default
---> Running in 105d94baac3f
Removing intermediate container 105d94baac3f
---> a14276ddc77b
Step 4/7 : FROM base
---> a14276ddc77b
Step 5/7 : RUN echo ${version}
---> Running in d92f9b48a6cc
123
Removing intermediate container d92f9b48a6cc
---> 6505fe2a14bb
Step 6/7 : FROM base
---> a14276ddc77b
Step 7/7 : RUN echo ${version}
---> Running in 1b748eea4ef3
123
Removing intermediate container 1b748eea4ef3
---> f3311d3ad27e
Successfully built f3311d3ad27e
Time: 0h:00m:04s
μ΄κ²μ μλμ μΌλ‘ μ€κ³λ κ²μ΄κΈ° λλ¬Έμμ΄ λ¬Έμ λ₯Ό λ§λ¬΄λ¦¬νκ² μ΅λλ€. μμ μκ° λ λ§μ λμμ΄λκΈ°λ₯Ό λ°λλλ€. λνλ₯Ό κ³μν΄λλ©λλ€.
μ΄κ²μ΄ μλμ μΌλ‘ μ€κ³λ κ²μ΄λΌλ©΄ λμμΈμ΄ μλͺ»λ κ²μ λλ€. λ¨κ³κ°μ λ³μλ₯Ό 곡μ νλ κ°κ²°ν λ°©λ²μ΄ μμΌλ©΄ DRYκ° λΆκ°λ₯ν©λλ€. λ§μ λ¨κ³κ° λμΌν λ³μμ μ‘μΈμ€ν΄μΌνλ νΌν μμκ³ μ κ±° ν μμλ μν©μ΄ μμ΅λλ€. μ μλ₯Ό 볡μ νλ©΄ μ€λ₯κ° λ°μνκΈ° μ¬μ°λ―λ‘ κ³΅μ λ μ μλ₯Ό λͺ¨λ λ¨κ³λ‘ ν΄νΉνκΈ°μν μμ©κ΅¬λ₯Ό 볡μ ν©λλ€.
"κΈ°λ³Έ 컨ν μ΄λ"μ κ·Ό λ°©μμ λͺ¨λ λ¨κ³μ λν΄ κΈ°λ³Έ 컨ν μ΄λλ₯Ό μμ νκΈ° λλ¬Έμ ννλ ₯μ μ¬κ°νκ² μ ννλ λ°λ©΄ μ€κ° λ¨κ³μμ κ° λ¨κ³μ νμν λꡬλ₯Ό μ 곡νλ μλ‘ λ€λ₯Έ μ΅μ κΈ°λ³Έ μ΄λ―Έμ§λ₯Ό μ¬μ©ν΄μΌνλ μ ν¨ν μ¬μ© μ¬λ‘κ° μμ΅λλ€.
λΏ‘ λΉ΅λ¨
μ΄ λμμΈμ μ¬κ³ ν μ μμ΅λκΉ?
λ΄λΆμ μΌλ‘ λ§ μ¬μ©ν μ μκ³ μ£Όλ‘ λ€μν λΉλμ μ¬μ©λλ 11 κ°μ κΈ°λ³Έ μ΄λ―Έμ§κ° μμ΅λλ€. 11 κ°μ μ΄λ―Έμ§κ° λ€μ€ λ¨κ³ λΉλμ μΌλΆλ‘ μ¬μ©ν κΈ°λ³Έ "FROM μ€ν¬λμΉ"μ΄λ―Έμ§λ₯Ό λ§λ€λ €κ³ ν©λλ€. μΌλΆ λ Όλ¦¬λ 11 κ° λͺ¨λμμ λμΌνκ³ μ¬κΈ°μλ νκ²½ λ³μκ° ν¬ν¨λμ΄ μκΈ° λλ¬Έμ λλ€. λ°λΌμ κ° μ΄λ―Έμ§ λ΄μμ μ€μ ν΄μΌνλ νκ²½ λ³μκ° μμΌλ©° λμΌν λ Όλ¦¬κ° λ€λ₯Έ λͺ¨λ μ΄λ―Έμ§μ 볡μ λ νμκ° μλλ‘ κΈ°λ³Έ μ΄λ―Έμ§ λ΄μμ μ΄λ¬ν λ³μλ₯Ό μ€μ νλ €κ³ ν©λλ€.
ARG
μ @ DMaxfield-BDS λ²μλ λ³κ²½λμ§ μμ§λ§ "FROM μ€ν¬λμΉ"κΈ°λ³Έ μ΄λ―Έμ§λ₯Ό μμ±νλ λ³λμ λΉλ λμμ κ³ λ €ν μ μμ΅λλ€. κ·Έκ²μ λ μ§μ€νΈλ¦¬λ‘ νΈμνκ³ λ€λ₯Έ μ΄λ―Έμ§μ λν΄ μ¬μ©νμμμ€.
FROM scratch AS scratch-base
ENV foo=bar
ENV bar=baz
λΉλνκ³ (λ΄λΆ) λ μ§μ€νΈλ¦¬λ‘ νΈμνλ©΄ 11 κ°μ κΈ°λ³Έ μ΄λ―Έμ§κ°μ΄λ₯Ό κΈ°λ³ΈμΌλ‘ μ¬μ©ν μ μμ΅λλ€.
FROM scratch-base
RUN your stuff
λ€λ₯Έ μ¬μ© μ¬λ‘μ λ§λ EXPORT/IMPORT
λ₯Ό κ°λ λ λ€λ₯Έ μ μμ΄ μμ΅λλ€. https://github.com/moby/moby/issues/32100
λΏ‘ λΉ΅λ¨
λΉμ μ μλ΅μ μ£Όμ μ κ°μ¬ν©λλ€. λ΄κ° μ§μ νμ§ μμ ν κ°μ§λ λ€λ₯Έ 11 κ°μ μ΄λ―Έμ§κ° λͺ¨λ λ€λ₯Έ κΈ°λ³Έ μ΄λ―Έμ§ (python, npm, postgres, openjdk λ±)λ₯Ό κ°μ§κ³ μλ€λ κ²μ λλ€. κ·Έλμ μ κ° μνλ κ²μ λ€μκ³Ό κ°μ΄ νμ¬ μ ν리μΌμ΄μ μμ μ¬μ©νλ νμν νκ²½ λ³μλ₯Ό μ€μ νλ κ²μ ν¬ν¨νμ¬ λͺ¨λ μΌλ°μ μΈ μ€μ / μ€λΉλ₯Ό νλμ κΈ°λ³Έ μ΄λ―Έμ§μ λ£λ κ²μ λλ€.
FROM scratch AS scratch-base
ARG JAR_DIR='/Input/jars/'
ENV JAR_DOWNLOAD_DIR=$JAR_DIR
λ΄ λ΄λΆ λ μ§μ€νΈλ¦¬λ‘ νΈμν©λλ€. κ·Έλ° λ€μ λ€λ₯Έ 11 κ° μ΄λ―Έμ§ μ€ νλμ μλ λ€μμ μνν©λλ€.
FROM scratch-base AS scratch-base
FROM openjdk:8-jdk
COPY --from=scratch-base $JAR_DOWNLOAD_DIR .
RUN <stuff that also uses the JAR_DOWNLOAD_DIR environment variable>
첫 λ²μ§Έ μ΄λ―Έμ§μ μ€μ λ νκ²½ λ³μλ₯Ό μ¬μ©ν μ μλ€λ©΄ λ€λ₯Έ 11 κ°μ μ΄λ―Έμ§ κ°κ°μμ μ΄λ¬ν λμΌν μ€μ μ κ΅¬μ± ν νμκ° μμ΅λλ€. μ΄κ²μ λμκ² νλμ κ΅¬μ± μ§μ μ νμ©νκ³ λ λμ μλνλ₯Ό νμ©ν©λλ€.
μ΄λ»κ² μ΄λ° μΌμν΄μΌν©λκΉ?
RUN COMMIT_HASH = $ (git rev-parse --short HEAD)
νμ RUN λ¨κ³μμ COMMIT_HASH
λ³μλ₯Ό μ΄λ»κ² μ¬μ©ν μ μμ΅λκΉ? λ³μλ₯Ό μ μνκ³ ν λ²μ λͺ¨λ μ¬μ©ν΄μΌν©λκΉ?
μ μκ°μμ΄ λμμΈμ λ§€μ° μ νμ μ λλ€. μλ§λ λ€μκ³Ό κ°μ΄ ν μ μμ΅λλ€.
RUN COMMIT_HASH = $ (git rev-parse --short HEAD) AS commit-hash
ARG --from = commit-hash COMMIT_HASH
RUN echo $ {COMMIT_HASH}
@ dnk8n μ΄κ²μ λ΄κ° κ·Έκ²μ ν΄κ²°νκΈ° μν΄νλ μΌμ λλ€.
λΉλ λ¨κ³μμ λ€μμ μνν©λλ€.
RUN git rev-parse HEAD > commit_hash
κ·Έλ° λ€μ λ€λ₯Έ λ¨κ³μμ λ°μ΄ν°μ ν¨κ» νμΌμ 볡μ¬νκ³ μ΄λ₯Ό μ¬μ©νλ μ±μ μ€ννκΈ° μ μ νκ²½ λ³μλ₯Ό μ€μ ν©λλ€.
COPY --from=builder /<build_folder>/commit_hash /<other_stage_folder>/commit_hash
CMD export COMMIT_HASH=$(cat /<other_stage_folder>/commit_hash); java -jar myApp.jar
ARGλ₯Ό μ€μ νκΈ° μν΄ μ μ¬ν μμ μ μν ν μ μμ΄μΌν©λλ€.
μ΅μν λ€λ₯Έ λ¨κ³ / μ΄λ―Έμ§μ BAR
λ³μλ₯Ό νμ¬ λΉλ λ²μλ‘ λ³΅μ¬νλ €λ©΄ μ΄μ κ°μ μμ
μ μν ν μ μμ΄μΌν©λλ€.
ENV --from=stage1 FOO=$BAR
μ΄κ²μ νκ²½ λ³μμ μ€μν λ©ν λ°μ΄ν°κ°μμ μ μκΈ° λλ¬Έμ μΈλΆ μ΄λ―Έμ§λ₯Ό 무λλ‘ μ¬μ©νλ κ²μ κ³ λ €ν λ λμ± μ€μν©λλ€.
ENV --from=nginx:latest FOO=$BAR
μ΄ ν¨ν΄μ μ¬μ©νμ¬ κ° λ¨κ³μμ νκ²½μ νμΌμ μ μ₯νμ¬ ν΄κ²° μ€μ λλ€.
FROM base1:version1 AS BUILDER1
WORKDIR /build
RUN env | sort > env.BUILDER1
FROM base2:version2 AS BUILDER2
WORKDIR /build
RUN env | sort > env.BUILDER2
FROM finalbase:version AS FINAL
WORKDIR /build
ENV LANG=C.UTF-8
COPY --from=BUILDER1 /build/env.BUILDER1 .
COPY --from=BUILDER2 /build/env.BUILDER2 .
# Use ". ./env.BUILDER" instead of "source" if /bin/sh is true-POSIX
RUN set -eux ; \
source ./env.BUILDER1 ; \
source ./env.BUILDER2 ; \
env | sort
docker inspect
μ€νν λ λ³Ό μ μλλ‘ 'docker'μ λ§μ§λ§μΌλ‘ 'μ μ₯'ν μμλ λ°©λ²μ νμ€νμ§ μμ§λ§ μλ₯Ό λ€μ΄ / etc / profileμ λ€μ΄κ° μ μμ΅λλ€.
λ§μ§λ§ λκΈμ΄ λ무 μ μ νλ€λ κ²μ 보μμ λ μΌλ§λ λ§μ κ°λ°μκ° dockerfileμ΄λ©΄μ λμμΈ κ²°μ μ μλ¬Έμ μ κΈ°νλμ§ μΏλ³Ό μ μμ΅λλ€. λΆλͺ ν "DRY"λ μλ ¨ λ κΈ°μ μ΄ μλ μμ΅λλ€. μλνκ³ μΆλ€λ©΄ λ€λ₯Έ λ μ΄μ΄λ₯Ό μΆκ°νκ³ dockerfiles ν νλ¦Ώμ μμνμμμ€ ...
μμ§ν λ§ν΄μ λλ μ΄κ²μ λν΄ λ§€μ° λλμ΅λλ€. "global arg"λ μ μκ² ν¨κ³Όκ°μλ κ² κ°μ΅λλ€. λΉλ μΈμλ₯Ό λ€λ₯Έ κ²λ³΄λ€ λ¨Όμ 맨 μλ‘ μ΄λνλ©΄ FROM μ΄νμ λ€μ λ¨κ³μ μ‘΄μ¬νμ§ μλ κ²κ³Ό κ°μ΅λλ€.
νΈμ§ : λλ μ΄μ¨λ κ° FROM νμ κ°μ΄μλ ARG λΌμΈμ λ°λ³΅ν΄μΌνλ€λ κ²μ μμ§ λͺ»νμ΅λλ€. μλνμ§λ§ μ΄μμ μ΄μ§ μμ΅λλ€.
λ€λ₯Έ λ¨κ³μμ νκ²½ λ³μλ₯Ό λͺ
μ μ μΌλ‘ λ³΅μ¬ (κ°μ Έ μ€κΈ°)νλ λ°©λ²μ νμμ
λλ€. μ ν¨ν μ¬μ© μ¬λ‘κ° μμ΅λλ€.
λ€μμ κ°λ¨ν μμ
λλ€.
FROM node:lts-alpine AS node
FROM php:7-fpm-alpine AS php
# Here goes some build instructions for PHP image, then
# Install nodejs, npm, yarn
COPY --from=node /usr/local/bin/node /usr/local/bin/node
COPY --from=node /usr/local/lib/node_modules /usr/local/lib/node_modules
COPY --from=node /opt /opt
# Create symlinks to npm, yarn binaries
RUN \
ln -s "/usr/local/lib/node_modules/npm/bin/npm-cli.js" /usr/local/bin/npm \
&& ln -s "/usr/local/lib/node_modules/npm/bin/npx-cli.js" /usr/local/bin/npx \
&& ln -s /opt/yarn-v1.??.?/bin/yarn /usr/local/bin/yarn \
&& ln -s /opt/yarn-v1.??.?/bin/yarnpkg /usr/local/bin/yarnpkg
# Some other instructions
μ΄μ νκ²½ λ³μμ λ
Έλ μ΄λ―Έμ§ ( YARN_VERSION
)μ μ μ λ μ λ²μ μ μ΄λ»κ² μ μ μμ΅λκΉ?
λ€λ¨κ³ λΉλλ CI νμ΄ν λΌμΈμ μμ²λ μ΄μ κ³Ό ν¨κ» μμ©λ©λλ€. "νκ²½ μμ"κ³Ό κ°μ κΈ°λ₯μ λ€λ₯Έ μμ€μ μ μ§ κ΄λ¦¬ λ° κΈ°λ₯ νλͺ ν¨μΌλ‘ λ°μ΄ λ£μ΅λλ€.
νκ²½ λ³μλ₯Ό λ§μ΄ μ¬μ©νλ μ½ 5 κ°μ λ μ΄μ΄κ° μμΌλ©° λͺ¨λ μ λ°μ΄νΈλ μ λͺ½μ λλ€. λ°μλ©΄ (?), μλ‘μ΄ λ¬΄λλ₯Ό μκ°νκΈ° μ μ μ°¨λΌλ¦¬ λ λ² μκ°ν©λλ€.
νμ¬ ARG ꡬνμ λͺ κ°μ§ ν₯λ―Έλ‘μ΄ λμμ μ 곡ν©λλ€.
FROM python
ARG X=os # or ENV, the same
RUN echo import ${X:-sys} # Proof that the syntax works with default SHELL
SHELL ["python", "-c"]
RUN import os
RUN import ${X} # Fails
RUN import ${X:-sys} # Fails too, but this is a documented syntax (for ENV)
λλ
FROM alpine
ARG X=ab.cd
RUN echo ${X%.*} # it's ok but it looks like magic
WORKDIR ${X%.*} # Fails here
μ΄λ ARGκ° ν νλ¦Ώμ΄ μλ λ¨κ³λ³ νκ²½ λ³μλΌλ μ¬μ€κ³Ό κ΄λ ¨μ΄ μμ΅λλ€.
λλ λΉμ (κ·Έλ¦¬κ³ λ)μ΄ μ€μνμμ κ·Έκ²μ κ²°μ½ λ³΄μ§ λͺ»νλ€λ κ²μ μκ³ μμ΅λλ€ (μλ§λ λ¬Έμμ΄ μ‘°μ ...).
κ·Έλ¬λ μ΄κ²μ λ컀 κ΅¬λ¬Έμ΄ μΈλ λ μ΄μ΄ μ ꡬ문μ κΈ°λ°μΌλ‘νλ€λ μ¬μ€μ κ°μ‘°ν©λλ€. μ΄λ λ¬Έμλ₯Ό κ±°μ§λ§λ‘ λ§λλλ€. (https://docs.docker.com/engine/reference/builder/#environment-replacement λ° λ°λ μμ " RUN import ${X:-sys}
"μ°Έμ‘°)
λ κ±°μ 'make'μ²λΌ λͺ λ Ήμ μ€ννκΈ° μ μ RUNμ΄ ARGλ₯Ό ν΄μνμ§ μλ μ΄μ λ 무μμ λκΉ?
$ cat Makefile
SHELL=python
X=os
test:
import os
import ${X}
$ make test
import os
import os
24 μκ°μ΄ λλ¬μ΅λλ€ =)
_ κ²½κ³ _μ΄ μ루μ μ μλνμ§ μμ΅λλ€.
첫 λ²μ§Έ λ¨κ³μ νμΌμ env varλ₯Ό μ°κ³ λ λ²μ§Έ λ¨κ³μ νμΌ νλλ₯Ό λ³΅μ¬ νμκ² μ΅λκΉ? κΈ°ν? μ΄λ κ² :
FROM golang:1.14 as cm_base
ARG commit_id
RUN echo "$commit_id" > /tmp/env.json
FROM golang:1.14
COPY --from=cm_base "/tmp/env.json" "/tmp/env.json"
ENV cm_cc_commit_id="$(cat /tmp/env.json)"
μλνμ§ μλ κ²μ μ μΈνκ³ λ cm_cc_commit_id
λ 리ν°λ΄ $(cat /tmp/env.json)
κ°λκ³ νμμ ννμμ νκ°λμ§ μκ³ λ¦¬ν°λ΄λ‘ μ μ§λ©λλ€. κ·Έλμ λμ νκ²½ λ³μλ₯Ό μ€μ νλ κ²μ΄ λΆκ°λ₯ ν΄ λ³΄μ
λκΉ?
κ·Έλ¬λ μλνλ κ²μ νμΌμ μ°κ³ μ§μ μ μ bash νμΌλ‘ λ§λ λ€μ λ€μμ μννλ κ²μ λλ€.
#!/usr/bin/env bash
echo "the docker entrypoint args:" "$@"
export cm_cc_commit_id="$(cat /tmp/env.json)"
"$@"
λ€μκ³Ό κ°μ΄ μκ°νμμμ€.
Dockerfileμλ μ μ ARG
λ₯Ό ν΅ν κ²½μ°λ₯Ό μ μΈνκ³ λ λ³μλ₯Ό μ μΈνλ μλ¨μ΄ μμ΅λλ€. μ΄λ μΊμ±μ μν₯μ λ―ΈμΉκΈ° λλ¬Έμ κ° λ¨κ³μ μλμΌλ‘ μ νλμ§ μμ΅λλ€.
λΉλλ λ λλ ν μ μμΌλ©° νΉμ λ¨κ³μμ ARG
λ₯Ό μ¬μ© νλ €λμ§ μ¬λΆλ₯Ό νλ¨νκ³ νμ© ν μ μμ§λ§ 리ν°λ΄μ μνλμ§ μ¬λΆλ₯Ό μΆμΈ‘ν΄μΌν©λλ€.
λ°λΌμ μ, μ μ ARG
λ₯Ό μ¬μ©νλ €λ κ° λ¨κ³λ‘ λͺ
μ μ μΌλ‘ κ°μ ΈμμΌν©λλ€. μλ§λ λΉλ λλ λ¦°ν°κ° ARG
λ₯Ό μ¬μ©νλ €κ³ νλ κ²μ²λΌ 보μ΄λ κ²½μ° κ²½κ³ λ₯Ό ꡬνν μ μμ΅λλ€ ARG
μ
λλ€.
μ΄κ²μ μ€κ³μ μν΄ κΉ¨μ§λ κ²μ΄ μλλΌ λ μ μ μ½λ μ€μ λν΄ μ΅μ μ μΊμ±μ μ ννλ λͺ
μμ μΈ μ νμ
λλ€.
μ μ ARG
μ μ¬μ©μ΄ μ²μμλ νΌλμ€λ¬μνλ€λ κ²μ νμ€ν μ΄ν΄λ©λλ€.
κ°μ₯ μ μ©ν λκΈ
μ νν©λλ€.
ENV
vars λ°ARG
ν¬ν¨ν Dockerfile λͺ λ Ήμ΄λ λΉλ λ¨κ³λ³λ‘ λ²μκ° μ§μ λλ©° λ€μ λ¨κ³μμ 보쑴λμ§ μμ΅λλ€. μ΄κ²μ μλμ μΌλ‘ μ€κ³λ κ²μ λλ€.κ·Έλ¬λ _can_ _global_
ARG
(첫 λ²μ§Έ λΉλ λ¨κ³ μ΄μ μ μ€μ )λ₯Ό μ€μ νκ³ κ° λΉλ λ¨κ³μμ ν΄λΉ κ°μ μ¬μ©ν μ μμ΅λλ€.--build-arg
μΈνΈμμ΄ λΉλ ν λ;μ΄κ²μ λ€μμ μμ±ν©λλ€.
κ·Έλ¦¬κ³ _with_ a
--build-arg
;