既存のrails6のアプリにMySQLでDockerを導入する。

初心者ですが既存のrails6のアプリにMySQLでDockerを導入できたので備忘録として記事を残します。
もし間違っていたら教えていただきたいです。

[Ruby on Rails 「途中まで作ったアプリにDockerを導入したい」に挑戦してみる（MySQL / Sequel Pro)](https://qiita.com/majorboy/items/9fbfc78fc7bbc1f35e77)

基本的にはこちらの方の記事を参考にさせていただきました。

# 1　Dockerfile/docker-compose.ymlを既存アプリのルートディレクトリに作成する。


#  2　Dockerfileを編集する
```docker:Dockerfile
FROM ruby:2.6

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

RUN mkdir /app_name 

ENV APP_ROOT /app_name 
WORKDIR $APP_ROOT

ADD ./Gemfile $APP_ROOT/Gemfile
ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock

RUN gem install bundler 
RUN bundle install
ADD . $APP_ROOT
```
####  FROM ruby:2.6 について
私のアプリはruby2.6.2で作られているので、このように記述しました。

#  3　docker-compose.ymlを編集する

```docker:docker-compose.yml
version: '3'
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: 'password'
    ports:
      - "4306:3306"

  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/app_name
    ports:
      - "3000:3000"
    depends_on:
      - db
```

基本的には参考記事通りです。

#     4　database.yml編集する。
```ruby:config/database.yml
default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: password
  socket: /tmp/mysql.sock
  host: db
  # host: localhost　これは以前までのもので一応コメントアウトで残しておきました。

development:
  <<: *default
  database: 自分のDBの名前
```

#     5　docker-compose build　でコンテナを作成する。

```ターミナル
[自分のアプリ名] $ docker-compose build 
```
##### これで新たにDockerのコンテナが作成されます。
一番最初だけ時間がかかるので気長に待ちましょう。

#     6 Dockerコンテナ上でDB作成＆migrationを実行

##### rails6の場合ここで以下のようなエラーが出ると思います。

```ターミナル
ySQL Community Server (GPL)
web_1  | => Booting Puma
web_1  | => Rails 6.0.3.1 application starting in development 
web_1  | => Run `rails server --help` for more startup options
web_1  | sh: 1: yarn: not found
web_1  | 
web_1  | 
web_1  | ========================================
web_1  |   Your Yarn packages are out of date!
web_1  |   Please run `yarn install --check-files` to update.
web_1  | ========================================
web_1  | 
web_1  | 
web_1  | To disable this check, please change `check_yarn_integrity`
web_1  | to `false` in your webpacker config file (config/webpacker.yml).
web_1  | 
web_1  | 
web_1  | 
web_1  | 
web_1  | 
web_1  | Exiting

```

このエラーを解消したいのでエラー文通りに

```ruby:config/webpacker.yml
  # Verifies that correct packages and versions are installed by inspecting package.json, yarn.lock, and node_modules
  check_yarn_integrity: false
```
##### このようにfalseに変えることでエラーを解消できました。

参考記事
[yarnが原因でdocker-compose up ができない ( Your Yarn packages are out of date!)」に挑戦してみる（MySQL / Sequel Pro)](https://qiita.com/busitora2/items/9ce2877d2ead84a44fda)


####  本題に戻ります

```ターミナル
[自分のアプリ名] $ docker-compose run web bundle exec rake db:create
```

このコマンドでDocker上にDBが作成されます。
レコードは最初からになるので注意してください。

```ターミナル
[自分のアプリ名] $ docker-compose run web bundle exec rake db:migrate
```

migrateも忘れずに行いましょう。


#     7 docker-compose up でコンテナを起動する。

```ターミナル
[自分のアプリ名] $ docker-compose up
```

これでローカルホストで表示できるようになりました。
コンテナが立ち上がったら
http://localhost:3000/
にアクセスしてみてください。