ゴール
- Cloud Run でRailsアプリケーションを動かせるようにする。
- ローカルからContainerRegistryにコンテナをPushし、そこからCloudRunにコマンドでデプロイする。
実行環境
- Ruby
- 3.1.2
- Ruby on Rails
- 7
持病の関係で1年ほどブランクがあり、仕事に戻るため知識を取り戻す&Dockerをそれなりに使えるようにするために、RailsアプリケーションをCloudRunにデプロイする方法をまとめてみました。
Railsアプリケーション
- 今回はDB周りは無視したいので、
--skip-active-record
でrails new
します。 - またこの記事はRailsアプリケーションの開発が目的ではないので、アクセスするとただ文字列が表示されるだけのRailsアプリを用意します(Railsじゃなくてもw)
準備
$ rails _7.0.3_ new --skip-active-record kaesudake
$ bundle exec rails g controller tops index
root 'tops#index'
class TopsController < ApplicationController
def index; end
end
<h1>Hello 返すだけ!!</h1>
Dockerfile, docker-compose.yml, build-docker.sh
Cloud Run はデフォルトでリッスンするポートは 8080
のようなので、 8080
に指定します。(もちろん変えれます)
FROM ruby:3.1.2
RUN mkdir /app
WORKDIR /app
COPY . /app
RUN gem install bundler & \
bundle install
ENTRYPOINT ["/bin/sh", "-c"]
CMD ["rm tmp/pids/server.pid; bin/rails assets:precompile && bin/rails s -p ${PORT}"]
version: "3.8"
services:
app:
image: kaesudake
ports:
- 8080:8080
stdin_open: true
tty: true
environment:
PORT: 8080
volumes:
- .:/app
docker build --no-cache -t kaesudake .
イメージの作成
私はzshを使っているので、下記コマンドを実行して、イメージを作成します。
zsh build-docker.sh
Artifact Registry に Push
GCPのArtifactRegistryにimageをPushします。
その前に コマンドラインツールのgcloudをセットアップします。
セットアップ方法は 公式ドキュメント をご参照ください。
docker tag kaesudake <ArtifactRegistryのURL>/kaesudake
docker push <ArtifactRegistryのURL>/kaesudake
ArtifactRegistryのイメージを利用してCloudRunにデプロイ
先ほどArtifactRegistryにPushしたイメージを利用して、CloudRunにコンテナをデプロイします。
コンソールに未認証のリクエストを許可するかどうかを尋ねるプロンプトがでるので、今回は y
を選択します。未認証のリクエストを許可すると、誰でもアクセスできるようになります。
gcloud run deploy --image <ArtifactRegistryのURL>/kaesudake
処理が完了すると、最後に Service URL
が表示されるので、そのURLにアクセスすると、Railsアプリの root
にアクセスできます。
今回は以上です。
次はCloudSQLと接続したRailsアプリをCloudRunにデプロイできるようにしてみたいと思います。