はじめに
docker-compose.yml
は一見意味がわからないですが、一つ一つ調べると理解できたので説明していきます。
docker-compose.yml
version: '3'
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
volumes:
- .:/API_sample
command: bundle exec rails s -p 3000 -b '0.0.0.0'
db:
image: mysql:5.7
volumes:
- mysql_data:/var/lib/mysql/
environment:
MYSQL_ROOT_PASSWORD: password
ports:
- "3306:3306"
volumes:
mysql_data:
version
docker-composeのバージョンを指定します。
現時点では、version3が最新版のようです。
リファレンスはこちら
services
アプリケーションを動かすための要素です。
ネストされたweb
とdb
は各要素で、自分で好きな名前をつけることができます。
build
docker-compose build
のときにビルドするためのDockerfileのパスを指定しています。
ここでは、Dockerfileもdocker-compose.ymlもプロジェクト直下にあるのでこのような書き方をしています。
ports
各serviceのポート番号を指定しています。
ホストOS(local)のポート番号:dockerコンテナ内のポート番号
という書き方ができます。
ここでは、railsのポート番号が3000
なので、3000:3000
という書き方をしています。
1台のPCでDockerを使った複数のプロジェクトを扱うときに、ポート番号が重複するのを防ぐことができます。
たとえば3001:3001
という書き方をすると、localhost:3001
でサーバーに接続できます。
depends_on
コンテナの依存関係を設定します。
今回はdb
に依存関係があることを明記しています。
こうすることで、docker-compose up
のときにDBを先に起動してくれます。
volumes
dockerの中でデータを永続化する設定です。
この設定をすることで、コンテナ内のデータは消えずに残ってくれます。
上記の例だと、web
では相対パスのすべてのソース(API_sample)をコンテナのAPI_sampleにマウントしています。
そして、db
ではdbコンテナ内の/var/lib/mysqlをmysql_dataという名前でマウントしています。
このmysql_dataは最後の2行でvolumesとして設定されています。
volumeは下記コマンドで一覧を見ることができます。
$ docker volume ls
command
docker-compose up
で実行されるコマンドです。
upと同時に、bundle exec rails s -p 3000 -b '0.0.0.0'
が実行されてサーバーに接続できるようになります。
image
コンテナ作成に必要なイメージを指定しています。
ここでは、dbのコンテナ作成に、mysql5.7を使用すると設定しています。
environment
環境変数を設定します。
database.ymlに書かれているパスワードを環境変数として設定し、mysqlに接続できるようにします。