【Docker】Quickstart : Compose and Rails やってみた

# 概要
DockerでRails5に対応したRuby on Railsの環境構築を行いました。
このクィックスタートでは Docker Compose を使って、
簡単な Rails/PostgreSQL アプリを設定することができます。
学んだ一連の流れをまとめておきます。
（一番下にDockerのコマンド一覧も掲載しております！）

前提としてDockerとcomposeのインストールができている状態とします。
まだの人はこちらを参考にして下さい。
・[【図解】Dockerの全体像を理解する -前編-](https://qiita.com/etaroid/items/b1024c7d200a75b992fc)
・[いまさらだけどDockerに入門したので分かりやすくまとめてみた](https://qiita.com/gold-kou/items/44860fbda1a34a001fc1)
・[【入門】はじめての Docker Desktop for Mac のインストールと CentOS の仮想環境構築のセットアップ](https://qiita.com/gahoh/items/92217e0a887bb81e3155)

# 環境

**・MacOS Apple M1 バージョン11.4**
・**Docker 20.10.7**
・**Ruby 2.5.9**
・**Rails 5.2.6**


## ー参考資料ー
・公式ドキュメント[Quickstart: Compose and Rails](https://docs.docker.com/samples/rails/)
・[クィックスタート: Compose と Rails](https://docs.docker.jp/compose/rails.html)
・[DockerのQuickstart:Compose and Railsをやってみた](https://re-engines.com/2017/03/12/dockerのquickstartcompose-and-railsをやってみた/)

# 手順

## インストールができている確認
```docker:docker
% docker version

Client:
 Cloud integration: 1.0.17
 Version:           20.10.7
 API version:       1.41
 Go version:        go1.16.4
 Git commit:        f0df350
 Built:             Wed Jun  2 11:56:23 2021
 OS/Arch:           darwin/arm64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.7
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       b0f5bc3
  Built:            Wed Jun  2 11:55:36 2021
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.4.6
  GitCommit:        d71fcd7d8303cbf684402823e425e9dd2e99285d
 runc:
  Version:          1.0.0-rc95
  GitCommit:        b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
```

```docker:dockercompose
% docker compose

Docker Compose version v2.0.0-beta.6
```

## Dockerを使ったRuby on Railsの環境構築
Dockerとcomposeのインストールが完了したのでDockerを用いたRuby on Railsの環境構築を行います。

DockerでRuby on Railsの環境を構築するプロジェクトのディレクトリを作成し移動します。
今回はmyappとします。

```
% cd myapp
```

## 4つのファイルを準備

**⑴　docker-compose.yml**
**⑵　Dockerfile**
**⑶　Gemfile**
**⑷　Gemfile.lock**

## ⑴　docker-compose.yml

**docker-compose.yml**というファイル名をVScodeに作成します。

以下を記述↓↓

```docker-compose.yml
version: '3'
services:
  db:
    image: postgres
    environment:
      - POSTGRES_PASSWORD=password
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db
```

## ⑵　Dockerfile

次に、**Dockerfile**というファイル名をVScodeに作成します。

以下を記述↓↓

```Dockerfile:Dockerfile
FROM ruby:2.5
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
```

これでDockerを動かす記述が完了しました。

## ⑶　Gemfile

次に、**Gemfile**というファイル名をVScodeに作成します。

以下を記述↓↓

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

## ⑷　Gemfile.lock

次に、**Gemfile.lock**というファイル名をVScodeに作成します。
この時、**Gemfile.lock**は空にしておきます。

```ruby:Gemfile.lock
# 記述なし
```

これで４つのファイルの作成が完了しました。

上記4つのファイルを作ったうえで、コマンドをうっていきます。

```
% docker-compose build   
```
これで**Dockerfile**のファイル内の記述を実行します。

次に以下のコマンドでrails new をします。

```
% docker-compose run web rails new . --force --database=postgresql
```

これでダウンロードが完了したら、次にGemfileが更新されたので
再度以下のコマンドを実行します。

```
% docker-compose build   
```

## Ruby on RailsのDB設定

**config/database.yml** を以下に書き換えます。

```config/database.yml
default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: postgres
  password: password
  pool: 5

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

production:
  <<: *default
  database: myapp_production
  username: myapp
  password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>
```

## DBを作成

次に書き換えたDBを作成します。

```
% docker-compose run web rails db:create
```

## コンテナを起動

最後にコンテナを起動させます。

```
% docker-compose up
```

[http://localhost:3000/ ](http://localhost:3000/) にアクセスします。

![スクリーンショット 2021-07-21 16.38.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1129869/80e13647-b523-2431-bdf1-f3ab529e99fa.png)

この画面が出てきたら成功です！

これでDockerでRuby on Railsの環境構築が完了です！
簡単な Rails/PostgreSQL アプリを設定することができました！


以下はDokerの開発に必要なコマンド一覧を残しておきます。

# Dockerで使用するコマンド一覧


| コマンド                   | 動作                      | 補足 |
| :---                      | :---                     |  :--- |
| docker ps               　| 稼働コンテナの一覧表示       |       |
| docker ps -a              | すべてのコンテナを表示       |       |
| docker run                | コンテナの生成/起動          |      |
| docker stats              | コンテナの稼働確認           |      |
| docker start              | コンテナの起動              |      |
| docker stop               | コンテナの停止              |      |
| docker restart            | コンテナの再起動            |      |
| docker rm                 | コンテナの削除              |      |
| docker pause              | コンテナの中断/再開          |      |
| docker version          　| Dockerのバージョン確認       |       |
| docker info               |  Dockerの実行環境確認       |       |
| docker commit             | コンテナからイメージ作成      |       |
| docker save               |  イメージの保存              |       |
| docker build -t           | DockerfileからDockerイメージの作成 |       | 



以上となります。

Dockerコマンドはまだまだたくさんあります。
今後、Dockerの開発が進むにつれて、都度更新していきます。

学習頑張っていきましょう！！