- ここまで一つのコンテナを動かす方法を学んできました
- 実際にサービスを動かす場合には、一つのコンテナでは足りない場合があります(Webアプリ + データベース、など)
- 複数のコンテナを連携させるには、docker composeを使うのが簡単で一般的です
ここでは、Docker Composeを使って、データベースと連携したWebアプリを立ち上げてみましょう
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 up
1つで済む。
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
-
起動するコンテナをサービスとして定義する
-
↑ なら
app
というサービス
-
↑ なら
-
各サービスについて設定を記述していく
- 利用するイメージや Dockerfile、コンテナに設定する環境変数など
-
docker container run
コマンドやdocker image build
コマンドの引数・オプションを指定していくイメージが近い
networks
- Docker ネットワークを定義する
-
なくてもいい。ない場合はデフォルトネットワークが作成され、定義した各サービスがそのネットワーク内に作成される
- networks: default: でデフォルトネットワークの設定を変更できる
その他にも指定できる項目がいくつかある。今回は省略。
その中で、以下のように述べられている。
The Compose file is a YAML file defining:
〜略〜
The default path for a Compose file iscompose.yaml
(preferred) orcompose.yml
that is placed in the working directory. Compose also supportsdocker-compose.yaml
anddocker-compose.yml
for 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
をまとめたもの- デフォルトでは再ビルドしないなど挙動が少しだけ違うので注意
docker-compose
コマンドが使われていたが、現在は非推奨。
https://www.docker.com/blog/announcing-compose-v2-general-availability/#proposed-compose-v1-end-of-lie-timeline
先日 GitHub Actions でも v1 のコマンドは使えなくなったため注意。
https://engineering.nifty.co.jp/blog/26217