こんにちは、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 .