Docker入門 #5 【Ruby on Rails5環境構築】

![2_.png](https://lh3.googleusercontent.com/-lgTCvK6jmyY/WOz9Pamz9VI/AAAAAAAAAIc/2M22GtnseqAl-3e3jDeKXDZRPe83djYhACLcB/s400/6a521813-6a9d-ece6-5efe-c921461c5cfa.png)


今回は公式の[Quickstart: Compose and Rails](https://docs.docker.com/compose/rails/)を改良したものです


完成品
https://github.com/wMETAw/rails5-on-docker

## 構成
| service     | version |
|-------------|---------|
| Ruby        | 2.3.3 |
| Rails       | 5.0.0.1   |
| Mysql       | 5.7 |


![enter image description here](https://lh3.googleusercontent.com/-H8aDgL34nbw/WOz9kPzNAbI/AAAAAAAAAIs/KQp-99wBwPQVa7fttnZnArPhsDPd2XFYgCLcB/s400/cf25c04f-d310-3462-a9ff-c65bc45876b7.png "cf25c04f-d310-3462-a9ff-c65bc45876b7.png")

## Dockerfile

```bash:Dockerfile
FROM ruby:2.3.3

# RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN apt-get update -qq
RUN apt-get install -y build-essential 
RUN apt-get install -y libpq-dev
RUN apt-get install -y nodejs

# ワーキングディレクトリの設定
RUN mkdir /myapp
WORKDIR /myapp

# gemfileを追加する
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock

# gemfileのinstall
RUN bundle install
ADD . /myapp
```

`RUN apt-get ...`はタイムアウトやエラーが発生する場合があるので縦並びに記述した方が良いと思います！
見やすいですし！

## Gemfile , Gemfile.lock

```ruby:Gemfile
source 'https://rubygems.org'
gem 'rails', '5.0.0.1'
```

```bash:terminal
# 空の.lockファイルを作成
$ touch Gemfile.lock
```

## docker-compose.yml

```bash:docker-compose.yml
db:
  image: mysql:5.7
  environment:
    MYSQL_ROOT_PASSWORD: root

web:
  build: .
  command: bundle exec rails s -p 3000 -b '0.0.0.0'
  volumes:
    - .:/myapp
  ports:
    - "3000:3000"
  links:
    - db
```

## rails newでプロジェクトを作成

```bash:terminal
$ docker-compose run web rails new . --force --database=mysql --skip-bundle
```

## DBhostの修正
```yaml:config/database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: root
  password: root # docker-compose.ymlのMYSQL_ROOT_PASSWORD 
  host: db       # docker-compose.ymlのサービス名
```

## 起動
```bash:terminnal
# コンテナをビルド
$ docker-compose build

# コンテナの一斉起動
$ docker-compose up
```

## DB作成
```bash:terminnal
$ docker-compose run web rails db:create
```

## 確認
http://localhost:3000/

![2_.png](https://lh3.googleusercontent.com/-lgTCvK6jmyY/WOz9Pamz9VI/AAAAAAAAAIc/2M22GtnseqAl-3e3jDeKXDZRPe83djYhACLcB/s400/6a521813-6a9d-ece6-5efe-c921461c5cfa.png)

**FOO↑↑**



## scaffoldでCRUDを生成してみる

```bash:terminnal
# scaffold
$ docker-compose run web rails g scaffold users name:string

# migration
$ docker-compose run web rails db:migrate
```

http://localhost:3000/users

<img width="392" alt="3_.png" src="https://lh3.googleusercontent.com/-8m_ffroPsTc/WOz85Z7PaaI/AAAAAAAAAIU/dP_HF3d3uc47umoVzdy1d52rsB970aaDgCLcB/s400/3daa1df1-9f9b-3e85-22d5-7943249c35c0.png">



## さいごに
Rails場合、OSとgemとrubyのバージョンの依存関係でごちゃごちゃになり、各々のマシンだとインストールエラーが必ずと言っていいほど発生します
（v8・rubyracer・nokogiriなど）

環境を統一できるDockerはRailsに向いてるなーって思いました。

また、 **Rails 5.1対応**の[第4版Railsチュートリアル](https://railstutorial.jp/?version=5.1)が2017年8月に公開されました！

本当にありがたいですね！


今回で入門記事は終わりです
お疲れ様でした！


## リンク
[Docker入門 #1 【Dockerとは】](https://qiita.com/wMETAw/items/b9bc643ded4b92bf6add)
[Docker入門 #2 【Dockerチュートリアル】](https://qiita.com/wMETAw/items/8d1b0c053a39841765bf)
[Docker入門 #3 【WordPress環境構築】](https://qiita.com/wMETAw/items/710bbbb328b78757463a)
[Docker入門 #4 【CodeIgniter環境構築】](https://qiita.com/wMETAw/items/aaf6a94a83e2ac5ac0c3)
Docker入門 #5 【Ruby on Rails5環境構築】
[Docker コマンドチートシート](https://qiita.com/wMETAw/items/34ba5c980e2a38e548db)