Rails6にDockerを導入したのでまとめてみた(初学者)

#目的
ポートフォリオ実装してdockerを導入したのでアウトプットします。
```Dockerがなんなのかわからなかったので色々な方のQiitaを参考にしております```
#Dockerのインストール
私はこの方の記事を見てインストールしました！！
https://qiita.com/kurkuru/items/127fa99ef5b2f0288b81
インストールできたら以下コマンドを実行します。

```ターミナル
 % docker run -d -p 80:80 docker/getting-started
```
インストールの確認

```
% docker -v
```
このようなコマンドが出たらインストール完了です。
```Docker version 20.10.2, build 2291f61```

```
% docker-compose -v
```
こちらも同様に```docker-compose version 1.27.4, build 40524192```が出力されたら完了です。
#Docker導入に渡って
メリットとしては```ローカル環境に構築したrailsとmysqlを１コマンド叩くだけで実行できるようになる。```と記載されていたのですが、初学者の私には理解が難しかったです。dockerを導入した後にこの意味がわかったのでまずは手を動かした方がいいです。


#開発中のアプリでdockerを導入
早速ですが導入していきます。
***フレームワークはRubyonRails6を使用しています。***
###Dockerfileの作成
手順としてDockerを導入したい開発中のアプリに移動します

```
~ % cd アプリ名
```
```
アプリ名 % touch Dockerfile
```
Dockerfileが作成されたので下記を記載してください。

```dockerfile
FROM ruby:2.6.5 

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

RUN mkdir /アプリ名
WORKDIR /アプリ名

ADD ./Gemfile /アプリ名/Gemfile
ADD ./Gemfile.lock /アプリ名/Gemfile.lock

RUN gem install bundler
RUN bundle install
ADD . /アプリ名
```
アプリ名を自身の開発しているアプリ名に変えましょう。

###Docker-compose.ymlを作成しましょう。

```
アプリ名 % touch docker-compose.yml
```
下記を記述しましょう。

```docker-compose.yml
version: '3'
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: 'password' # このままpasswordとしても問題なく動く
    ports:
      - "4306:3306" #DockerコンテナとSequelpro接続の為に必要な設定

  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/アプリ名
    ports:
      - "3000:3000"
    depends_on:
      - db
      
```
###config/database.ymlを編集

```config/database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: password
  socket: /tmp/mysql.sock
  host: db
development:
  <<: *default
  database: アプリ名_development


production.
test:
  <<: *default
  database: アプリ名_test
```
追加されたのは、```password```と```host: db```のみ

###docker-compose.yml buildでコンテナの作成

```ターミナル
アプリ名 % docker-compose build
```
エラーがなかったら成功です。

###コンテナ上でDB作成とmigrateの実行

```
アプリ名 % docker-compose run web bundle exec rails db:create
```
Rails6だとこのコマンドを実行するとエラーが出てしますので編集します。

```config/webpacker.yml
  # Verifies that correct packages and versions are installed by inspecting package.json, yarn.lock, and node_modules
  check_yarn_integrity: false
```
およそ56行目あたり```check_yarn_integrity: true```
になっているのでこれを```false```に変えます。

編集が終わったら、もう一度同じコマンドを実行しましょう。
続いてmigrateしましょう。

```
アプリ名 % docker-compose run web bundle exec rake db:migrate
```

これでコンテナ上でdb設計ができました。最後にコンテナを起動しましょう。

```
アプリ名 % docker-compose up 
```
localhost:3000にアクセスし起動できていたら導入完了です。

#docker hubから起動
複数のアプリをコンテナに積んだのでコマンドを打たずクリック一つでアプリを起動できます。
赤字のRANをクリックすると起動できます。
![スクリーンショット 2021-01-14 13.27.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/918688/ef9e7b66-a750-c256-d3e3-51d4d48ec520.png)

もう一回クリックすれば停止できます。

#単語集
###①dockerfileって何
コンテナを作成する材料。```docker-compose build``` のコマンドを実行するとステップに分けた読み込みをしていたと思います。読み込みが成功したらコンテナが作成されたよの意味。
###②docker-composeって何
複数のコンテナを同時に動かすためのツールのこと

こんな感じです！
もっと詳しく書けるように頑張ります。