docker-compose.yml
の概要。
ref. https://docs.docker.jp/compose/compose-file.html
version: '3.7'
services:
mysql:
# ....
app:
# ....
mysql
やapp
をDocker Compose
ではサービスと呼ぶ。
サービス
一覧を表示する$ 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
ref. Compose file build reference
サービスの Dockerfile やビルドディレクトリの内容を変更する場合は、docker compose build を実行して再ビルドします。
Dockerfile
を変更したときに実行docker compose build {{service}}
で指定したサービスだけをbuild
可能3パターンあり挙動が異なります。
コンテナの実行時、元になるイメージを指定します。リポジトリ名/タグ、あるいはイメージ 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
プロパティに指定したイメージがローカルに存在する場合はそのイメージを使用するversion: '3'
services:
some:
image: some:1.0.0
# ...
other:
# ...
version: '3'
services:
some:
build:
context: .
dockerfile: Dockerfile
# ...
other:
# ...
イメージ
を作成するイメージ
の命名規則は以下のとおり^build_propertyディレクトリ名_サービス名
(アンダースコアが使われる)^build_propertyversion: '3'
services:
some:
image: some:1.0.0
build:
context: .
dockerfile: Dockerfile
# ...
other:
# ...
イメージ
を作成するref. https://docs.docker.jp/compose/compose-file/compose-file-v3.html#build
State
はUp
に変更するサービス用のコンテナの構築、作成、起動、アタッチを行います。
コンテナの作成後にサービス設定やイメージが変更された場合は、 docker compose up の実行によって対象コンテナの停止と再作成が行われます(マウントしているボリュームは保持します)。
-- https://docs.docker.jp/engine/reference/commandline/compose_up.html#docker-compose-up)
デタッチド・モード: バックグラウンドでコンテナを実行し、新しいコンテナ名を表示 --abort-on-container-exit と同時に使えない
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
停止しているコンテナを削除する。
Name Command State Ports
------------------------------
Volume
は削除されないNetwork
は削除されないstop
+ rm
+ Network
削除Volume
は削除しないstop
+ rm
+ Network
削除 + Volume
削除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
image
field.
-v
Remove named volumes declared in the
volumes
section of the Compose file and anonymous volumes attached to containers.
サービスに対して1回コマンドを実行します。たとえば、次のコマンドは web サービスを開始するためのコマンドで、サービス内で bash としてコマンドを実行します。
ref. docker compose push
デフォルトのコマンドを上書きします。
DockerfileにCMD
が定義されていてもいなくてもCMD
を無視してcommand
が実行されます
docker-compose.yml で command を書くと、docker compose up を実行したときに、その内容が実行されます。Dockerfile で指定した CMD はこのときは無視されます。 なので、docker run で特定のコマンドを実行したいときは Dockerfile の CMD に書けばいいし、docker compose up でコマンドを実行したいときは docker-compose.yml に記述すればいいと思います。
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
に配置したスクリプトは自動で実行される