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。