dogwood008の開発メモ!

最近のマイブームは機械学習, Ruby on Rails。中でも機械学習を使った金融商品の自動取引に興味があります。

【Docker】Docker Composeの run と exec の違い

Docker Composeの run と exec は、どちらも同じような効果が得られる。つまり、コンテナの中に入ったり、コンテナ上でプログラムを実行したりできる。

 

しかし、もう少し異なった視点で見ると、それぞれ異なる機能を持っているのがわかる。

 

docker compose runは、新たにイメージからコンテナを作って実行する。この時、--service-ports というオプションをつけておけば、予めdocker-compose.yml や compose.yml で指定したポートをバインドした状態で実行してくれる。

 

一方、docker compose execは、既に docker compose up で動いているコンテナを使ってコマンドを実行できる。

 

使い分けとしては、既に docker compose up しているこんてながあれば、exec がおすすめである。run はコンテナ作成のオーバーヘッドがあるので、やや時間がかかる。

 

runは、他のターミナルと独立して何か実行したいときに便利である。ボリュームをマウントしていない限り、他のコンテナでファイルに加えた変更が連動する事はない。