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に配置したスクリプトは自動で実行される