version: "3.9"
services:
  db:
    image: postgres
    volumes:
      - ./data/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
Dockerコンテナの元になるベースイメージを指定するときに使います。
イメージの名前またはイメージIDを指定します。
imageを指定するのではなく、Dockerfileからビルドしてベースイメージにする場合はbuildを指定します。
buildにはDockerfileのファイルパスを指定します。
このときのカレントディレクトリはdocker-compose.ymlが格納されているパスになります。
ピリオドを指定するとカレントディレクトリを指します。
services:
  web:
   build: . #ピリオドでカレントディレクトリを指す。
複数のサービスの依存関係を定義するときはdepends_onを使用します。
自分よりも先に開始したいコンテナがある場合は以下のように記述します。
※先に開始するだけであって起動が終わるまで待つわけではない点に注意が必要です。
depends_on:
  - db
docker-composeコマンドはymlファイルが格納されているディレクトリ内でのみ実行できます。
一度作成した後も再びこのコマンドで起動できます。
docker-compose up
docker-compose ps
dir1で起動したあとにdir2でdocker compose up -dすると以下のようなエラーになり起動することができません。
PS C:\workspace\app2> docker-compose up -d
[+] Building 0.0s (0/0)                                                                                  docker:default
[+] Running 1/2
 ✔ Network app2_default   Created                                                                                  0.2s
 - Container app-node-js  Creating                                                                                 0.1s
Error response from daemon: Conflict. The container name "/app-node-js" is already in use by container "382f7b869f3f609dfddb39d99194605dfa0a925823eada114a7f122736c51dec". You have to remove (or rename) that container to be able to reuse that name.
PS C:\workspace\app2>
# 複数コンテナまとめて起動したい場合は以下のように記述する。
docker-compose start
# 特定のサーバのみ起動したい場合は以下のように記述する。
#(ymlファイルのservicesで定義しているサービス名を指定する。
# or
# docker-compose psの結果に出てくるSERVICE欄の名称を記載する。)
docker-compose start サービス名
複数のコンテナを一括して停止することができます。
# 複数コンテナまとめて停止したい場合は以下のように記述する。
docker-compose stop
# 特定のサーバのみ停止したい場合は以下のように記述する。
#(ymlファイルのservicesで定義しているサービス名を指定する。
# or
# docker-compose psの結果に出てくるSERVICE欄の名称を記載する。)
docker-compose stop サービス名
削除するには次のコマンドを実行します。
docker-compose down
docker-compose up -dで立ち上げたコンテナ内に入るには以下のコマンドを実行します。
サービス名はdocker-compose psで確認できます。
docker-compose exec -it サービス名 bash
コンテナから抜ける際にはexitコマンドを実行します。