호스트 환경의 Ruby를 사용하지 않고 Docker를 사용하여 Rails new

제목



호스트 환경의 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
    
    Gemfilerails 의 행의 코멘트 아웃을 제외합니다.
    # 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/을 엽니다.



    열면 성공입니다!

    좋은 웹페이지 즐겨찾기