GKEで自作コンテナのRails6を起動する

# はじめに
Rails6プロジェクトの新規作成からGKE上で動作させるまでを試した結果となります。
今回試したのは以下３点です。
- Dockerイメージ(Ruby公式 2.7.0)から新たにRails6用Dockerイメージを作成する
- 作成したDockerイメージをDockerHubへ登録
- DockerHubに登録したイメージを使ってGKEのノードを作成し起動する
# 手順
## 1.Dockerイメージの取得
```bash
$ docker pull ruby:2.7.0
```
## 2.プロジェクトディレクトリ、Gemfileの作成
```
$ mkdir project_name
$ cd project_name
$ docker run --rm -v "$PWD":/usr/src/project_name -w /usr/src/project_name ruby:2.7.0 bundle init
```
## 3.Gemfileの編集
以下のコメント箇所を外したくらいです

```Gemfile:Gemfile
#gem 'rails'
```

## 4.Dockerファイルの用意
Docerfileの内容については以下の記事を参考にさせて頂きました。
https://qiita.com/togana/items/30b22fc39fe6f7a188ec

今回の主な変更点は以下の点になりました

- yarnのリポジトリ設定(Rails6の起動にはwebpackerが必要で、Webpackerのインストールにはyarnが必要)
- yarnのインストール(上記と同じ理由)
- webpackerのインストール

```Dockerfile:Dockerfile
FROM ruby:2.7.0

ENV APP_ROOT /usr/src/rails6-base
WORKDIR $APP_ROOT

# yarnのリポジトリ設定(Rails6の起動の為に必要)
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list

# packageリストの更新
RUN apt-get update

# packageからのインストール
RUN apt-get install -y \
      nodejs \
      default-mysql-client \
      sqlite3 \
      yarn \
      --no-install-recommends

# packageインデックスファイルの削除
RUN rm -rf /var/lib/apt/lists/*

# Gemのインストール
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

# webpackerがないとRails6を起動できないので
RUN bundle exec rails webpacker:install

COPY . $APP_ROOT

# 3000ポートをListern状態で起動
EXPOSE  3000
CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0"]
```
## 5. railsプロジェクトの新規作成
Dockerイメージを作成する時にプロジェクトのファイルをイメージにコピーするので必要。

```
$ docker run --rm -it -v "$PWD":/usr/src/sample-ruby-gke developer_name/project_name bundle exec rails new .
```

## 6.Dockerイメージの生成
```
$ docker build -t developer_name/project_name .
```

## 7.Dockerイメージからコンテナの生成と起動
```
$ docker run -d -p 3000:3000 developer_name/project_name
```
## 8.ブラウザからアクセスする
ブラウザから以下のURLにアクセスしてRailsの画面が表示されることを確認
http://localhost:3000/
## 9.DockerHubへの登録
```
$ docker login
$ docker push developer_name/project_name:latest
```

DockerHubに登録ができたかは以下URLで確認できる
https://hub.docker.com/

## 10.DockerHubに登録されたDockerイメージからGKEノードを作成
以下、GCP Console画面です。
Kubernetes Engine -> ワークロード -> デプロイを選択すると以下の画面が表示されます。
![スクリーンショット 2020-01-04 15.27.06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55609/4830e6e2-aa35-e745-059b-61f8c93ae42d.jpeg)
以下を選択し、後はデフォルトのままとしました。

- 「既存コンテナイメージ」を選択
- イメージパス：developer_name/project_name:latest (上記で作成しDockerHubに登録したものと同じものを選択)

## 11.GKEのサービスを作成し外部公開する
ポートを3000に設定した他は前回の4の手順以降と同じです。
https://qiita.com/bleu/items/f2f16ee34fb0039e8890

# 参考
- [RailsアプリをDockerで開発するための手順](https://qiita.com/togana/items/30b22fc39fe6f7a188ec)
- [DockerImageをDockerHubに登録する方法](https://qiita.com/kon_yu/items/7c40f4dfbd1cce006ce7)
- [Bundlerで並列処理？？bundle installを爆速で処理する方法。](https://qiita.com/camelmasa/items/5ca27ab398f105f86c76)
- [yarn instration](https://yarnpkg.com/en/docs/install#debian-stable)
- [Google Cloud 認証方法](https://cloud.google.com/container-registry/docs/advanced-authentication)
- [Docker-docs-ja](http://docs.docker.jp/engine/articles/dockerfile_best-practice.html)