2 minute read

学んだこと

業務で意識するレイヤー構造とは?

  • 今回新たにRUN apt install -y vimを追加し、再度ビルドを行った。
    • 再度ビルドを行うと、以下の処理が行われる。
      • 新たに追加したコマンドをビルド。
      • 変更されていないコマンドは、キャッシュとして残っているためビルドは実行されない。
    • そのため、ビルド時間はかからない。
  • ビルド後のレイヤーは以下の通り。
  CMD ["bash"]
  COPY ./foo.txt
  RUN apt install -y vim
  RUN apt install -y curl
  RUN apt update
  ベースイメージのレイヤー
  • 必ずしも Dockerfile のコマンドを&&でつなげて圧縮する必要はない
    • 開発状況によって最善の方法を考えること。
      • 流動的にコマンドが増える場合は、&&で短縮せずそのまま記述しイメージレイヤーを細かく分けたほうが開発時間をかけずに済む。
      • コマンドが変わらなければ、&&でコマンドを短縮し一つのイメージレイヤーで行うことで、イメージのサイズを削減することができる。

Dockerfile に環境変数を設定する方法

  • Dockerfile 内にてENV {キー}={値}と定義すると環境変数を定義することができる。
    • 一行で複数の環境変数を設定することも可能。
      • ENV {キー1}={値1} {キー2}={値2}
FROM ubuntu:20.04

ENV hello="Hello World"

CMD ["bash"]
  • 環境変数が定義されているか確認する。
> docker image build .

[+] Building 2.3s (6/6) FINISHED                                                                                                                                                     docker:desktop-linux
 => [internal] load build definition from Dockerfile                                                                                                                                                 0.0s
 => => transferring dockerfile: 97B                                                                                                                                                                  0.0s
 => [internal] load metadata for docker.io/library/ubuntu:20.04                                                                                                                                      0.1s
 => [internal] load .dockerignore                                                                                                                                                                    0.0s
 => => transferring context: 34B                                                                                                                                                                     0.0s
 => CACHED [1/1] FROM docker.io/library/ubuntu:20.04@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b                                                                         1.7s
 => => resolve docker.io/library/ubuntu:20.04@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b                                                                                1.7s
 => [auth] library/ubuntu:pull token for registry-1.docker.io                                                                                                                                        0.0s
 => exporting to image                                                                                                                                                                               0.2s
 => => exporting layers                                                                                                                                                                              0.0s
 => => exporting manifest sha256:b7cba77c7e9d47131e0fbefa0b1687a759b36f30f889022f987bc10ef6db3a9f                                                                                                    0.0s
 => => exporting config sha256:5a969e2c6dba93da1b7fed066f1e52c2301fca99a30f3bd084ca75b56a44a096                                                                                                      0.0s
 => => exporting attestation manifest sha256:8f713a38d3d82525ecc3a10cb7f4647afc721262fab87436aa959f25f91ef706                                                                                        0.0s
 => => exporting manifest list sha256:34b614c8c5dc67ce19cb9f5c0af3664657284ba1351526e1ce37e257504cae07                                                                                               0.0s
 => => naming to moby-dangling@sha256:34b614c8c5dc67ce19cb9f5c0af3664657284ba1351526e1ce37e257504cae07                                                                                               0.0s
 => => unpacking to moby-dangling@sha256:34b614c8c5dc67ce19cb9f5c0af3664657284ba1351526e1ce37e257504cae07                                                                                            0.0s

View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/1dlg6i4x1i05bgkmftudyk8fs
// ビルド成功
  • docker container run -itでコンテナ内に入り、環境変数が定義されているか確認する。
    • echo $helloで確認する、環境変数を呼び出す場合は$を先頭に付けて呼び出す。
PS D:\testdocker\docker> docker container run -it sha256:34b614c8c5dc67ce19cb9f5c0af3664657284ba1351526e1ce37e257504cae07

root@f6c1fa419199:/# echo $hello
Hello World

ARG とは?

  • Dockerfile 内で変数を定義できるコマンド。
  • イメージ作成時に利用する変数を渡す際に使用する。
    • ARG {キー1}={デフォルト値}で記述する。

実際に ARG を使用してみる

  • 以下の Dockerfile を用意する。
FROM ubuntu:20.04

ARG message
RUN echo $message > message.txt
// messageを定義し、messageの中身をmessage.txtへ書き込む

CMD ["cat", "message.txt"]
// デフォルトコマンドとしてcatで、message.txtの中身を表示する。
  • docker image buildでビルドする。
PS D:\testdocker\docker> docker image build .
[+] Building 2.6s (7/7) FINISHED                                                                                                                                                     docker:desktop-linux
 => [internal] load build definition from Dockerfile                                                                                                                                                 0.0s
 => => transferring dockerfile: 132B                                                                                                                                                                 0.0s
 => [internal] load metadata for docker.io/library/ubuntu:20.04                                                                                                                                      0.0s
 => [internal] load .dockerignore                                                                                                                                                                    0.0s
 => => transferring context: 34B                                                                                                                                                                     0.0s
 => CACHED [1/2] FROM docker.io/library/ubuntu:20.04@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b                                                                         1.6s
 => => resolve docker.io/library/ubuntu:20.04@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b                                                                                1.6s
 => [auth] library/ubuntu:pull token for registry-1.docker.io                                                                                                                                        0.0s
 => [2/2] RUN echo $message > message.txt                                                                                                                                                            0.3s
 => exporting to image                                                                                                                                                                               0.4s
 => => exporting layers                                                                                                                                                                              0.2s
 => => exporting manifest sha256:b1009bd26f4c7ec3039866e3dbd4f669f334eab8ee977e20d31d0c053ca054c9                                                                                                    0.0s
 => => exporting config sha256:e7bee5f31baedf05f8e44a83eaaffe385520b06ce5a33594ea5bdd2cece64836                                                                                                      0.0s
 => => exporting attestation manifest sha256:f2e6fa5f44fcaa2cf5bbb7ab1b7b89460884d0f13cf89290c622e20a9307ca9d                                                                                        0.1s
 => => exporting manifest list sha256:938c82fda4f01dd2b912e1365cb5d5270fddf4d415de6330e677d627c4f6d33b                                                                                               0.0s
 => => naming to moby-dangling@sha256:938c82fda4f01dd2b912e1365cb5d5270fddf4d415de6330e677d627c4f6d33b                                                                                               0.0s
 => => unpacking to moby-dangling@sha256:938c82fda4f01dd2b912e1365cb5d5270fddf4d415de6330e677d627c4f6d33b                                                                                            0.0s

View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/moo5jheswewxd85x9yvpzu9lz
// ビルド成功した。
  • docker container run -itでコンテナを実行する。
PS D:\testdocker\docker> docker container run -it sha256:938c82fda4f01dd2b912e1365cb5d5270fddf4d415de6330e677d627c4f6d33b

// 何も表示されなかった。
// 理由としては、message変数に何も渡していないため、空の状態で表示された。
PS D:\testdocker\docker>
  • 今度は、message 変数にHello Messageを代入してみる。
    • docker image build --build-arg <変数名>=<値> <ビルドコンテキストのパス>で定義した変数に代入し、ビルドを実行することができる。
PS D:\testdocker\docker> docker image build --build-arg message="Hello Message" .
[+] Building 1.1s (6/6) FINISHED                                                                                                                                                     docker:desktop-linux
 => [internal] load build definition from Dockerfile                                                                                                                                                 0.0s
 => => transferring dockerfile: 132B                                                                                                                                                                 0.0s
 => [internal] load metadata for docker.io/library/ubuntu:20.04                                                                                                                                      0.0s
 => [internal] load .dockerignore                                                                                                                                                                    0.0s
 => => transferring context: 34B                                                                                                                                                                     0.0s
 => CACHED [1/2] FROM docker.io/library/ubuntu:20.04@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b                                                                         0.0s
 => => resolve docker.io/library/ubuntu:20.04@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b                                                                                0.0s
 => [2/2] RUN echo Hello Message > message.txt                                                                                                                                                       0.3s
 => exporting to image                                                                                                                                                                               0.4s
 => => exporting layers                                                                                                                                                                              0.1s
 => => exporting manifest sha256:e7652ed7ac65401d2b1ac9908cbc12e3b986c8ac98db5c2760d34938c25b3a39                                                                                                    0.0s
 => => exporting config sha256:8497a04d08ed2f9e4147f2e7fa92e31c7054b91b798e05c37ad978092230331d                                                                                                      0.0s
 => => exporting attestation manifest sha256:512f2bf5af7c982e16f00f9947911932571a45763db267a170dc8d4859b56469                                                                                        0.0s
 => => exporting manifest list sha256:a3a8c70aec9de4268715c33df5ddc263c9a439b8d1076a153b92256397c4c3e0                                                                                               0.0s
 => => naming to moby-dangling@sha256:a3a8c70aec9de4268715c33df5ddc263c9a439b8d1076a153b92256397c4c3e0                                                                                               0.0s
 => => unpacking to moby-dangling@sha256:a3a8c70aec9de4268715c33df5ddc263c9a439b8d1076a153b92256397c4c3e0                                                                                            0.0s

View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/yx8sztezksfzrzre59zpd0tzc
  • コンテナを起動し、Hello Messageが表示されるか確認する。
PS D:\testdocker\docker> docker container run -it sha256:a3a8c70aec9de4268715c33df5ddc263c9a439b8d1076a153b92256397c4c3e0

Hello Message
// 先ほどビルド実行時に定義したHello Messageを表示出来た。

PS D:\testdocker\docker>

Tags:

Updated: