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


はじめに

Rails6プロジェクトの新規作成からGKE上で動作させるまでを試した結果となります。
今回試したのは以下3点です。
- Dockerイメージ(Ruby公式 2.7.0)から新たにRails6用Dockerイメージを作成する
- 作成したDockerイメージをDockerHubへ登録
- DockerHubに登録したイメージを使ってGKEのノードを作成し起動する

手順

1.Dockerイメージの取得

$ 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
#gem 'rails'

4.Dockerファイルの用意

Docerfileの内容については以下の記事を参考にさせて頂きました。
https://qiita.com/togana/items/30b22fc39fe6f7a188ec

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

  • yarnのリポジトリ設定(Rails6の起動にはwebpackerが必要で、Webpackerのインストールにはyarnが必要)
  • yarnのインストール(上記と同じ理由)
  • webpackerのインストール
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 -> ワークロード -> デプロイを選択すると以下の画面が表示されます。

以下を選択し、後はデフォルトのままとしました。

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

11.GKEのサービスを作成し外部公開する

ポートを3000に設定した他は前回の4の手順以降と同じです。
https://qiita.com/bleu/items/f2f16ee34fb0039e8890

参考