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: Dockerfilebuild 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
見出しへのリンク