Docker Compose | Docker
概要
docker compose.ymlの概要。
ref. https://docs.docker.jp/compose/compose-file.html
services:
mysql:
# ....
app:
# ....
mysqlやappをDocker Composeではサービスと呼ぶ。
docker compose コマンド
- docker compose ps –all
- docker compose build
- docker compose up
- docker compose stop
- docker compose rm
- docker compose down
- docker compose run
- docker compose push
docker compose ps –all
サービス一覧を表示する
$ docker compose ps --all
NAME COMMAND SERVICE STATUS PORTS
nginx-php81-fpm-envsubst-aws-nginx-1 "/docker-entrypoint.…" nginx running 0.0.0.0:8080->80/tcp
nginx-php81-fpm-envsubst-aws-php-fpm-1 "docker-php-entrypoi…" php-fpm running 9000/tcp
docker compose build
ref. Compose file build reference
サービスの Dockerfile やビルドディレクトリの内容を変更する場合は、docker compose build を実行して再ビルドします。
– https://docs.docker.jp/compose/reference/up.html
Dockerfileを変更したときに実行docker compose buildで指定したサービスだけをbuild可能
imageおよびbuildプロパティ
3パターンあり挙動が異なります。
- imageプロパティのみ指定
- buildプロパティのみ指定
- imageおよびbuildプロパティの両方を指定
imageプロパティのみ指定
コンテナの実行時、元になるイメージを指定します。リポジトリ名/タグ、あるいはイメージ ID の一部を(前方一致で)指定できます。
– https://docs.docker.jp/compose/compose-file/compose-file-v3.html#image
イメージが存在していなければ、Compose は pull (取得)を試みます。しかし build を指定している場合は除きます。その場合、指定されたオプションやタグを使って構築します。
– https://docs.docker.jp/compose/compose-file/compose-file-v3.html#image
imageプロパティに指定したイメージがローカルに存在する場合はそのイメージを使用する- ローカルにない場合はリモート(多くはDocker Hub)からpullする
services:
some:
image: some:1.0.0
# ...
other:
# ...
buildプロパティのみ指定
services:
some:
build:
context: .
dockerfile: Dockerfile
# ...
other:
# ...
imageおよびbuildプロパティの両方を指定
services:
some:
image: some:1.0.0
build:
context: .
dockerfile: Dockerfile
# ...
other:
# ...
- Dockerfileから
イメージを作成する - イメージはimageプロパティに指定した名前(およびタグ)になる
ref. https://docs.docker.jp/compose/compose-file/compose-file-v3.html#build
docker compose up
- コンテナの構築、作成、起動、アタッチする
StateはUpに変更する- 既存イメージがない場合は作成する
- ENTRYPOINT / CMD は初回起動時だけでなく、コンテナが再起動(start)された際にも毎回実行される
サービス用のコンテナの構築、作成、起動、アタッチを行います。
– https://docs.docker.jp/compose/reference/up.html
コンテナの作成後にサービス設定やイメージが変更された場合は、 docker compose up の実行によって対象コンテナの停止と再作成が行われます(マウントしているボリュームは保持します)。
– https://docs.docker.jp/engine/reference/commandline/compose_up.html#docker compose-up)
docker compose up -d
デタッチド・モード: バックグラウンドでコンテナを実行し、新しいコンテナ名を表示 –abort-on-container-exit と同時に使えない
https://docs.docker.jp/compose/reference/up.html
docker compose stop
- サービス停止
StateはExitに変更
Name Command State Ports
----------------------------------------------------------------------
dockerq-ccom_app_1 docker-php-entrypoint sh - ... Exit 137
dockerq-ccom_db_1 docker-entrypoint.sh mysqld Exit 0
docker compose rm
停止しているコンテナを削除する。
Name Command State Ports
------------------------------
Volumeは削除されないNetworkは削除されない
docker compose down
stop+rm+Network削除Volumeは削除しない
docker compose down -v
stop+rm+Network削除 +Volume削除
docker compose down –rmi all -v/docker compose down –rmi local -v
- イメージも削除
Container、Network、Volume、Imageを削除
--rmi
Remove images. Type must be one of: ‘all’: Remove all images used by any service. ‘local’: Remove only images that don’t have a custom tag set by the
imagefield.
-v
Remove named volumes declared in the
volumessection of the Compose file and anonymous volumes attached to containers.
docker compose run
サービスに対して1回コマンドを実行します。たとえば、次のコマンドは web サービスを開始するためのコマンドで、サービス内で bash としてコマンドを実行します。
– https://docs.docker.jp/compose/reference/run.html
docker compose push
- image プロパティに指定したレジストリに Push する
- サービスを指定して Push することもできる
- depends_on プロパティを指定している場合はそのサービスのイメージも Push される
ref. docker compose push
Composeファイルリファレンス
commandプロパティ
デフォルトのコマンドを上書きします。
– https://docs.docker.jp/compose/compose-file.html#command
DockerfileにCMDが定義されていてもいなくてもCMDを無視してcommandが実行されます
docker compose.yml で command を書くと、docker compose up を実行したときに、その内容が実行されます。Dockerfile で指定した CMD はこのときは無視されます。 なので、docker run で特定のコマンドを実行したいときは Dockerfile の CMD に書けばいいし、docker compose up でコマンドを実行したいときは docker compose.yml に記述すればいいと思います。
– https://ja.stackoverflow.com/questions/30495/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AFdocker compose-yml%E3%81%A8dockerfile%E3%81%AE%E3%81%A9%E3%81%A1%E3%82%89%E3%81%A7%E5%AE%9A%E7%BE%A9%E3%81%99%E3%82%8B%E3%81%BB%E3%81%86%E3%81%8C%E3%81%84%E3%81%84
ARG命令/.envファイル
ref. https://docs.docker.jp/compose/env-file.html
# docker compose.yml
# ...
# ...
ARG MY_ENV1
ARG MY_ENV2
# ...
# ...
# .env
MY_ENV1=foo
MY_ENV2=bar
docker-entrypoint-initdb.d
- MySQL公式イメージ初期化スクリプト用ディレクトリ
/docker-entrypoint-initdb.dに配置したスクリプトは自動で実行される
ref. https://qiita.com/moaikids/items/f7c0db2c98425094ef10
docker compose exec
docker compose exec /bin/sh
docker compose ls で表示されるのは プロジェクト 一覧。 docker compose exec はサービスを指定します。
サービスの確認方法は docker compose 設定ファイル(例 docker compose.yml, compose.yml )をみるか docker compose config --services で確認できます。