0
0

Dockerを使ったrails apiモードの環境構築

Posted at

はじめに

Dockerを使ってrails apiモードの環境構築を行います。

環境

ruby 3.2.2
rails 6.1.0

作業ディレクトリ作成

はじめに作業ディレクトリを作成してDockerfiledocker-compose.ymlを作成します。

mkdier app

railsコンテナはAPIとして運用するのでapi、データベースのコンテナ名はdbとしました。

docker-compose.yml
version: '3'
services:
  db:
  api:

rubyインストール

いきなりrailsをインストールするのではなくapiコンテナにrubyをインストールします。

Dockerfile
FROM ruby:3.2.2

RUN apt-get update -qq && apt-get install -y vim

WORKDIR /app

docker-composeも編集しましょう。

docker-compose.yml
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の設定は以下のようになりました。

config/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の画面を確認できます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0