top_logo

docker-composeを用いてRails APIモードの環境構築②

2022年 04月 01日

前回の続きからになります

docker-compose.yml の記述

次にdocker-compose.ymlを書いていきます。


docker-compose.ymldocker runに指定するオプションを複数のコンテナに渡って記載することができ、それらのコンテナをdocker-compose up -dというコマンドで一度に立ち上げることができます。


backend/docker-compose.yml
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 を作成します。


ビルドコンテキストのディレクトリの中にあるファイルやフォルダを DockerfileADDCOPYでコンテナ内に持っていくことができます。


そしてdockerfileにはdocker-compose.ymlから見たDockerfileの場所を記述します。

Rails フォルダの同期

以下の部分で、ホスト側の Rails ファイルとコンテナ内の Rails ファイルを同期しています


volumes:
  - './api/:/api/'
db の起動を待つ

以下の記述で Rails コンテナは db コンテナが起動してから起動するようになります。

depends_on:
  - db

長くなってしまうので一旦ここまでにします。


わかりにくい点、間違っている点などあれば以下にご連絡いただければと思います。


連絡先

何か連絡をしたい際は以下 SNS、メールでお願いいたします。

Twitter:  https://twitter.com/naka_ryo_z

Github:  https://github.com/ryotaro-tenya0727

メール:   ryotaro123110@gmail.com

見出しへのリンク

© 2024, written by Nakayama

Powered by Gatsby