Docker DesktopでRailsサーバを立ち上げる

Windows環境で複数のRubyバージョンを管理するのが煩雑になり必殺Dockerに頼ろうとしたところご多分に漏れずドハマりしたので備忘録しておきます。

動作環境

  • Windows 10 Pro
  • Docker Desktop 2.1.0.1
  • Ruby 2.5.3
  • Rails 5.2.2

Dockerfile

ググれば一発だったのかもしれませんが開発パッケージのapt-getが必要だったということです。

FROM ruby:2.5.3
ENV LANG C.UTF-8

RUN apt-get update -qq && \
    apt-get install -y build-essential libpq-dev nodejs && \
    rm -rf /var/lib/apt/lists/*

RUN mkdir /app_name
ENV APP_ROOT /app_name
WORKDIR ${APP_ROOT}

ADD ./Gemfile ${APP_ROOT}/Gemfile
ADD ./Gemfile.lock ${APP_ROOT}/Gemfile.lock

RUN bundle install
ADD . ${APP_ROOT}

docker-compose.yml

特にこれといって目新しいことはないかと思いますが、強いて言えば同じローカル環境でRedmineも動かしていたのでDBのポートを変更しています。

あとデータ永続化にはあらかじめ docker volume create しておく必要がありますです。

version: '3'

services:
  web:
    build: .
    ports:
      - "3000:3000"
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/app_name
    depends_on:
      - db
  
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: root
    ports:
      - '3406:3306'

Gemfile

Railsだけをインストールするようにしておきます。

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

Gemfile.lock

これは空のファイルを作るだけでいいです。

さあ、立ち上げよう

まずbundleをすっ飛ばしてプロジェクトを作ります(認識合ってる?)

$ docker-compose run web rails new . --force --database=mysql --skip-bundle

大量に生成されたうちの config/database.yml を以下のように弄くります。

default: &default
  ...
  username: root
  password: password # docker-compose.ymlに定義したパスワード
  host: db # docker-compose.ymlに定義したDBのホスト名

で、buildします。

$ docker-compose build
$ docker-compose up -d

DBのスキーマを作成します。

$ docker-compose run web rails db:create

http://localhost:3000 にアクセスしてRailsのページが立ち上がれば成功です。

参考サイト

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です