Edited at

ホスト環境のRubyを使わずにDockerを使ってRails newする

More than 1 year has passed since last update.


お題

ホスト環境のRubyを使わずにDocker上のRubyだけで、rails newコマンドを使って、Ruby on Railsの環境を構築します。


環境


  • fish-shell version 2.7.1

  • Docke for mac Version 18.03.1-ce-mac65 (24312)

  • Ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-musl]

  • Rails 5.2.0


手順


RubyのDockerイメージを取得

docker pull ruby:2.5-alpine


Gemfileを作る

docker run --rm -v (pwd):/usr/src/myapp -w /usr/src/myapp ruby:2.5-alpine bundle init

Gemfile内のrailsの行のコメントアウトを外します。

# frozen_string_literal: true

source "https://rubygems.org"

git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

gem "rails"


Dockerイメージを作る

Railsは依存ライブラリが多いのでDockerfileを作って、依存ライブラリ入りのイメージを作ります。

次の内容をDockerfileとして保存します。

FROM ruby:2.5-alpine

ENV BUILD_PACKAGES="curl-dev ruby-dev build-base" \
DEV_PACKAGES="zlib-dev libxml2-dev libxslt-dev tzdata yaml-dev sqlite-dev" \
RUBY_PACKAGES="ruby-json yaml"

# Update and install base packages and nokogiri gem that requires a
# native compilation
RUN apk update && \
apk upgrade && \
apk add --no-cache --update\
$BUILD_PACKAGES \
$DEV_PACKAGES \
$RUBY_PACKAGES && \
mkdir -p /usr/src/myapp

# Copy the app into the working directory. This assumes your Gemfile
# is in the root directory and includes your version of Rails that you
# want to run.
WORKDIR /usr/src/myapp
COPY Gemfile /usr/src/myapp
COPY Gemfile.lock /usr/src/myapp

RUN gem install bundler
RUN bundle config build.nokogiri --use-system-libraries && \
bundle install --jobs=4 --retry=10 --clean

Gemfile.lockをコピーするので、空ファイルを用意します。

touch Gemfile.lock

dockerイメージを作成します。

docker build -t temp .


Railsをインストール

docker run --rm -v (pwd):/usr/src/myapp temp bundle


Rails new

docker run --rm -v (pwd):/usr/src/myapp temp rails

で、railsコマンドのオプションの説明が表示されます。

良さげなオプションを選択します。

ここでは-MCTBS --skip-yarn --skip-turbolinks --skip-bundle --apiを指定することにします。

docker run --rm -v (pwd):/usr/src/myapp temp rails new . -f -MCTBS --skip-yarn --skip-turbolinks --skip-bundle --api


起動確認

Gemfileを更新され、依存Gemが追加されたので、Dockerイメージを作り直します。

docker build -t temp .

Ruby on Railsを起動します。

docker run --rm -it -v (pwd):/usr/src/myapp -p 80:3000 temp bin/rails s -b 0.0.0.0

ブラウザで http://localhost/ を開きます。

スクリーンショット 2018-07-11 17.35.41.png

が開いたら成功です!