今回は、docker-compose.yamlの書き方を深堀します。
- ■はじめに
- ■docker-composeの公式サイト
- ■docker-compose.yaml or docker-compose.yml ?
- ■docker-compose.yamlの体裁について
■はじめに
docker-compose.yamlは既に過去の記事で取り上げているので今更感はありますが、
備忘も兼ね、まとめています。
■docker-composeの公式サイト
Overview of Docker Compose | Docker Documentation
■docker-compose.yaml or docker-compose.yml ?
ファイル名はどちらでも大丈夫です。
公式サイトでは.ymlを使っていますね。
ちなみに、「Composeファイル」と呼ばれます。
■docker-compose.yamlの体裁について
以下のサンプルコードを用いて解説致します。
version: "3.8" services: mysqldb: container_name: mysqldb # コンテナ名を指定 image: mysql:5.7 networks: - wpnet volumes: - db_volume:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: P@ssw0rd MYSQL_DATABASE: wpdb MYSQL_USER: wpuser MYSQL_PASSWORD: P@ssw0rd wp: container_name: wp # コンテナ名を指定 depends_on: - mysqldb image: wordpress networks: - wpnet ports: - 8888:80 restart: always environment: WORDPRESS_DB_HOST: mysqldb WORDPRESS_DB_NAME: wpdb WORDPRESS_DB_USER: wpuser WORDPRESS_DB_PASSWORD: P@ssw0rd networks: wpnet: name: wpnet # ネットワーク名 volumes: db_volume: name: db_volume # ボリューム名を指定
■version
composeファイルのバージョンです。
Compose file | Docker Documentation
2021年6月では、3.8が最新版です。
version指定は必須です。
また、第三者が見た際にどのバージョンの書式で書かれたcomposeファイルなのかが一目でわかるので、小数点以下第一位まで記載するようにするのが良いです。
■services、networks、volumes(概要)
詳細は後述致します。また、少し行数が飛びますが、
3行目:serivces
34行目:networks
38行目:volumes
について先に記載致します。
これらは、Composeファイルのサービス設定、ネットワーク設定、ボリューム設定と呼ばれ、それぞれが一つの大枠になっています。
そのため、Composeファイルは3つの要素で成立します。
サービス設定の中の設定項目(キー)が一番多いです。
■services
サービス設定です。
一段落目に作成したいサービス名(4行目、18行目。プログラム言語でいうところの関数名に相当)を記載致します。
サービス名はこれから作成するコンテナの総称です。
混乱しがちなのは、コンテナ名は別の設定項目(container_name)で定義します。
4行目~17行目が一つの括りです。ここでは、mysqlコンテナの設定を記載しています。
18行目~32行目が一つの括りです。ここでは、Wordpress コンテナの設定を記載しています。
■mysqlコンテナの設定項目(5行目~16行目)
container_nameはコンテナ名です。docker runコマンドの--nameオプションと同じです。
imageはコンテナイメージです。mysqlイメージやwordpressイメージを指定します。
networksは、サービスの中のネットワーク設定です。
※グローバルのネットワーク設定は34行目のことです。
サービスの中のネットワーク設定では、グローバルのネットワーク設定を利用する旨を定義しています。
volumesは、サービスの中のボリューム設定です。
※グローバルのボリューム設定は38行目のことです。
サービスの中のボリューム設定では、グローバルのボリューム設定を利用する旨を定義しています。
ここでは、db_volumeと/var/lib/mysqlをボリュームマウントしています。
restartは、以下の項目が設定できます。
それぞれはdocker runコマンドのrestartオプションと同等です。
restartオプションはこちら。
no
on-failure
always・・・コンテナの終了コードに関わらず、常にコンテナの起動を試みます。
unless-stopped
environmentは、環境変数のことです。
docker runコマンドの-eオプションと同じです。
■WordPressコンテナの設定項目(18行目~32行目)
portsは、公開用のポートを指定します。コロン区切りです。
A:Bの場合、
AはDockerホスト側のポート。Bはコンテナ側のポートです。
※ポート転送と思ってもらえればと。
尚、たまにコロンなしの数値だけの場合があります。
その場合はコンテナ側のポートを表しています。
(ホスト側はランダムなポートが割り当てられます。)
■networks(34行目~36行目)
グローバルのネットワーク設定です。
ここで指定した35行目の記載が、8行目や24行目に使われます。
※プログラミング言語の関数の参照みたいな感じです。
name でネットワーク名を指定しています。
docker network create と同じです。
■volumes(38行目~40行目)
グローバルのボリューム設定です。
ここで指定した39行目の記載が、10行目に使われます。
※プログラミング言語の関数の参照みたいな感じです。
name でボリューム名を指定しています。
docker volume create と同じです。
以上です。