ここまで紹介してきたdocker composeの基本的な部分のまとめです。
docker composeでよく使うコマンド
docker compose up -d # バックグラウンドでサービスを起動
docker compose up -d --build # ビルドから行う
docker compose up -d --scale <service_name>=<num> # スケール
docker compose down -v # ネットワークやボリュームを削除し、コンテナを停止
docker compose logs # サービスのログを確認
docker-compose.yamlの基本的な書き方
version: '3.8'
services:
db:
image: mysql:8.0
container_name: mysql
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_DATABASE=flask_app
networks:
- flask-net
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h localhost -u root -ppassword || exit 1"]
interval: 10s
timeout: 5s
retries: 5
web:
build: .
ports:
- "5000" # コンテナ側のみ指定
networks:
- flask-net
volumes:
- ./uploads:/app/uploads
depends_on:
db:
condition: service_healthy
environment:
- DATABASE_HOST=db
- DATABASE_USER=root
- DATABASE_PASSWORD=password
- DATABASE_NAME=flask_app
restart: unless-stopped
networks:
flask-net:
driver: bridge
volumes:
web-data:
driver: local
最上位レイヤーには、version
, services
, volumes
, networks
を書く。
services
サービス名とコンテナに関する設定を行う。ローカルのDockerfileからビルドする場合はbuild
フィールドにDockerfileのパスを記述する。既存のイメージから起動する場合はimage
にイメージ名を記述する。
そのほか、コンテナ起動時に必要な設定(ボリュームやネットワーク、ポートなど)を記述する。また、サービス間の依存関係も記述する。例では、DBが起動してからwebが起動する。
volumes
このセクションに記述する場合、名前付きボリュームになる。複数のコンテナで共有することができる。
networks
使用するネットワークを定義する。
まとめ
以上、docker composeの簡単な紹介でした。docker composeは、複数のコンテナを一つのyamlファイルで管理することができるので、起動順序など複雑なことを後から考える必要がなくなり、非常に便利なツールです。また、コンテナのスケールにも対応しています。しかし、docker composeでは単一のホストにしかコンテナをデプロイすることができないため、分散して配置することはできません。また、高度なセルフヒーリング機能なども備えておらず、簡単に扱える一方、できることは限定的です。
次回から、より高度にコンテナを管理することができるコンテナオーケストレーションツールである、Kubernetesについて説明していきたいと思います。