- 実際にサービスを動かす場合には、一つのコンテナでは足りない場合がある
- Webアプリ + データベース、など
- 複数のコンテナを連携させるには、Docker Composeを使うのが簡単で一般的
Docker Composeとは
- Docker社の提供する、複数のコンテナを使う Docker アプリケーションを定義・実行するためのツール
- compose.yaml という設定ファイルに、各コンテナをどのように立ち上げ、どのように連携するか記述する
-
docker compose upコマンドで設定ファイルで記述したとおりにコンテナが立ち上がり連携される
Docker Composeのメリット
- 複数コンテナを立ち上げるのが簡単。コマンド一つで立ち上がる
- データベースと連携したWebアプリの例を考えると、
Composeを使わない場合
- Docker ネットワークを作成する(
docker network create) - Webアプリと DB のコンテナをそれぞれ作成したネットワーク内で起動する(
docker run —network …)
Composeを使う場合
- compose.yaml を作成する
- 立ち上げる(
docker compose up)
- 実際には、コンテナへの環境変数の設定や、Docker ボリューム機能を利用したデータの永続化などによって、コマンドはこれよりもっと長く多くなる。そして、環境を立ち上げる度にそれを打たされることになる
- Docker Composeであれば、それらの設定はすべて compose.yaml に記述できるため、コマンドは変わらず
docker compose up1つで済む
compose.yaml
services:
app:
build:
context: ./
dockerfile: Dockerfile.dev
volumes:
- ./Tool:/usr/src/app
- /usr/src/app/node_modules
command: sh -c "npm start"
ports:
- 3000:3000
tty: true
stdin_open: true
environment:
- CHOKIDAR_USEPOLLING=true
networks:
default:
ipam:
config:
- subnet: 192.168.210.0/24 services
- 起動するコンテナをサービスとして定義する
- 上記の compose.yamlでは、
appというサービスを定義している
- 上記の compose.yamlでは、
- 各サービスについて設定を記述していく
- 利用するイメージや Dockerfile、コンテナに設定する環境変数など
-
docker container runコマンドやdocker image buildコマンドの引数・オプションを指定していくイメージが近い
networks
- Docker ネットワークを定義する
- なくてもいい。ない場合はデフォルトネットワークが作成され、定義した各サービスがそのネットワーク内に作成される
-
networks: default:でデフォルトネットワークの設定を変更できる
-
- その他にも指定できる項目がいくつかあるが、今回は省略
⚠️
compose fileの最新仕様については現在、The Compose Specificationに記述されている。
その中で、以下のように述べられている。
その中で、以下のように述べられている。
The Compose file is a YAML file defining:
〜略〜
The default path for a Compose file iscompose.yaml(preferred) orcompose.ymlthat is placed in the working directory. Compose also supportsdocker-compose.yamlanddocker-compose.ymlfor backwards compatibility of earlier versions. If both files exist, Compose prefers the canonicalcompose.yaml.
- 古いプロジェクトだと設定ファイル名が docker-compose.yml となっていることがあるが、今は compose.yaml を使うのが良さそう
- 古いものだとversionという項目があることがあるが、versionの記述は Optional になっているので必ずしも記述する必要はない
コマンドの説明
| Command | 説明 |
| docker compose up | サービス用のコンテナの構築、作成、起動、アタッチを行う |
| docker compose down | コンテナを停止し、 upで作成したコンテナ・ネットワーク・ボリューム・イメージを削除する。デフォルトではコンテナとネットワークのみ削除する。 |
| docker compose build | compose.yamlから一連のコンテナを構築する |
| docker compose start | コンテナを起動してサービスを開始する |
- docker compose upは
docker compose build・docke compose startをまとめたもの- デフォルトでは再ビルドしないなど挙動が少しだけ違うので注意
- リファレンス ⚠️compose v1では、
docker-composeコマンドが使われていたが、現在は非推奨
https://www.docker.com/blog/announcing-compose-v2-general-availability/#proposed-compose-v1-end-of-lie-timeline
v1 のコマンドは、2024年に GitHub Actions でも使えなくなったため注意
https://engineering.nifty.co.jp/blog/26217