1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめてのアドベントカレンダーAdvent Calendar 2024

Day 20

【Docker】docker compose execとdocker compose runの違い

Last updated at Posted at 2024-12-20

はじめに

学習中にDockerを使用している際、
docker composeは分かるが、次に続くexecrunってどういう意味?」と疑問に感じたので調べてまとめたことを備忘録として記事にします。

目次

  1. docker compose execについて
  2. docker compose runについて
  3. この2つはどう使い分ければよい?
  4. まとめ

docker compose execについて

Docker Compose環境で起動中のコンテナに対してコマンドを実行します。

docker compose exec [オプション] <サービス名> <コマンド>

例としてRailsを用います(オプションは必須じゃないです)

docker compose exec web rails 〇〇

そもそも... Docker Composeってなんだ?

簡単に説明すると...

  • 複数のDockerコンテナを一つのコマンドで立ち上げることができる
  • Docker CLI(コマンドラインインターフェース)の拡張機能として動作する
    プログラムのこと
  • docker-compose.ymlで設定されたサービスを操作する

docker compose runについて

Docker Compose環境でコンテナが起動していなくてもコマンド入力が可能で、
新規のコンテナを作成してコマンドを実行します。
記述方法もexecと似ています。

docker compose run [オプション] <サービス名> <コマンド>

この2つはどう使い分ければよい?

このexecrunの2つのはどのように使い分ければよいのでしょうか?
前項の各説明での下線部分に注目します。

  • docker compose exec
    起動しているコンテナに対してコマンドを入力するため、
    既存の環境に直接コマンドを入力する場合。
  • docker compose run
    既存のコンテナには触れずに新規でコンテナを追加するため、
    一時的な作業(マイグレーション・初期設定・テスト等)をする場合。

execは、確実に実行できる場合でrunのように回り道をせずに
すぐにコンテナに適用したい場合で有効。
runはコンテナが起動していないので、
コンテナ起動前にbundle installをし、問題がなければ
コンテナを起動して同期させるというコマンド入力直後のトラブル防止になる。

まとめ

docker compose exec docker compose run
コンテナの状態 既に起動中 起動していなくてもよい
処理の影響 対象コンテナに直接処理を実行 新規でコンテナを作成して実行
現在のコンテナは影響しない
使い分け すぐに適用させたい
エラーが無く確実に実行可能な処理
一時的または試験的な処理

おわりに

execrunは使用用途に応じて使い分けることが重要ですね。
不安な処理であれば一度runで確認し、問題がなければexecで本番環境に適用させるといった流れも可能です。
まだまだDockerは奥が深い...!!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?