うさぎ好きエンジニアの備忘録

うさぎたちに日々癒されているエンジニアが業務で直面したもの & 個人的な学習メモを残していきます。

DockerのONBUILD命令を使ってみる。

第四弾はDockerイメージを作る際に使える命令の1つである「ONBUILD命令」を触ってみる。

ONBUILD命令とは

ONBUILD命令は「次のビルドで実行するコマンドをイメージ内に設定するための命令」。 あるDockerfileにONBUILD命令でコマンドを実行するように設定してビルドしてイメージを作成したのち、そのイメージを他のDockerfileでベースイメージとして設定してビルドすると、ONBUILD命令のコマンドを実行させることができる。

試しにやってみる

以下のようにONBUILD命令で echo "Hello, World" を実行させるようなDockerfileを作成。

FROM centos:7
ONBUILD RUN echo "Hello, World"

このファイルを「Dockerfile.base」と名前をつけて、イメージを作成。 (ビルドしたいDockerfileを直接指定する場合は -f オプションを使う。)

$ docker build -t ponteru-base -f Dockerfile.base .
...
# ビルドログを見るとONBUILDが設定されていることが確認できる。
Step 2/2 : ONBUILD run echo "Hello, World"
 ---> Running in db5f255995a3
 ---> 046656b6a03f

イメージが作成できたことを確認。

$ sudo docker image ls
REPOSITORY                  TAG                 IMAGE ID            CREATED              SIZE
ponteru-base                 latest              046656b6a03f        About a minute ago   202 MB

このベースイメージをFROM命令で読み込むDockerfileを作成。

FROM ponteru-base:latest

このDockerfileをビルドすると、「Hello, World」が表示される。

$ docker build -t ponteru-sample .
Sending build context to Docker daemon 3.072 kB
Step 1/1 : FROM ponteru-base:latest
# Executing 1 build trigger...
Step 1/1 : RUN echo "Hello, World"
 ---> Running in 234e80278134

Hello, World
 ---> 1a44c5ac4189
Removing intermediate container 234e80278134
Successfully built 1a44c5ac4189

ちゃんとONBUILD命令のコマンドを実行させることができているのでOK。