こんにちは。ドイです。
前回はイメージを作成するためのDocker fileについて学びました。
今回は、Compose fileについて触れていきたいと思います。
↓前回の記事
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に何が書かれているのか学んでいきました。
今回は、「環境変数」や「ポート番号」といった用語の説明を簡略化してしまいましたので、
次回は、これら「なんとなくわかるけど、説明しようとすると難しい」用語について学んでいきたいと思います。