【Docker】build, up, run コマンドの違い
質問
Dockerを用いて、ローカル環境の構築をしようとしていますが、初心者で手間取っています。
それぞれのコマンドの役割と違いについて教えてください。
また、以下の3つのコマンドで実行する正しい順序や不要なコマンドはありますか?
docker compose bulid
docker compose up
docker compose run
回答
Docker 初心者の方向けに、以下の3つのコマンドの意味と違い、そして実行の正しい順序や不要なものについて丁寧に解説します。
🔍 それぞれのコマンドの意味と役割
1. docker compose build
役割:
docker-compose.yml
ファイルに基づいて、必要な Docker イメージ をビルド(作成)します。
ポイント:
- まだイメージがないときや、コードやDockerfileを更新したときに実行します。
- キャッシュを利用して再ビルドもできます。
2. docker compose up
役割:
Docker Compose で定義された コンテナを起動 します。
実際にやること:
-
build
がまだなら自動的にビルドします(ただし、手動でやった方が確実)。 - ネットワークやボリュームの作成も行います。
-
-d
オプションをつけるとバックグラウンドで起動します(例:docker compose up -d
)。
3. docker run
役割:
特定の Docker イメージから、単体のコンテナを起動します。
使う場面:
- Compose を使わずに、個別に1つのコンテナだけ起動したいとき。
- 一時的にコンテナを立ち上げるときなど。
違い:
-
docker compose
は複数のサービス(コンテナ)をまとめて扱う。 -
docker run
は1つのコンテナを個別に操作する。
✅ 実行する正しい順序と不要なコマンド
Compose を使っている場合(通常はこちらがおすすめ):
docker compose build # ① イメージを作成
docker compose up # ② コンテナを起動
docker run
は 不要 です。
docker run
は Compose を使わない場合のみ 使用します。
Compose を使って環境構築しているなら、基本的に使いません。
🎯 まとめ
コマンド | 必要か? | 用途 |
---|---|---|
docker compose build |
✔️ | イメージをビルド(構築)する |
docker compose up |
✔️ | コンテナを起動(環境立ち上げ)する |
docker run |
❌ | Compose を使わないときにのみ使用 |
💡補足アドバイス
-
docker compose up --build
とすれば、build も一緒にしてくれるので便利です。 - 途中で変更があった場合は、再度
build
→up
をやり直すのが基本です。
不明点や docker-compose.yml
の中身についても気軽に聞いてください!
質問
docker runとdocker compose runは、異なる役割なのでしょうか?
回答
はい、docker run
と docker compose run
は似ているようで 目的や使い方が異なります。以下に、初心者でもわかりやすいように違いと使い分けを整理します。
🧭 目的の違い(ざっくり言うと)
コマンド | 主な用途 |
---|---|
docker run |
単体のコンテナを直接実行する(Composeなし) |
docker compose run |
Composeプロジェクト内の1つのサービスを一時的に実行(例:バッチ処理やテスト) |
🔍 詳しく比較
比較項目 | docker run |
docker compose run |
---|---|---|
使用する定義ファイル | 使わない(コマンドラインで全て指定) |
docker-compose.yml を使う |
実行対象 | 任意のイメージやコマンド | Compose に定義されたサービスの1つ |
ネットワーク | デフォルトは個別ネットワーク | Compose ネットワークに接続される(他サービスと通信可能) |
ボリューム・環境変数等 | 自分でオプション指定が必要 | Compose ファイルに書かれた設定が反映される |
主な用途 | 単発のコンテナ起動、テスト、確認など | 開発中のバッチ処理や CLI コマンドの実行など |
✅ 具体例で比較
🔸 docker run
の例(独立したコンテナを起動)
docker run -it --rm ubuntu bash
- Ubuntu イメージを使って、対話モードでコンテナを起動。
- Dockerfile や Compose に依存しない。
🔹 docker compose run
の例(Compose に定義されたサービスの一部を実行)
docker compose run web python manage.py migrate
-
web
というサービス(例:Django)に対して、マイグレーションコマンドを実行。 -
docker-compose.yml
に設定された環境変数、ボリューム、ネットワークなどをそのまま利用。
❗注意点
-
docker compose run
は通常、一時的なコマンド実行(バッチや管理用) に使います。
→ 例:manage.py
やnpm install
など -
サービス全体を起動したいときは
docker compose up
を使います。
🎯 まとめ(覚え方)
状況 | 使うべきコマンド |
---|---|
単体で試す・軽く動かす | docker run |
Compose プロジェクトで一時的なコマンドを実行 | docker compose run |
複数サービスを連携して起動 | docker compose up |
必要があれば、具体的な docker-compose.yml
例にあわせた使い方も説明できますよ!
質問
「docker compose build と docker compose up を実行していれば、docker compose run は必要ないですか?」
回答
結論から言うと:
基本は docker compose build
と docker compose up
だけで十分 なケースが多いです。
-
docker compose build
でイメージを作り -
docker compose up
でサービスを起動
これで複数コンテナが連携して動きます。
では docker compose run
は何に使う?
- 一時的にサービス内で特別なコマンドを実行したいとき に使います。
例えば、
- マイグレーション(例:
python manage.py migrate
) - バッチ処理やデータ投入
- テストの実行
- コンテナ起動中にシェルを開きたい時
docker compose run web bash
のように、サービス web
のコンテナ内でコマンドを実行します。
まとめ
コマンド | 使うタイミング |
---|---|
docker compose build |
イメージを作成・更新したい時に使う |
docker compose up |
サービス群を起動したい時に使う |
docker compose run |
起動中とは別に一時的にコンテナ内でコマンドを実行したい時に使う |
つまり、
- 普通に環境を立ち上げて使うだけなら
→build
+up
でOK - 特別なコマンドをコンテナ内で走らせたいなら
→docker compose run
を使う
もし具体的に「どういう時に使うのかもっと知りたい」や「例を見たい」などあれば教えてください!