
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の挙動が読みにくくなるので、あくまで「チーム開発や再利用するベースイメージ」に活用するのがオススメです。
