dockerでrailsアプリの作成

注意：ただ試しにdockerを利用してrailsの最初のWelcome aboardの画面をローカルホストで表示したいという完全初心者向け。そして備忘録なので細かいことは書いてないです

# 公式サイトからdockerのinstall

https://docs.docker.com/docker-for-mac/install/



#railsプロジェクトのディレクトリの作成

`$ mkdir rails_test`
`$ cd rails_test`


#rubyのインストール

rubyのインストールだがもちろんローカルにはインストールしない。
dockerにあらかじめ用意されているイメージをpullしてrubyをインストールする。

``$ docker pull ruby:2.3.0``

バージョンは適宜変えてください。

#Gemfileの生成

Gemfileの生成のために`bundle init`をする。

`$ docker run --rm -v "$PWD":/usr/src/rails_test -w /usr/src/rails_test ruby:2.3.0 bundle init`

#Gemfileへの追加

rails４を入れたかったのでGemfileに追加


```Gemfile
gem 'rails', '4.2.6' 
```

イメージ内にgemを埋め込む為にGemfile.lockを作成

`$ touch Gemfile.lock`

#Dockerfileの作成
Dockerfileにはコンテナの構成内容の記述を行う。そのDockerfileをビルドすることでイメージが使用するイメージが作成される。

```Dockerfile
FROM ruby:2.3.0

ENV APP_ROOT /usr/src/rails_test

WORKDIR $APP_ROOT

RUN apt-get update && \
    apt-get install -y nodejs \
                       mysql-client \
                       postgresql-client \
                       sqlite3 \
                       --no-install-recommends && \
    rm -rf /var/lib/apt/lists/*

COPY Gemfile $APP_ROOT
COPY Gemfile.lock $APP_ROOT

RUN \
  echo 'gem: --no-document' >> ~/.gemrc && \
  cp ~/.gemrc /etc/gemrc && \
  chmod uog+r /etc/gemrc && \
  bundle config --global build.nokogiri --use-system-libraries && \
  bundle config --global jobs 4 && \
  bundle install && \
  rm -rf ~/.gem
```

＊　dockerのイメージとコンテナの違いに関して参考にした資料
http://www.atmarkit.co.jp/ait/articles/1407/08/news031.html
https://www.slideshare.net/zembutsu/docker-images-containers-and-lifecycle


#ビルドしてイメージの作成


`docker build -t developer_name/rails_test .`

イメージがちゃんとできているか確認
`$ docker images`

```
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
developer_name/rails_test    latest              3bc0f71d6be6        About an hour ago   890 MB
ruby                2.3.0               7ca70eb2dfea        12 months ago       725 MB
```

#railsアプリの作成

イメージができたのでrails newでアプリを作成する。

`$ docker run --rm -it -v "$PWD":/usr/src/rails_test developer_name/rails_test rails new .`


#railsアプリのイメージ構築のためにDockerfileを編集する

```
FROM ruby:2.3.0

ENV APP_ROOT /usr/src/rails_test

WORKDIR $APP_ROOT

RUN apt-get update && \
    apt-get install -y nodejs \
                       mysql-client \
                       postgresql-client \
                       sqlite3 \
                       --no-install-recommends && \
    rm -rf /var/lib/apt/lists/*

COPY Gemfile $APP_ROOT
COPY Gemfile.lock $APP_ROOT

RUN \
  echo 'gem: --no-document' >> ~/.gemrc && \
  cp ~/.gemrc /etc/gemrc && \
  chmod uog+r /etc/gemrc && \
  bundle config --global build.nokogiri --use-system-libraries && \
  bundle config --global jobs 4 && \
  bundle install && \
  rm -rf ~/.gem

COPY . $APP_ROOT      #追加

EXPOSE  3000　　　　　　　　　　　　　　　　　　　　#追加
CMD ["rails", "server", "-b", "0.0.0.0"]　　　　　　　#追加

```

Dockerfileを変更したのでビルドしてイメージを再作成する。

`$ docker build -t developer_name/rails_test .`

とりあえずrailsを動かしたい方はこれで以下のコマンドを実行すれば立ち上がります。
`$ docker run -d -p 3000:3000 developer_name/rails_test`


以上です。

本当はdocker-composeを使ってrails　+　mysqlで立ち上げたくて試しにやってみたが、ralsアプリのコンテナとmysqlのコンテナの接続がうまくできなくて１日半くらいハマってしまったけどとりあえずrailsがdockerで動いているところが見たかったので今回はこれにしました。

rails + mysqlは今後やってまたアップしたいと思います。