1
0

ここまで紹介してきた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の基本的な書き方

docker-composeのサンプル
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について説明していきたいと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0