TIL

Today I Learned. 知ったこと、学んだことを書いていく

ENVは1行づつ記述すること - Docker

1つのENV内で定義した変数はそのENV内では使えないことがわかった

以下のものはTMPに何も設定されない

# TMPはブランク
ENV USER="tamago324" \
    TMP="${USER}"

正しく設定される

# TMPにtamago324が設定される
ENV USER="tamago324"
ENV TMP="${USER}"

1行ずつ書くのが良い

Docker 1.10以降では、イメージのレイヤーが作成されるのは RUN、COPY、ADDの3つのみになっているとのことです

# この書き方が一番いい!!
ENV NAME tamago324
ENV OS mac

RUNとCOPYとADDしかレイヤーが作成されないのは気が楽でいいね


ENVをわけない

FROM ubuntu:18.04

ENV USER="tamago324" \
    TMP="${USER}"

RUN echo ${TMP}
$ docker build -t test .
Sending build context to Docker daemon  89.09kB
Step 1/3 : FROM ubuntu:18.04
 ---> cd6d8154f1e1
Step 2/3 : ENV USER="tamago324"     TMP="${USER}"
 ---> Running in eadaba3299d3
Removing intermediate container eadaba3299d3
 ---> ddb342c89ac5
Step 3/3 : RUN echo ${TMP}
 ---> Running in df55730ff6c8

Removing intermediate container df55730ff6c8
 ---> 7f3914e78455
Successfully built 7f3914e78455
Successfully tagged test:latest
Step 3/3 : RUN echo ${TMP}
 ---> Running in df55730ff6c8

何も表示されない...

ENVを分ける

FROM ubuntu:18.04

ENV USER="tamago324"
ENV TMP="${USER}"

RUN echo ${TMP}
$ docker build -t test .

Sending build context to Docker daemon  89.09kB
Step 1/4 : FROM ubuntu:18.04
 ---> cd6d8154f1e1
Step 2/4 : ENV USER="tamago324"
 ---> Running in 7869a22a685f
Removing intermediate container 7869a22a685f
 ---> 02b76c851c06
Step 3/4 : ENV TMP="${USER}"
 ---> Running in 770fcb7d6444
Removing intermediate container 770fcb7d6444
 ---> a91b0bf173e4
Step 4/4 : RUN echo ${TMP}
 ---> Running in f55ddbef02b3
tamago324
Removing intermediate container f55ddbef02b3
 ---> 2de05b682fb3
Successfully built 2de05b682fb3
Successfully tagged test:latest

表示されてる!!

Step 4/4 : RUN echo ${TMP}
 ---> Running in f55ddbef02b3
tamago324

参考文献