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のページが立ち上がれば成功です。
参考サイト
Qiita
12 Users
22 Pockets
DockerでRuby on Railsの開発をしよう - Qiita
追記(2018/7/10)・Dockerfileからmysql-clientを削除 なくても大丈夫だった・docker-compose.ymlに追記 dbのパスワードを空白にするパターンを書いた・よく使うコマンドのDocke...