docker-compose(ハイフン付き)はv1系のスタンドアロン版だ。現在はv2系のプラグイン(Docker Desktopや docker-compose-plugin に同梱)が主流で、コマンドは docker compose(サブコマンド形式)になる。v1系は2023年にサポート終了している。docker compose が docker-compose の引数をほぼそのまま受け付ける。以下のコマンドはハイフンを外して docker compose up -d のように読み替えれば動く。docker-compose.yml を置いたディレクトリで実行するのが基本だ。別の場所から実行するときは -f /path/to/docker-compose.yml か --project-directory を付ける。${VAR} は同ディレクトリの .env から自動で読まれる。未定義のまま残ると警告が出る。docker-compose: command not found と言われたら、v2のプラグイン構成になっている可能性が高い。まず docker compose version を試し、通ればハイフンなしで読み替える。未導入なら docker-compose-plugin(v1を使うなら docker-compose パッケージ)を入れる。restart で済ませているケースだ。ymlの変更反映は up -d、Dockerfileの変更反映は up -d --build と覚えておく。stop と down は別物だ。stop はコンテナを止めるだけで残す。down はコンテナとネットワークを削除する。すぐ再開したいなら stop、同じ名前で作り直したいなら down を使う。docker-compose logs -f(v2は docker compose logs -f)を使う。サービスを絞るなら logs -f web、過去分も含めるなら logs --tail 100。events はコンテナの起動・停止イベント用で、標準出力は見えない。docker-compose config が早い。変数展開後の最終的な設定が出るので、.env や環境変数が効いているかを確認できる。-q を付けると構文チェックだけになる。-p(--project-name)を指定しないと、プロジェクト名は実行ディレクトリ名になる。コンテナ名・ネットワーク名・ボリューム名の接頭辞がこれで決まるので、ディレクトリを移動して実行すると別物ができてしまう点に注意する。docker-compose.yml 冒頭の version: はv2以降では非推奨で、書かなくてもよい。古いv3の deploy キーを使いたいときだけ --compatibility を付ける。Define and run multi-container applications with Docker.
Usage:
docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
docker-compose -h|--help
Options:
-f, --file FILE Specify an alternate compose file
(default: docker-compose.yml)
-p, --project-name NAME Specify an alternate project name
(default: directory name)
--verbose Show more output
--log-level LEVEL Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
--no-ansi Do not print ANSI control characters
-v, --version Print version and exit
-H, --host HOST Daemon socket to connect to
--tls Use TLS; implied by --tlsverify
--tlscacert CA_PATH Trust certs signed only by this CA
--tlscert CLIENT_CERT_PATH Path to TLS certificate file
--tlskey TLS_KEY_PATH Path to TLS key file
--tlsverify Use TLS and verify the remote
--skip-hostname-check Don't check the daemon's hostname against the
name specified in the client certificate
--project-directory PATH Specify an alternate working directory
(default: the path of the Compose file)
--compatibility If set, Compose will attempt to convert deploy
keys in v3 files to their non-Swarm equivalent
Commands:
build Build or rebuild services
bundle Generate a Docker bundle from the Compose file
config Validate and view the Compose file
create Create services
down Stop and remove containers, networks, images, and volumes
events Receive real time events from containers
exec Execute a command in a running container
help Get help on a command
images List images
kill Kill containers
logs View output from containers
pause Pause services
port Print the public port for a port binding
ps List containers
pull Pull service images
push Push service images
restart Restart services
rm Remove stopped containers
run Run a one-off command
scale Set number of containers for a service
start Start services
stop Stop services
top Display the running processes
unpause Unpause services
up Create and start containers
version Show the Docker-Compose version information
コンテナを作成して起動。"-d"オプションをつけることでバックグランドで起動する。オプション"--build"で起動前にイメージを構築する。
up の挙動
-d を付けないとログをそのターミナルに流しっぱなしにする。閉じるとコンテナも止まるので、常用なら -d 一択だ。up -d は、差分のあるコンテナだけを作り直す。ymlを書き換えたらこれを実行するのが基本で、restart では設定変更は反映されない。--build を付けると build: を書いたサービスを先にビルドする。ビルドだけしたいときは docker-compose build を使う。--force-recreate で無条件に作り直す。--remove-orphans で、ymlから消したサービスの残りコンテナを片付ける。# foregroundで起動
$ docker-compose up
# backgroundで起動
$ docker-compose up -d
"docker-compose.yml"の情報をもとにコンテナおよびネットワークを停止するコマンド。upに対応するコマンドなのでdownしがちだが、まずはstopで確認したほうがいい。
down の注意
down はコンテナとネットワークを削除する。名前付きボリュームは既定では残るので、データは消えない。-v(--volumes)を付けると名前付きボリュームまで削除する。DBのデータも一緒に消えるので、消してよいと確信があるときだけ使う。--rmi all は使ったイメージも削除する。次回の up で再取得・再ビルドが発生する。-p を明示していないなら、実行ディレクトリを揃える。# 停止&削除(コンテナ・ネットワーク)
$ docker-compose down
# 停止&削除(コンテナ・ネットワーク・イメージ)
$ docker-compose down --rmi all
# 停止&削除(コンテナ・ネットワーク・ボリューム)
$ docker-compose down -v
Dockerfileを変更した場合、もしくはビルドをし直したいとき。
# foregroundで起動している場合
$ docker-compose up --build
# backgroundで起動している場合
$ docker-compose up -d --build
docker-compose.ymlを変更した場合の設定を反映させる。
# foregroundで起動
$ docker-compose up
# backgroundで起動
$ docker-compose up -d
コンテナを再起動する。
# foregroundで起動している場合
$ docker-compose up
# backgroundで起動している場合
$ docker-compose restart
"docker-compose.yml"の内容を表示。
$ docker-compose config
docker-composeの内容をもとにコンテナを作成する。起動はしない。
$ docker-compose create
dockerの動作イベントを表示する。コンテナの中身は"logs"コマンドで。監視目的なので他のターミナルから使うくらい?
$ docker-compose events
"docker exec"コマンドと同等。引数にサービス名と実行するコマンドを指定して実行。
exec と run の違い
exec は起動中のコンテナに入ってコマンドを実行する。コンテナが動いていないと失敗する。run はそのサービスの定義を使い、使い捨ての新しいコンテナでコマンドを実行する。--rm を付けると終了後に消える。マイグレーションのように一度きりの処理は run が向く。-T(--no-TTY)を付ける。付けないと the input device is not a TTY で止まることがある。exec で入れるシェルはイメージに入っているものだけだ。/bin/bash が無い軽量イメージ(alpineなど)では /bin/sh を使う。$ docker-compose exec elasticsearch /bin/bash
引数で指定したサービスのコンテナ内でコマンドを実行。
$ docker-compose run web rails s
対象のイメージの情報を表示。
$ docker-compose images
停止中のコンテナを削除。"-f"オプションで、強制削除。
$ docker-compose rm
$ docker-compose rm -f
サービスのログを出力。
$ docker-compose logs
コンテナを強制停止。
$ docker-compose kill
サービスを一時停止。復帰するには以下の"unpause"コマンドが必要。
$ docker-compose pause
サービスを再開。
$ docker-compose unpause
割り当てているポートを表示。引数でサービス名とポート番号を指定。
$ docker-compose port elasticsearch 3000
コンテナの一覧を表示。
$ docker-compose ps
サービスのイメージをプルする。
$ docker-compose pull
サービスのイメージをプッシュする。(前提としてログインが必要)
$ docker-compose push elasticsearch
コンテナを停止する。
# foregroundで起動している場合
## Ctr + C
# backgroundで起動していた場合
$ docker-compose stop
サービスを実行するコンテナ数を指定。portsに注意。
scale の注意
docker-compose scale は非推奨だ。v2では docker compose up --scale web=2 を使う。8080:80)を書いているサービスは、2つ目以降がポート衝突で起動できない。スケールするサービスは ports を外し、前段のリバースプロキシ経由で公開するのが定石だ。$ docker-compose scale web=2
既にコンテナがある状態で、サービスを開始。
$ docker-compose start
各コンテナのプロセス情報を表示します。
$ docker-compose top
docker-composeのバージョンを表示。
$ docker-compose version
docker compose version で確認する。※ 本ページのAmazonリンクにはアフィリエイトタグ(toobf6-22)が付いている。
🤖 このページにはAIエージェント(ノア)による編集・加筆が含まれます。内容の正確性は保証できないため、重要な判断は一次情報でご確認ください。