【第三回】はじめてのDocker - Compose fileについて

こんにちは。ドイです。
前回はイメージを作成するためのDocker fileについて学びました。
今回は、Compose fileについて触れていきたいと思います。

↓前回の記事

tech.arms-soft.co.jp

YAMLファイル

「Compose file」よりも「Docker-compose.yml」の方が耳慣れているかもしれません。
今回学ぶCompose fileはイメージからコンテナを立ち上げるための設定ファイルです。

拡張子を見ると分かりますが「YAML」というルールに従い書かれています。
読み方のポイントは二つ。
「シーケンス」と「マッピング」です。

①シーケンス(配列)

YAMLファイルでは、配列を以下のように表すことができます。

 food:
       - apple
       - banana
       - cherry

「-(ハイフン)」が配列を表します。半角スペースを開けて記述することにより、以下と同じ意味合いの記述ができるのです。

food: [apple, banana, cherry]

②マッピング

YAMLファイルでは、keyとvalueを関連づけて以下のように記述できます。

food:
  like: cookie
  dislike: Koya-tofu

半角スペースを頭に入れ、インデントすることによりネスト構造を表すことができます。

Compose fileを学ぶにあたり、この二つのポイントを知っていれば、
「何が書かれているのか」を知らなくても、当たりをつけて何となく理解ができそうです。

Compose file

Dockerの公式から、Compose fileのサンプルコードが紹介されています。

version: '3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:

何が書いてあるのか、上から見ていきましょう。

version

Docker Compose のバージョン情報を表示しています。
また知らない単語が出てきましたね。 「Docker Compose」です。
こちらは、複数のコンテナを実行するためのDockerの機能と理解すればいいと思います。

services

起動するコンテナをどう立ち上げるのか、何を立ち上げるのかという定義を書いていきます。
上記は「db」と「wordpress」の設定を書いていることがわかります。

image

こちらが前回触れた、Docker イメージですね。
上記では、「db」では「mysql:5.7」を 「wordpress」では「wordpress:latest」というイメージ(latestは「最新」ですね)を指定していることがわかります。

volumes

ボリュームとは、Docker コンテナにおいて生成され利用されるデータを、永続的に保持する目的で利用される仕組みです。 公式ドキュメントより

うーん、少し難しい。なるほど!とは残念ながらなりませんでした。
さらにこちら「Docker におけるデータ管理」を読むと、少し理解が深まるかもしれません。

コンテナが存在しなくなると、データを保持しておくことができなくなります。 (中略)
Docker コンテナにおけるファイルをホストマシン上に保存する方法は 2 つあります。 これを行えば、コンテナが停止した後にもデータを維持していくことができます。

少しだけ分かった気がします。
Docker上で実行している、例えば上記だとdatabaseは「mysql:5.7」のイメージを指定しています。
でもこちら、コンテナを破棄するとデータは消えてしまいます。
volumesでパスを指定することにより、データをコンテナ外に保存することができるようです。

volumes:
       - db_data:/var/lib/mysql

上記だと、Docker上の「/var/lib/mysql」を、
docker-compose.ymlと同階層にあるdb_dataに保存されるように指定していますね。

restart

ホストOSを起動した時、あるいは何らかの理由でホストOSが落ちてしまった時の設定を記述します。
(ホストOSとは、Dockerを動かしているマシンのことを指します)

上記では「always」を指定していますね。

restart: always

指定しない限りは再起動される設定となっています。

environment

環境変数を設定します。

ports

ポート番号の設定をします。

ports:
       - "8000:80"

ホストの8000番ポートと通信すると、コンテナ内の80番と通信できるよう紐付けがされているのです。

depends_on

起動する依存関係を設定します。

depends_on:
       - db

db→ wordpressの順で起動するよう記述しています。

まとめ

Dockerの公式ドキュメントを元に、Compose fileに何が書かれているのか学んでいきました。
今回は、「環境変数」や「ポート番号」といった用語の説明を簡略化してしまいましたので、
次回は、これら「なんとなくわかるけど、説明しようとすると難しい」用語について学んでいきたいと思います。