Dockerfileの FROM
句で、いわゆる、こういう事がしたかった
一度やろうとして出来ないと思ってたけど、ちゃんと調べたら出来たのでメモ
最初のFROM句より前にARGを書く
たとえばこういうDockerfile
1 2 3 4
| ARG VERSION // ←ARG追加
FROM debian:$VERSION RUN cat /etc/debian_version
|
ビルドするとこんな感じ
1 2 3 4 5 6 7 8 9 10 11 12 13
| // build-argでバージョン指定 $ docker build --no-cache --build-arg VERSION=buster -t hoge:latest . Sending build context to Docker daemon 2.048kB Step 1/3 : ARG VERSION Step 2/3 : FROM debian:$VERSION ---> 1b686a95ddbf Step 3/3 : RUN cat /etc/debian_version ---> Running in 8ba619661b8e 10.4 Removing intermediate container 8ba619661b8e ---> 2491b9b8db7c Successfully built 2491b9b8db7c Successfully tagged hoge:latest
|
マルチステージの場合(誤)
直感的に、こう書くとエラーになる
1 2 3 4 5 6 7 8 9
| // 1つ目のステージ FROM debian:stretch as dummy RUN cat /etc/debian_version
ARG VERSION // ←ARG追加
// 2つ目のステージ FROM debian:$VERSION RUN cat /etc/debian_version
|
ビルドするとこんな感じ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| $ docker build --no-cache --build-arg VERSION=buster -t hoge:latest . Sending build context to Docker daemon 2.048kB Step 1/5 : FROM debian:stretch as dummy ---> 62ace29a8c8f Step 2/5 : RUN cat /etc/debian_version ---> Running in c4ca256000ad 9.13 Removing intermediate container c4ca256000ad ---> e8488c41ff8a Step 3/5 : ARG VERSION ---> Running in d11cca5fc3d6 Removing intermediate container d11cca5fc3d6 ---> 8aa7abe6cc5c Step 4/5 : FROM debian:$VERSION invalid reference format // ←とてもエラー
|
マルチステージの場合(正)
Dockerfile内で登場する最初のFROM句より前に、 ARG
を書くと期待した結果が得られる
1 2 3 4 5 6 7 8 9
| ARG VERSION // ←ARG追加
// 1つ目のステージ FROM debian:stretch as dummy RUN cat /etc/debian_version
// 2つ目のステージ FROM debian:$VERSION RUN cat /etc/debian_version
|
ビルドするとこんな感じ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| $ docker build --no-cache --build-arg VERSION=buster -t hoge:latest . Sending build context to Docker daemon 2.048kB Step 1/5 : ARG VERSION Step 2/5 : FROM debian:stretch as dummy ---> 62ace29a8c8f Step 3/5 : RUN cat /etc/debian_version ---> Running in f4d4cb2f59a6 9.13 Removing intermediate container f4d4cb2f59a6 ---> b80c406abe71 Step 4/5 : FROM debian:$VERSION ---> 1b686a95ddbf Step 5/5 : RUN cat /etc/debian_version ---> Running in 01d38992597f 10.4 Removing intermediate container 01d38992597f ---> 9e976d4e5ca1 Successfully built 9e976d4e5ca1 Successfully tagged hoge:latest
|