プログラム好き大学生のDocker+Ruby on rails5で環境構築とgitの設定（初心者向け）

#書いてあること
・ Docker+Ruby on rails5での環境構築の手順
・ gitの初期設定とGitHubの連携

こちらを参考にしています。
詳しく知りたい方はこっちを参考にしてくださいhttps://qiita.com/azul915/items/5b7063cbc80192343fc0

メモ程度にしか書いてません。。。
#環境
・mac OS Catalina バージョン 10.15.2
・iTerm2
・Visual Studio code バージョン: 1.41.1
・Ruby 2.6.3
・rails5.2.2

#ファイル構成
ワークスペース（自分のファイル内が以下のようになります）

```
sampleApp ---- Dockerfile
           |-- Gemfile
           |-- Gemfile.lock
           |-- README.md
           |-- Rakefile
           |-- app
           |-- bin
           |-- config ---- application.rb
           |           |-- boot.rb
           |           |-- cable.yml
           |           |-- credentials.yml.enc
           |           |-- database.yml
           |           |-- environment.rb
           |           |-- environments
           |           |-- initializers
           |           |-- locales
           |           |-- master.key
           |           |-- puma.rb
           |           |-- routes.rb
           |           |-- spring.rb
           |           |-- storage.yml
           |
           |-- config.ru
           |-- db
           |-- docker-compose.yml
           |-- lib
           |-- log
           |-- package.json
           |-- public
           |-- storage
           |-- test
           |-- tmp
           |-- vendor

```

#1.プロジェクトの作業ディレクトリを作成し移動

```ruby:terminal
$mkdir sampleapp
$cd sampleapp
```

#2.作業ディレクトリでDockerfileを作成・編集
自分はvscodeを使用しているためターミナルに``` code Dockerfile```としているが、自分のエディタで作業ディレクトリに移動して、ファイルを作成し、編集しても同じなので、よろしくお願いします。

```ruby:terminal
$ code Dockerfile
```

``` ruby:Dockerfile
# コピペでOK, app_nameもそのままでOK
# 19.01.20現在最新安定版のイメージを取得
FROM ruby:2.6.3

# 必要なパッケージのインストール（基本的に必要になってくるものだと思うので削らないこと）
RUN apt-get update -qq && \
    apt-get install -y build-essential \ 
                       libpq-dev \        
                       nodejs           

# 作業ディレクトリの作成、設定
RUN mkdir /app_name 
##作業ディレクトリ名をAPP_ROOTに割り当てて、以下$APP_ROOTで参照
ENV APP_ROOT /app_name 
WORKDIR $APP_ROOT

# ホスト側（ローカル）のGemfileを追加する（ローカルのGemfileは3.で作成）
ADD ./Gemfile $APP_ROOT/Gemfile
ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock

# Gemfileのbundle install
RUN bundle install
ADD . $APP_ROOT
```

#3.Gemfileを作成・編集

こちらもエディタでファイルを作成して、編集してもらって大丈夫です。
GemfileはBunder用の設定ファイルでこれを元にgemの依存関係を示した、Gemfile.lockを作成します

```ruby:terminal
$code Gemfile
```

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

#4.空のGemfile.lockを作成する
エディタで作成するだけでもOKです。

```ruby:teminal
$ touch Gemfile.lock
```

#5.docker-compose.ymlを作成・編集
ymlファイルを以下の例をコピペして作成、MYSQL_ROOT_PASSWORDとMYSQL_DATABASEで、任意のパスワード（7.で同じものを設定する）とデータベース名を設定

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

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

#6.rails newを実行する

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

#7.database.ymlを修正する
場所は```/sampleApp/config/database.yml```です。

```ruby:database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: password  # docker-compose.ymlのMYSQL_ROOT_PASSWORD
  host: db  # docker-compose.ymlのservice名
```

#8.Dockerの起動

現在のディレクトリは```sampleapp```の階層で行います。

```ruby:terminal
$ docker-compose build # コンテナをビルド

# -dオプションをつけてバックグラウンド実行するとこの後新しいシェルを立ち上げる必要がない
$ docker-compose up # コンテナの一斉起動
```

#9.DBを作成
新しいターミナルを開き```/sampleapp```で実行する

```ruby:terminal
$ docker-compose run web rails db:create
````

#10.コンテナが立ち上がってるのかを確認する

```ruby:terminal
$ docker-compose ps
     Name                    Command               State                 Ports
--------------------------------------------------------------------------------------------
sample_db_1    　　　　　　　　　　　　　　　　　　　      Up     
sample_web_1     　　                                Up      

#StateがUpになっていればokです。
```

#11.ブラウザで確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484536/dbae065c-1a04-8822-4bc1-3c3d19358bba.png)

#12.gitとGitHubの設定

GitHub　(https://github.com)　
でnew repositoriesを作成しておくこと

sampleappディレクトリ内でやる

````ruby:terminal
git init
git add .
git commit -m "first commit"
git remote add origin GitHubのURL
git push -u origin master
```