docker-compose.ymlの中身について解説

DockerでのMySQLコンテナ作成時に初期ダンプファイルもDBへ入れてしまう方法について知りたいと思い、以下解説記事について読んでいた。

この中で、docker-compose.ymlを触っている。docker-compose.ymlはよく見かける設定ファイルだが、じっくり読む機会が少なかった。なので、上記記事で紹介されているdocker-compose.ymlの中身についてこの投稿で説明してみる。

なお、docker-compose.ymlの中身は以下の通り。

db:
  image: mysql:latest
  volumes:
    - ./initdb.d:/docker-entrypoint-initdb.d
  environment:
    - MYSQL_ROOT_PASSWORD=root

image

DBコンテナ作成時に利用するイメージを指定する。イメージとは、コンテナの土台である。指定したイメージをもとに、コンテナの作成を行う。書式は、[リポジトリ]:[タグ]となる。タグは、リポジトリのバージョンを表す。利用可能なタグは公式ページに載っている。MySQLの場合、以下に利用可能なタグが掲載されている。

volumes

どのローカルのディレクトリをコンテナ中のどの階層に乗せるかについて指定する。./initdb.d:/docker-entrypoint-initdb.dという書き方の場合、docker-compose.ymlと同じ階層にあるinitdb.d配下をコンテナ中の/docker-entrypoint-initdb.dの中にマウントする。/docker-entrypoint-initdb.dは、.sql.sh.sql.gzという拡張子でファイルを配置しておくと、MySQLイメージからコンテナを生成・起動する時に、それらのファイルを読み込み実行してくれるディレクトリ。つまり、ローカルの./initdb.dにダンプファイルなどを置いておくことで、コンテナ作成時にダンプファイルのインポートも行ってくれる。

なお、volumeの定義は以下の通り。

Volumes are the preferred mechanism for persisting data generated by and used by Docker containers.

https://docs.docker.com/storage/volumes/#mount-a-host-file-as-a-data-volume

一般的な表現で書かれていてイメージが湧きにくいが、ローカルや他のコンテナなどと独立した、Dockerで持つファイルシステムとざっくり解釈している。外部HHDのようなもの?詳細は以下を参照。

environment

環境変数を指定する。環境変数は、他のプログラムから参照可能なコンピュータが持つ値である。MYSQL_ROOT_PASSWORD=rootという書き方の場合、コンテナ内のMySQLでのrootユーザのパスワードをrootにする。


いいなと思ったら応援しよう!