JanGaJan.com

Is fun? JOY!

Rails With Mysql on Docker

docker周りが賑わっているので簡単な初期構築。 まずは、docker-composeを使ったmysqlのRailsアプリケーションの環境を構築してみます。

ソースコードはこちら

今回はRailsアプリケーション作成済みの前提です。

tool version
Ruby 2.2.2
Rails 4.2.3
docker 1.8.1
mysql 5.6.26

ツールのインストール

1
2
3
4
5
6
7
brew install Caskroom/cask/virtualbox
# docker-swarmは今回は使わない
brew install docker docker-machine docker-compose docker-swarm
# この下は順番が怪しい
docker-machine create --driver virtualbox default
eval $(docker-machine env default)
docker-machine start default

https://docs.docker.com/machine/get-started/

Dockerfileの作成

公式にDockerでRails環境を構築する手順があるのですが、Rubyのバージョン以外全て一緒です。 https://docs.docker.com/compose/rails/

1
2
3
4
5
6
7
FROM ruby:2.2.2
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
RUN bundle install
ADD . /myapp

docker-composeの作成

上記のサンプルと同様、dbとwebの2台構成にしています。 mysqlの場合、MYSQL_ROOT_PASSWORDという環境変数は、必須項目となります。 latestのバージョンは利用するタイミングによって変わる可能性があります。 詳しくはDocker Hub のmysqlを確認してください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
db:
  image: mysql:latest
  environment:
    - MYSQL_ROOT_PASSWORD=root
web:
  build: .
  command: bundle exec rails s -p 3000 -b '0.0.0.0'
  volumes:
    - .:/myapp
    - ./tools/mysql:/etc/mysql/conf.d
  ports:
    - "3000:3000"
  links:
    - db

my.cnfはカスタマイズしたものを利用したいので、リポジトリに${RAILS_ROOT}/tools/mysql/my.cnfという設定ファイルを作成し、- ./tools/mysql:/etc/mysql/conf.dの行を追加してください。特にカスタマイズする必要がなければこの行は不要です。

database接続設定

1
2
3
4
5
6
7
8
9
10
11
12
13
14
default: &default
  adapter: mysql2
  encoding: utf8
  reconnect: false
  pool: 5
  host: db
  port: 3306
  username: root
  password: root
  timeout: 5000

development:
  <<: *default
  database: app_development

hostはdbという名前になります。docker-compose.ymlのdbのキーと同じになりますね。adapterをmysql2にしているので、Gemfileにも忘れずに、gem 'mysql2'を追加します。

migrate

ここまでが完了したら、アプリ起動まで後少し。

1
2
3
4
cd ${RAILS_ROOT}
docker-compose build
docker-compose run web db:create
docker-compose run web db:migrate

アプリ起動

1
2
3
docker-compose up
# 別ターミナルで
open http://$(docker-machine ip default):3000

Comments