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を削除--rmiRemove 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.
-vRemove named volumes declared in the
volumessection 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に配置したスクリプトは自動で実行される