Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?
@nakayama_ryotaro

rails (apiモード)+ Docker + mysql 環境構築(メモ)

はじめに

学習したことのメモとして書いていきます。

ディレクトリ構造

api/
 ├ Gemfile
 ├ Gemfile.lock
 ├ Dockerfile
 ├ docker-compose.yml 
 ├ entrypoint.sh 

Dockerfile dockercompose.yml Gemfile entrypoint.sh

Dockerfile
FROM ruby:2.7.3-buster
RUN apt-get update

#最新版のyarnをインストールできるように設定
RUN set -x && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
  echo 'deb http://dl.yarnpkg.com/debian/ stable main' > /etc/apt/sources.list.d/yarn.list

#nodeのバージョンを指定
RUN curl -sL https://deb.nodesource.com/setup_14.x | bash - && \
  apt-get install nodejs

RUN apt-get install -y \
  build-essential \
  libpq-dev \
  nodejs \
  yarn
RUN mkdir /api
WORKDIR /api
COPY Gemfile  /api/
COPY Gemfile.lock /api/

RUN bundle install


COPY entrypoint.sh /usr/bin/
#entrypoint.shの権限を付与
RUN chmod +x /usr/bin/entrypoint.sh
#entrypoint.shを毎回実行
ENTRYPOINT ["entrypoint.sh"]
#ポートを3000にする
EXPOSE 3000

CMD ["rails", "server", "-b", "0.0.0.0"]

docker-compose.yml
version: '3'

volumes:
  db-data:

 api:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - './api:/api'
    ports:
      - '8000:3000'
    tty: true
    stdin_open: true
    depends_on:
      - db
    links:
      - db
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: root
    ports:
      - '3306:3306'

volumes: db-data: でdockervolumeを作成してコンテナ内のデータベースにマウント。詳しくはこちらのブログ
volumeの場所についてはこちら

entrypoint.sh
#!/bin/bash
set -e

# Remove a potentially pre-existing server.pid for Rails.
rm -f /myapp/tmp/pids/server.pid

# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"

Gemfile
source 'https://rubygems.org'
gem 'rails', '~>6'

docker-compose run の実行

この状態でdocker-compose upしてもわたしコンテナはアクティブになりませんでした。

次にコマンドを実行します

docker-compose run api rails new . --api --force --database=mysql --skip-bundle --skip-test 

--skip-bundle : Dockerfileでbundle install するのでbundleをスキップ

--force : rails new で作られるファイルがすでに存在する場合上書き

--skip-test : rspecを使うのでスキップ

database.ymlの編集

またdatabase.ymlのデフォルトの部分を以下のように編集する

datbase.yml
default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: password
  host: db

最後に

docker-compose exec api bash

でコンテナないに入り

rails db:create
rails db:migrate

これでdocker-compose up を行った後、指定したポート(今回は8000)でURL(localhost:8000)を入力すればよく見るrails の画面が現れる。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?