概要
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はコンテナを起動しておかないといけないからです。