はじめに
Dockerを使ってrails apiモードの環境構築を行います。
環境
ruby 3.2.2
rails 6.1.0
作業ディレクトリ作成
はじめに作業ディレクトリを作成してDockerfile
とdocker-compose.yml
を作成します。
mkdier app
railsコンテナはAPIとして運用するのでapi、データベースのコンテナ名はdbとしました。
version: '3'
services:
db:
api:
rubyインストール
いきなりrailsをインストールするのではなくapiコンテナにrubyをインストールします。
FROM ruby:3.2.2
RUN apt-get update -qq && apt-get install -y vim
WORKDIR /app
docker-composeも編集しましょう。
version: '3'
services:
db:
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
volumes:
- mysql_daa:/var/lib/mysql
api:
build: .
command: bash -bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/app
ports:
- "3000:3000"
depends_on:
- db
tty: true
stdin_open: true
volumes:
mysql_daa:
.envファイルにMYSQL_ROOT_PASSWORD=XXX
という記述をすればdocker-compose.ymlで読み込んでくれます。
一度ビルドします。
docker-compose build
railsインストール
次はapiコンテナに入りrailsをインストールします。
今回は6.1.0
でバージョンを固定してみます。
まずapiコンテナに入ります。
docker-compose run --rm api bash
コンテナ内でrailsをインストールします。
gem install rails -v '6.1.0'
インストールできたら、コンテナ内でrailsプロジェクトを作成しましょう。
rails _6.1.0_ new . --api -d=mysql
Dockerfile
あとはDockerfile
を編集します。
dockr-compose up
実行ときにbunlde install
が実行されるようにします。
FROM ruby:3.2.2
RUN apt-get update -qq && apt-get install -y vim
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
RUN bundle install
EXPOSE 3000
database接続
database.yml
を編集してmysqlへ接続できるようにします。
まずDBに接続するためのusernameとpasswordをrailsのcredentials
を使って保存しましょう。
docker-compose exec -e EDITOR=vim rails credentials:edit
私の環境ではdatabase.yml
の設定は以下のようになりました。
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: <%= Rails.application.credentials.db[:development][:username] %>
password: <%= Rails.application.credentials.db[:development][:password] %>
host: db
これでDBに接続できるはずです。
下記のコマンドでデータベースを作成します。
docker-compose exec api rails db:create
最後にdocker-compose build
, docker-compose up
してlocalhost:3000にアクセスすればrailsの画面を確認できます。