Docker Composeで簡単なコンテナの作成や起動までを前回行いました。
ただ、Docker Composeファイルのcompose.yaml
に関しては中身の詳細は触れていませんでした。
今回は、具体的な記述方法についてまとめていきたいと思います。
YAMLファイルの記法
Docker ComposeファイルはYAML記法で記述します。
まずはYAML記法について理解する必要があります。
基本的な記述方法は以下のとおりです。
基本構造:
YAMLは階層的なデータ構造をインデントを使用して表現します。通常、スペース2つまたは4つをインデントに用います。
キーと値:
キーと値はコロン(:)で区切ります。コロンの後にはスペースを一つ入れます。
key: value
コメント:
#
を使用して行のどこかにコメントを追加できます。
# これはコメントです
key: value # ここにもコメントを追加できます
リスト:
リスト項目はハイフン(-)を使って表現します。各項目は新しい行に置き、同じインデントレベルで始めます。
yaml items:
- item1
- item2
- item3
辞書(マップ):
キーと値のペアを使って表現します。値が辞書の場合、さらにインデントを深くして表現します。
person:
name: John Doe
age: 30
複数行の文字列:
|
や >
を使って複数行にわたる文字列を記述できます。|
は改行を保持、>
は改行をスペースに変換します。
description: |
This is a description
that spans multiple lines.
複数のドキュメント:
---
を使用して一つのファイル内に複数のYAMLドキュメントを記述できます。
---
doc1: value1
---
doc2: value2
データ型:
YAMLは文字列、数値、真偽値(true/false)など、さまざまなデータ型をサポートします。文字列は通常、クォートなしで記述できますが、特殊文字を含む場合はシングルクォート(’)またはダブルクォート(”)を使用します。
integer: 123
floating_point: 123.45
boolean: true
string: "Hello, world!"
Docker Composeファイルの主な項目
Docker Composeで利用するキーや階層構造の主な記述方法についてまとめていきます。
Docker Composeで利用するcompose.yaml
ファイル内では、最上位で操作対象の指定をします。
これはコマンドで言うところの、docker
の後に指定するcontainer
やnetwork
などの部分に近いイメージです。
ここにはコンテナを示すservices
、ネットワークを示すnetworks
、データボリュームを示すvolumes
などが記述されます。
その後に、1つインデントを下げてリソースの名前を記述します。例えば、services:
の下に1つインデントを下げてcontainer01
と記述すると、container01という名前のコンテナを設定していることになります。
リソースの名前の後にさらに1つインデントを下げて、そのリソースに対する設定を記述してきます。例えば、コンテナに対する設定であれば、image:
でコンテナイメージの指定やports:
でポート番号の設定などを行います。
servicesでコンテナの設定を記述する
services
内ではコンテナの設定を記述していきます。
基本的な書き方と主な項目は以下の通りです。
services:
containerName: #コンテナ名
image: imageName #コンテナイメージ
ports: #ポート番号
- "XX:XX"
networks: #接続するネットワーク
- networkName
volumes: #接続するボリューム
- volumesName
environment: #環境変数の設定
ENV_KEY1: envValue1
ENV_KEY2: envValue2
networksでネットワークの設定を記述する
networks
でネットワークの設定を記述していきます。
基本的な書き方と主な項目は以下の通りです。
networks:
networkName: #ネットワーク名
driver: driverName #ドライバーの指定
ipam: #IPアドレス管理の設定
driver: default
config:
- subnet: "xxx.xx.xxx.x/xx"
gateway: "xxx.xx.xxx.x"
volumesでボリュームの設定を記述する
volumes
でボリュームの設定を記述していきます。
基本的な書き方と主な項目は以下の通りです。
volumes:
volumeName: #ボリュームの名前
driver: local #ドライバーの指定
external: #外部で作成されたボリュームを利用する場合の設定
name: externalVolumeName 外部ボリューム名
ファイル先頭にDocker Composeのバージョンを指定
ファイルの先頭にversion
を指定することでDocker Composeのバージョンを指定することができます。
バージョンによってサポートされる機能が異なるため、バージョンを指定する方が望ましいでしょう。
version: 'x.x'
記述例
実際の記述例を以下に示します。
こちらの例では、webとdbの2つのコンテナとコンテナを繋ぐwebnetというネットワーク、dbコンテナのデータボリュームであるdb-dataについての設定が記述されています。
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
networks:
- webnet
db:
image: postgres:latest
environment:
POSTGRES_DB: example
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes:
- db-data:/var/lib/postgresql/data
networks:
- webnet
networks:
webnet:
volumes:
db-data:
まとめ
Docker Composeの設定ファイルとなるcompose.yamlについて簡単な記述方法をまとめてきました。
yaml形式のファイルはDockerコンテナ以外にも利用シーンがあると思うので、基本的な記述方法は覚えておきましょう。
また、compose.yamlについても本当に基礎的な部分にしか触れていません。
それぞれ様々なオプションがあるので、必要に応じて調べてみてください。
ここまで読んでいただき、ありがとうございました。
それでは、また。