概要
docker compose
のコマンドでrun
とexec
の違いが曖昧だったためメモ用に残しておきます。
docker compose
について詳しく知りたい場合は下記公式ドキュメント参照。
Docker Compose公式ドキュメント
docker composeのrun、 execコマンドとは
run
、exec
コマンドの用途はどちらも同じです。
コンテナに対してコマンドを実行したいときに使用するコマンドです。
下記のように実行します。
docker-compose run サービス名 実行したいコマンド
or
docker-compose exec サービス名 実行したいコマンド
ちなみにコマンドで出てくるサービス名は、docker-compose.yml
で指定したサービス名です。
docker-compose.yml
の記載方法はここでは割愛します。
コマンド入力例
例えば、backend
というサービス名のRuby on Rails
のコンテナに対して下記のようにコマンドを実行できます。
docker-compose run backend rails db:migrate
or
docker-compose exec backend rails db:migrate
run、execコマンドの違い
run
→ __新たにコンテナを立ち上げて__入力したコマンドを実行。
exec
→ __起動中のコンテナに対して__入力したコマンドを実行。
runコマンドを使う際のTips
run
コマンドは新たにコンテナを立ち上げるので、その都度rm
コマンドやprune
コマンドでコンテナを削除しないと容量を圧迫することになります。
いちいちコマンド実行するのが面倒なので、run
コマンドを実行する際にオプションで--rm
を渡してあげるとコマンド実行後はそのままコンテナを削除してくれます。
docker-compose run --rm サービス名 実行したいコマンド
まとめ
run
とexec
のどちらを使用するかですが、個人的にはrun
を使用します。
なぜならexec
はコンテナを起動しておかないといけないからです。