LoginSignup
8
4

More than 3 years have passed since last update.

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

Last updated at Posted at 2018-07-11

お題

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

環境

  • fish-shell version 3.0.1
  • Docker Desktop 2.1.0.3 (38240)
  • ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux-musl]
  • Rails 6.0.0

手順

RubyのDockerイメージを取得

docker pull 2.6.5-alpine3.10

Gemfileを作る

docker run --rm -v (pwd):/usr/src/myapp -w /usr/src/myapp 2.6.5-alpine3.10 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 2.6.5-alpine3.10

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/ を開きます。

スクリーンショット 2019-10-16 16.09.47.png

が開いたら成功です!

8
4
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
8
4