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: envValue2networksでネットワークの設定を記述する
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についても本当に基礎的な部分にしか触れていません。
それぞれ様々なオプションがあるので、必要に応じて調べてみてください。
ここまで読んでいただき、ありがとうございました。
それでは、また。