Dockerを利用したRails7のAPIモードの環境構築(PostgreSQL版)
概略
Dockerを利用したRails7のAPIモードの環境構築の手順を説明する。
Rails7でアプリケーションサーバが立ち上がるところまでを確認する。
ソースコード
作成したコードは以下レポジトリに置いてあります。
注意事項
-
Dockerを利用するために本章ではRancher Desktopを使用する。
以下サイトよりインストール。
https://rancherdesktop.io/詳しいインストール手順は以下リンク先の手順「step3:Rancher Desktop のインストール」以降を参照。
https://dev.classmethod.jp/articles/migration-from-docker-desktop-to-rancher-desktop/
-
※ Rancher Desktopではなく、Docker Desktopを使いたい場合
Docker Desktopは条件に該当した場合のみ無料で利用できるように規約が変更になっている。
会社から貸与されたPCなどでDocker Desktopを使用すると有償ライセンス条件に引っかかる可能性あります。
このため、有償条件に該当する企業に所属している場合でDocker Desktopを使用したい場合は、自己学習として自宅のPCで実行することをおすすめします。Docker Desktop は、小規模なビジネス向け(従業員 250名未満、かつ収益 1 千万ドル未満)、個人利用、教育目的、非商用のオープンソースプロジェクトに対しては、無償提供が継続されます。 大規模なエンタープライズ向けのプロフェッショナル利用に対しては、有償サブスクリプションが必要です。
出典: https://matsuand.github.io/docs.docker.jp.onthefly/desktop/faqs/
ローカルの開発環境の用意
前提
この手順ではportは3001で起動します。
もし3000で起動したい場合は、以下手順に記載している3001の記述を3000に置き換えて実行してください。
1.任意のディレクトリで、sample_apiの名前でフォルダを作成する

2.作成したフォルダをvisual studio codeで開き、Dockerfileとdocker-compose.ymlファイルを新規作成する
- Dockerfile
FROM ruby:3.2.2
# yarnをinstallするためのリポジトリーを取得
# https://classic.yarnpkg.com/en/docs/install#debian-stable
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
# ライブラリをインストール
RUN apt-get update -qq && \
apt-get install -y build-essential libpq-dev nodejs postgresql-client yarn vim
ENV EDITOR=vim
WORKDIR /sample_api
# Docker内でGemfileに記載のライブラリをインストールする
COPY Gemfile /sample_api/Gemfile
COPY Gemfile.lock /sample_api/Gemfile.lock
RUN bundle install && bundle update
COPY . /sample_api
RUN bundle install && bundle update
RUN rm -f tmp/pids/server.pid
docker-compose.yml
version: '3'
services:
db:
image: postgis/postgis:13-master
volumes:
- postgres:/var/lib/postgresql/data
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=password
- PGPASSWORD=password
ports:
- "5433:5432"
web:
build: .
command: tail -f /dev/null
volumes:
- .:/sample_api
- bundle:/usr/local/bundle
- rails-cache:/sample_api/tmp/cache
ports:
- "3001:3001"
volumes:
postgres:
driver: local
bundle:
driver: local
rails-cache:
driver: local
- 実際の画像

3.PC上でDockerが起動していることを確認する
powershellなどコマンドラインでdocker psと打ったら応答が返ってくることを確認する。
C:\Users> docker ps
4.GemfileとGemfile.lockを作成する
- Gemfile
source 'https://rubygems.org'
gem 'rails', '7.1.1'

-
Gemfile.lockは空のままでOK

5.ctrlキーと@キーでTERMINALを開く
-
コマンドラインで
docker-compose buildを実行する。
buildが始まり、正常終了したことを確認する

-
docker-compose up -dをTERMINALに入力しenter
正常終了を確認する。 -
docker-compose ps -aをTERMINALに入力しenter
docker-compose.ymlで定義したwebと付けたサービスとdbとつけたサービスが起動していることを確認する

-
docker-compose exec web bashをTERMINALに入力しenter
webとつけたサービスの中に入り、シェルのbashを起動している

6.Railsアプリを作成する
- terminal上で以下を入力し、enter
docker-compose run --rm web rails new . --force --no-deps --database=postgresql --api

-
Dockerfileの中身が書き換わった場合は、手順2で作成したDockerfileの内容に戻す。 -
/sample_api/config/database.ymlを修正
defaultの行の下に、hostとusernameとpassword行を追加する。
default: &default
adapter: postgresql
encoding: unicode
host: db
username: postgres
password: password
# For details on connection pooling, see Rails configuration guide
# https://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
development:
<<: *default
database: sample_api_development
・・・(省略)

-
コマンドラインでもう一度
docker-compose buildを実行する。
※もし…省略failed to fetch anonymous token…省略みたいなエラーが出たら、以下を実行後にdocker-compose buildを再実行する。# windowsの場合(Powershellの場合) set DOCKER_BUILDKIT=0 set COMPOSE_DOCKER_CLI_BUILD=0 # macの場合 export DOCKER_BUILDKIT=0 export COMPOSE_DOCKER_CLI_BUILD=0# docker-compose buildの再実行 docker-compose build※それでもerrorが出る場合は、docker loginを行なう。
docker login # その後はDocker Hubに登録してあるユーザーとパスワードを入力しEnter # ログインできたら、docker-compose buildの再実行 docker-compose build -
docker-compose up -dをTERMINALに入力しenter -
docker-compose ps -aをTERMINALに入力しenter
docker-compose.ymlで定義したwebと付けたサービスとdbとつけたサービスが起動していることを確認する

-
docker-compose exec web bashをTERMINALに入力しenter
webとつけたサービスの中に入り、シェルのbashを起動している

-
bash上で、
bundle installを入力し、enter

-
bash上で、
bundle updateを入力し、enter

-
bash上で、
rails db:createを入力し、enter
-
bash上で、
rails s -b 0.0.0.0 -p 3001を入力しenterすると、Railsサーバーが起動する。 -
ブラウザで
http://localhost:3001と入力すると、Railsの起動画面が表示されることを確認する。

-
serverを停止したい場合は
ctrlキーとcキーでサーバーを終了できる。
確認が終わりコンテナを停止したい場合
確認が終わりコンテナを停止したい場合は以下手順で行える。
- 起動しているDockerコンテナを確認する。
docker-compose ps
以下が表示される。
sample_api-db-1 省略
sample_api-web-1 省略
- 以下コマンドでRailsをDockerコンテナを終了する
docker compose down
- 起動しているDockerコンテナを確認し、起動しているコンテナがないことを確認する
docker-compose ps
Discussion