Docker를 사용하여 Rails6 환경을 구축하는 방법

이번에는 개발 환경에서 Docker를 사용하여 Rails6의 환경 구축을하는 방법을 소개합니다.
각각의 파일이나 단어의 의미등의 해설은 하고 있지 않으므로, 자세한 해설은 Docker를 사용하여 Ruby on Rails의 환경을 구축하는 방법 (Docker 초학자 용) 를 봐 주세요.
(※ Rails5의 환경 구축 방법입니다)

환경


  • MacOS
  • Docker 20.10.6
  • docker-compose 1.29.1
  • Ruby 3.0.1
  • Rails 6.1.0
  • MySQL 5.7

  • 전제


  • DockerDocker compose 설치를 완료하십시오
  • 다음 설명의 myapp 부분은 자신의 응용 프로그램 이름으로 바꿉니다

  • 애플리케이션 작업 디렉토리 만들기


    mkdir 에서 작업 디렉토리를 만듭니다.
    $ mkdir myapp
    

    필요한 파일 준비



    파일 구성은 다음과 같습니다.
    myapp
      |-- Dockerfile
      |-- docker-compose.yml
      |-- Gemfile
      |-- Gemfile.lock
    

    그러면 방금 만든 디렉토리 안에 다음의 각 파일을 작성해 갑니다.

    ① Gemfile



    Gemfile
    source 'https://rubygems.org'
    gem 'rails', '>= 6.1.0'
    

    ② Gemfile.lock



    Gemfile.lock

    Gemfile.lock 의 내용은 하늘에서 OK입니다.

    ③ Dockerfile



    Dockerfile
    FROM ruby:3.0.1
    
    RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
        echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
    # yarnをインストールするための準備
    
    RUN apt-get update -qq && \
        apt-get install -y build-essential \
                           libpq-dev \
                           nodejs \
                           default-mysql-client \
                           yarn \ # yarnをインストール
                           vim
    
    RUN mkdir /myapp
    
    WORKDIR /myapp
    
    COPY Gemfile /myapp/Gemfile
    COPY Gemfile.lock /myapp/Gemfile.lock
    
    RUN bundle install
    
    COPY . /myapp
    

    Rails6에 webpacker가 탑재되어 yarn의 설치가 필요하게 되었습니다.

    ④ docker-compose.yml



    docker-compose.yml
    version: '3'
    
    services:
      db:
        image: mysql:5.7
        environment:
          MYSQL_USER: user
          MYSQL_ROOT_PASSWORD: pass
        ports:
          - "3306:3306"
        volumes:
          - mysql_data:/var/lib/mysql
    
      web:
        build: .
        command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
        volumes:
          - .:/myapp
        ports:
          - 3000:3000
        depends_on:
          - db
    
    volumes:
      mysql_data:
    

    rails new 실행


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

    응용 프로그램의 작업 디렉터리로 이동하여 위의 docker-compose run 명령으로 rails new를 실행합니다.

    (. Rails5 때--skip-bundle 의 옵션을 붙이고, bundle install 를 건너뛰고 있었습니다만, 이번은 webpacker 의 인스톨을 해야 하기 때문에 bundle install 는 스킵 하지 않습니다.)

    docker-compose build 실행


    $ docker-compose build
    
    rails new 에서 Gemfile 가 업데이트되었으므로 bundle install 를 위해 docker-compose build 를 실행합니다.

    database.yml 편집



    /config/database.yml
    # MySQL. Versions 5.1.10 and up are supported.
    #
    # Install the MySQL driver
    #   gem install mysql2
    #
    # Ensure the MySQL gem is defined in your Gemfile
    #   gem 'mysql2'
    #
    # And be sure to use new-style password hashing:
    #   https://dev.mysql.com/doc/refman/5.7/en/password-hashing.html
    #
    default: &default
      adapter: mysql2
      encoding: utf8
      pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
      username: root
    # 以下2行を編集
      password: pass
      host: db
    
    development:
      <<: *default
      database: myapp_development
    
    # Warning: The database defined as "test" will be erased and
    # re-generated from your development database when you run "rake".
    # Do not set this db to the same as development or production.
    test:
      <<: *default
      database: myapp_test
    
    # As with config/secrets.yml, you never want to store sensitive information,
    # like your database password, in your source code. If your source code is
    # ever seen by anyone, they now have access to your database.
    #
    # Instead, provide the password as a unix environment variable when you boot
    # the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database
    # for a full rundown on how to provide these environment variables in a
    # production deployment.
    #
    # On Heroku and other platform providers, you may have a full connection URL
    # available as an environment variable. For example:
    #
    #   DATABASE_URL="mysql2://myuser:mypass@localhost/somedatabase"
    #
    # You can use this database configuration with:
    #
    #   production:
    #     url: <%= ENV['DATABASE_URL'] %>
    #
    production:
      <<: *default
      database: myapp_production
      username: myapp
      password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>
    
    password:host: 를 편집합니다.password: 에는 docker-compose.ymlMYSQL_ROOT_PASSWORD: 에 쓴 암호를 기재합니다.host: 에는 db 라고 기재합니다.

    docker-compose up -d로 컨테이너 시작


    $ docker-compose up -d
    

    데이터베이스 만들기



    다음 명령으로 데이터베이스를 작성하십시오.
    $ docker-compose exec web rails db:create
    

    localhost:3000 방문


    localhost:3000로 이동하여 다음 페이지가 표시되면 Docker로 Rails6 환경을 빌드 할 수 있습니다.


    그 후의 개발 방법은 여기 를 참고해 주세요.

    참고


  • Docker를 사용하여 Rails6 환경을 구축해보십시오.
  • 좋은 웹페이지 즐겨찾기