LoginSignup
10
12

More than 5 years have passed since last update.

docker-composeで Rails + Mysql 環境作ってみた

Last updated at Posted at 2018-07-17

動機

会社でRails案件を行うことになったので、docker-composeを使って開発環境の構築を行おうと思い手順書みたいに書いてみました。
なので、個々の説明は省きます
今回はlocal環境にあるRailsをdocker内に持っていって起動させることを目標にしてます。
サンプルコードはこちらになります

Rails

Railsは以前書いたMacでrailsプロジェクト立ち上げで行ったRailsを使用します。
上記Railsでdatabase.ymlに追記します。

config/database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: root # パスワード追加
  host: <%= ENV.fetch("DB_HOST_NAME") { "localhost" } %> # 追加

Dockerfile作成

RailsドキュメントルートにDockerfileを作成します。

Dockerfile
FROM ruby:2.5.1-alpine
MAINTAINER admin
RUN cd /tmp \
  && apk --no-cache add \
    curl \
    curl-dev \
    nodejs \
    libstdc++ \
    libxml2-dev \
    libxslt-dev \
    linux-headers \
    mysql-client \
    mysql-dev \
    pcre \
    ruby-dev \
    ruby-json \
    tzdata \
    yaml \
    yaml-dev \
    bash \
    build-base \
    zlib-dev \
  && mkdir /sample_docker/
WORKDIR /sample_docker/
COPY Gemfile* /sample_docker/
RUN gem install bundler \
  && bundle install --clean --path /bundle
COPY . /sample_docker/
CMD ["bundle", "exec", "rails", "s"]

上記でRailsが起動できるOSやソース配置場所等を設定しています。

docker-compose
version: '2.1'
services:
  rails_app:
    stdin_open: true
    build: .
    environment:
      DB_HOST_NAME: mysql
    volumes:
      - .:/sample_docker
      - bundle:/bundle
    ports:
      - 3000:3000
    links:
      - mysql
  mysql:
    image: mysql:5.6
    ports:
      - 3307:3306
    restart: on-failure
    environment:
      MYSQL_DATABASE: sample_docker_development
      MYSQL_ROOT_PASSWORD: root

volumes:
  bundle:
    driver: local

rails_app はDockerfileの環境で動作しmysqlは別のimage環境で動作するようになります。
一番下にマウント処理を設定して、driver: localで明示的にlocal環境を見に行かせています。
これがないと、新たにGemfileにgemを追加した場合docker-compose run bundle installだけではgemが入らなず、いちいちdocker-compose buildしなければならないので面倒です。

docker起動

dockerを起動する前にimageを作成します。

$ docker-compose build

その後、Railsで設定してあるDBとtableを作成します。

$ docker-compose run rails_app bundle exec rails db:create db:migrate
  • 上記起動しなかった場合さきにdocker-compose upを行ってから実行してみてください。

docker起動

$ docker-compose up

今後

まだまだ全然使いこなせていなんですが、今後は開発環境だけでなく本番環境でもdockerを使っていこうと思います。
チームで行うにはdockerを知っていないときついと思うので、どう共有するかも考えないといけないですね。

10
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
12