ログってなんぼ

エンジニアのメモです

MacのDockerでRails5+MySQL5.7開発環境を作ったメモ

任意のディレクトリを作ってその中で作業する前提です

ruby2.3.0 / rails 5.0.0 / mysql5.7でやってみます

Dockerfile

何はともあれDockerfileが必要です。下記のような内容で作成します。

$ cat > Dockerfile
FROM ruby:2.3.0
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp

Gemfile*

GemfileとGemfile.lockを作成します。Dockerfileと同じディレクトリでOK

$ cat > Gemfile
source 'https://rubygems.org'
gem 'rails', '5.0.0'

$ touch Gemfile.lock

docker-compose.ymlをつくる

$ cat > docker-compose.yml
version: '2'
services:
  db:
    image: mysql:5.7
    environment:
        MYSQL_ROOT_PASSWORD: testpassword
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

ここまでで下記のような状態になります

$ ls -l
total 16
-rw-r--r--  1 okisanjp  staff  222 11 17 17:02 Dockerfile
-rw-r--r--  1 okisanjp  staff   51 11 17 17:04 Gemfile
-rw-r--r--  1 okisanjp  staff    0 11 17 17:04 Gemfile.lock
-rw-r--r--  1 okisanjp  staff  211 11 17 17:09 docker-compose.yml

実行

とりあえず実行してみます

$ docker-compose build
$ docker-compose run web rails new . --force --database=mysql --skip-bundle

最終的に、ディレクトリ内はこうなりました

$ ls -l
total 64
-rw-r--r--   1 okisanjp  staff   222 11 17 18:13 Dockerfile
-rw-r--r--   1 okisanjp  staff  1725 11 17 18:26 Gemfile
-rw-r--r--   1 okisanjp  staff  4264 11 17 18:31 Gemfile.lock
-rw-r--r--   1 okisanjp  staff   374 11 17 18:20 README.md
-rw-r--r--   1 okisanjp  staff   227 11 17 18:20 Rakefile
drwxr-xr-x  10 okisanjp  staff   340 11 17 18:20 app
drwxr-xr-x   7 okisanjp  staff   238 11 17 18:20 bin
drwxr-xr-x  14 okisanjp  staff   476 11 17 18:20 config
-rw-r--r--   1 okisanjp  staff   130 11 17 18:20 config.ru
drwxr-xr-x   3 okisanjp  staff   102 11 17 18:20 db
-rw-r--r--   1 okisanjp  staff   271 11 17 18:11 docker-compose.yml
drwxr-xr-x   4 okisanjp  staff   136 11 17 18:20 lib
drwxr-xr-x   4 okisanjp  staff   136 11 17 18:32 log
drwxr-xr-x   9 okisanjp  staff   306 11 17 18:20 public
drwxr-xr-x   9 okisanjp  staff   306 11 17 18:20 test
drwxr-xr-x   7 okisanjp  staff   238 11 17 18:32 tmp
drwxr-xr-x   3 okisanjp  staff   102 11 17 18:20 vendor

config/database.yml

default: &default
   adapter: mysql2
   encoding: utf8
   pool: 5
   username: root
   password: testpassword
   host: db

host: dbは、docker-compose.ymlで設定した

services:
  db:
    image: mysql:5.7
    environment:
        MYSQL_ROOT_PASSWORD: testpassword

この部分に依存してます

なぜかmysql2関連でエラー

DBにもアクセスできるはずなのでdb:create後起動してみます

$ docker-compose run web rake db:create
Could not find gem 'mysql2 (< 0.5, >= 0.3.18)' in any of the gem sources listed in your Gemfile or available on this machine.

何故かmysql2が無いというエラーになってしまう

ログを見る限り、mysql2(0.4.5)がインストールされたはずなのですが・・・

仕方ないので、とりあえずGemfileを書き換えて再度build

Gemfileを書き換える

gem 'mysql2', '~> 0.3.20'
$ docker-compose build
$ docker-compose run web rake db:create
Created database 'myapp_development'
Created database 'myapp_test'

$ docker-compose up

http://localhost:3000/ にアクセスしてみます

f:id:Okisanjp:20161117183242p:plain

キタ━━━━(゚∀゚)━━━━!!

何か編集してみる

articlesでscaffold作ってみます

$ docker-compose run web rails g scaffold articles title:string body:text
$ docker-compose run web rails db:migrate
== 20161118014602 CreateArticles: migrating ===================================
-- create_table(:articles)
   -> 0.1155s
== 20161118014602 CreateArticles: migrated (0.1156s) ==========================

起動して確認

f:id:Okisanjp:20161118104842p:plain

f:id:Okisanjp:20161118104847p:plain

f:id:Okisanjp:20161118104852p:plain

OKです

追記

データの永続化についてはこちらです

okisanjp.hatenablog.jp