docker-composeを用いてRails APIモードの環境構築②
前回の続きからになります
次にdocker-compose.yml
を書いていきます。
docker-compose.yml
はdocker run
に指定するオプションを複数のコンテナに渡って記載することができ、それらのコンテナをdocker-compose up -d
というコマンドで一度に立ち上げることができます。
version: '3'
# 名前つきボリューム
volumes:
mysql_data:
services:
api:
build:
context: ./api/
dockerfile: Dockerfile
volumes:
- './api/:/api/'
ports:
- '3000:3000'
tty: true
stdin_open: true
depends_on:
- db
links:
- db:database
db:
image: mysql:5.7
volumes:
- 'mysql_data:/var/lib/mysql'
environment:
MYSQL_ROOT_PASSWORD: password
ports:
- '3306:3306'
いくつかポイントになるところを解説していきます。
まずはデータボリュームの記述です。
volumes:
mysql_data:
.
.
.
db:
image: mysql:5.7
volumes:
- 'mysql_data:/var/lib/mysql'
上に書いたvolumes:
でdocker
の管理下にmysql_data
というデータボリュームを作成しています
以下のコマンドで確認できます。
$ docker volume ls
そして下に書いた、 - 'mysql_data:/var/lib/mysql'
の部分で、docker
の管理下のmysql_data
というボリュームと、コンテナ内の/var/lib/mysql
というディレクトリが同期されています。
/var/lib/mysql
にはデーターベースの情報が入っているので、コンテナを削除してもデータを永続化することができています。
次にビルドコンテキストです。
以下のcontext
に指定したディレクトリがビルドコンテキストと呼ばれるディレクトリになります。
build:
context: ./api/
dockerfile: Dockerfile
build context
はビルドするときの環境や状況を表します。
Docker デーモンはbuild context
の中のファイルと Dockerfile
を使って DockerImage を作成します。
ビルドコンテキストのディレクトリの中にあるファイルやフォルダを Dockerfile
のADD
やCOPY
でコンテナ内に持っていくことができます。
そしてdockerfile
にはdocker-compose.yml
から見たDockerfile
の場所を記述します。
以下の部分で、ホスト側の Rails ファイルとコンテナ内の Rails ファイルを同期しています
volumes:
- './api/:/api/'
以下の記述で Rails コンテナは db コンテナが起動してから起動するようになります。
depends_on:
- db
長くなってしまうので一旦ここまでにします。
わかりにくい点、間違っている点などあれば以下にご連絡いただければと思います。
何か連絡をしたい際は以下 SNS、メールでお願いいたします。
Twitter: https://twitter.com/naka_ryo_z
見出しへのリンク