🎄

Dockerを利用したRails7のAPIモードの環境構築(PostgreSQL版)

2023/11/07に公開

概略

Dockerを利用したRails7のAPIモードの環境構築の手順を説明する。
Rails7でアプリケーションサーバが立ち上がるところまでを確認する。

ソースコード

作成したコードは以下レポジトリに置いてあります。
https://github.com/sktaz/sample_api

注意事項


  • ※ 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で開き、Dockerfiledocker-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の行の下に、hostusernamepassword行を追加する。

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
    

    https://hub.docker.com/

  • 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