はじめに
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