docker-composeとは
- 「docker-compose.yml」というファイルにコンテナの構成情報を定義することで、同一のホスト上の複数のコンテナを一括管理できます。
- docker-composeコマンドを実行すると複数のコンテナをまとめて起動したり停止したりできます。
yaml形式
YAMLは、構造化されたデータを表現するためのデータフォーマットです。
YAMLは、Pythonのようにインデントでデータの階層構造を表します。
インデントはタブではなく、半角スペースを使います。
YAMLでは、データの先頭に「-」を付けることで配列を表します。
「-」の後ろには半角スペースを必ず設けます。
書き方(Djangoプロジェクトのサンプル)
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
image
Dockerコンテナの元になるベースイメージを指定するときに使います。
イメージの名前またはイメージIDを指定します。
上記の例ではwebserver
というイメージのベースイメージとしてubuntu
を指定しています。
build
imageを指定するのではなく、Dockerfileからビルドしてベースイメージにする場合はbuild
を指定します。
build
にはDockerfileのファイルパスを指定します。
このときのカレントディレクトリはdocker-compose.yml
が格納されているパスになります。
ピリオドを指定するとカレントディレクトリを指します。
services:
web:
build: . #ピリオドでカレントディレクトリを指す。
depends_on:
複数のサービスの依存関係を定義するときはdepends_on
を使用します。
自分よりも先に開始したいコンテナがある場合は以下のように記述します。
※先に開始するだけであって起動が終わるまで待つわけではない点に注意が必要です。
depends_on:
- db
コマンド
docker-composeの作成/起動
docker-compose
コマンドはyml
ファイルが格納されているディレクトリ内でのみ実行できます。
一度作成した後も再びこのコマンドで起動できます。
docker-compose up
コンテナの確認
docker-compose ps
docker-composeの起動
# 複数コンテナまとめて起動したい場合は以下のように記述する。
docker-compose start
# 特定のサーバのみ起動したい場合は以下のように記述する。
#(ymlファイルのservicesで定義しているサービス名を指定する。
# or
# docker-compose psの結果に出てくるSERVICE欄の名称を記載する。)
docker-compose start サービス名
docker-composeの停止
複数のコンテナを一括して停止することができます。
# 複数コンテナまとめて停止したい場合は以下のように記述する。
docker-compose stop
# 特定のサーバのみ停止したい場合は以下のように記述する。
#(ymlファイルのservicesで定義しているサービス名を指定する。
# or
# docker-compose psの結果に出てくるSERVICE欄の名称を記載する。)
docker-compose stop サービス名
docker-composeの削除
削除するには次のコマンドを実行します。
docker-compose down