Docker超入門:ONBUILD命令で次のビルドを自動化する仕組み

 Dockerfileの中には、ちょっと特殊な命令が存在します。そのひとつが ONBUILD命令 です。通常の命令はイメージをビルドするときに実行されますが、ONBUILDは一味違います。ONBUILDで指定した処理は「すぐには実行されず」、そのイメージをベースに 次のイメージをビルドするとき に発動します。これを使うと、アプリケーションの配布やチーム開発で効率よく環境を整えることができます。

ONBUILD命令の基本

 ONBUILD命令は、Dockerfileに仕込んでおくと、次のビルド時に自動で実行される処理を定義できます。

書式はとてもシンプルです。

ONBUILD <命令>

この <命令> の部分には、COPYやADD、RUNなど通常の命令を指定できます。

実行例

ONBUILD COPY . /app

 この場合、そのイメージをベースに新しいイメージを作るときに、自動的にホストのファイルがコンテナ内の/appにコピーされます。

ONBUILD命令の特性

表にまとめると次のようになります。

特性説明
実行タイミングベースイメージとして利用したときに初めて発動
よく使う命令COPY, ADD, RUN など
メリット開発者が追加の手順を書かなくても、自動的に環境が構築される。
注意点ビルド内容が「隠れて」実行されるため、使いすぎると挙動が分かりづらくなる。

利用例(Webシステム構築)

ONBUILDが活躍するのは、チームで開発するWebシステムなどです。

1回目のビルド(ベースイメージ作成)

  • UbuntuなどのベースOSを指定
  • Nginxや必要なツールをインストール
  • ONBUILD命令で「ソースコードをコピーする処理」などを仕込む

実行例

FROM ubuntu:24.04
RUN apt-get update && apt-get install -y nginx
ONBUILD COPY . /var/www/html

この段階では、ONBUILDの処理はまだ実行されません。

2回目のビルド(アプリケーション用イメージ作成)

開発者が上記のベースイメージを使ってアプリケーションをビルドすると…

  • 1回目のビルドで定義したONBUILDが「自動的に発動」
  • ソースコードが /var/www/html にコピーされ、Web環境がすぐ整う。

 結果として、開発者は 追加でCOPY命令を書く必要がなく、アプリケーションをすぐに動かせるイメージが手に入ります。

まとめ

 ONBUILD命令は「次のビルドで自動的に実行される処理」を仕込める便利な仕組みです。これを使えば、ベースイメージに必要な処理をあらかじめ準備しておき、開発者はシンプルなDockerfileでアプリケーションをデプロイできます。
 ただし、裏で自動実行されるため使いすぎるとDockerfileの挙動が読みにくくなるので、あくまで「チーム開発や再利用するベースイメージ」に活用するのがオススメです。