こんにちは、tsu-neraです。以前、Rails と MySQLでのDockerを使った開発環境構築について書きました。
今回は、その続編で Postgresqlと Redisの Dockerインスタンスを利用した方法について紹介します。
前提
- MacOS
- 既存プロジェクトが存在していて、そこに Docker を導入する
- Docker for Macがインストール済みであること
Dockerファイルの準備
以下のようなDokckerfileを準備
FROM ruby:2.5.1
RUN apt-get update -qq && apt-get install -y build-essential nodejs libpq-dev postgresql-client
RUN mkdir /app
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
RUN bundle install
COPY . /app
docker-compose.ymlを準備
web, db, redisの3つのコンテナを立ち上げる。docker-compose.ymlを用意。
version: '3'
services:
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/app
ports:
- 3000:3000
depends_on:
- db
- redis
tty: true
stdin_open: true
db:
image: postgres:10.4-alpine
volumes:
- postgres:/var/lib/postgresql/data
redis:
image: redis:latest
ports:
- 6379:6379
volumes:
- redis:/data
command: redis-server --appendonly yes
volumes:
postgres:
redis:
docker-composeの実行
Rails イメージのビルド。
$ docker-compose build
コンテナをデタッチモードで起動。
$ docker-compose up -d
psコマンドで起動を確認。
$ docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------------
myapp_db_1 docker-entrypoint.sh postgres Up 5432/tcp
myapp_redis_1 docker-entrypoint.sh redis ... Up 0.0.0.0:6379->6379/tcp
myapp_web_1 bundle exec rails s -p 300 ... Up 0.0.0.0:3000->3000/tcp
これて起動完了です。Enjoy!!
マウントしたvolumeの書き込み権限がない問題
Dockerの操作は基本すべてroot権限で実行されるので、 生成されたRailsアプリの所有権が root:root となる。ログインユーザーに変更しておく。
$ sudo chown -R $USER:$USER .