一時的にコマンド実行したい(docker compose run)
$ docker compose run --rm <サービス名> <コマンド>
docker compose runは、コンテナを一時的に起動してコマンドを実行するためのコマンドです。
docker compose execと異なり、実行時にコンテナを新規作成します。
実行後にコンテナを自動削除するため、必ず--rmオプションをつけるのが基本です。
コンテナを自動削除したい(--rm)
$ docker compose run --rm <サービス名> <コマンド>
--rmオプションを指定すると、コマンド実行後にコンテナが自動削除されます。
一時的なコンテナを実行する際は、このオプションをつけることでディスク容量の無駄を防げます。
注釈
--rmを忘れるとコンテナが残ります
--rmオプションを忘れると、実行済みのコンテナがどんどんと溜まってしまいます。
docker compose ps --allで停止済みコンテナを確認できます。
docker compose rm <コンテナ名>でコンテナを手動で削除できます。
docker container pruneで停止済みコンテナを一括削除できます。
インタラクティブに実行したい(-it)
// シェルを対話的に実行
$ docker compose run --rm -it <サービス名> bash
// Pythonをインタラクティブモードで実行
$ docker compose run --rm -it <サービス名> python
-i(--interactive)と-t(--tty)オプションを組み合わせると、コンテナ内のシェルやPythonなどを対話的に利用できます。
-iは標準入力を開いたままに、-tは仮想端末を割り当てます。
実行例
// 単発でコマンド実行
$ docker compose run --rm app python script.py
// テストを実行
$ docker compose run --rm app pytest tests/
// データベーションマイグレーション
$ docker compose run --rm web python manage.py migrate
// LaTeXでコンパイル
$ docker compose run --rm texlive latexmk main.tex