Ruby on Rails 개발 환경을 Docker로 구축하는 방법 (Rails 6.x)

Docker 공식 절차 을 참고로, Rails 6계에서 Docker의 개발 환경을 구축하는 순서를 상세하게 합니다.

각 명령에 대한 자세한 해설은 내가 이전에 쓴 Rails 5 계에서의 순서 에서 해설하고 있으므로, 이 기사에서는 생략합니다.

파일 준비



작업 디렉터리를 만들고 다음 다섯 개의 파일을 만듭니다.
  • Dockerfile
  • docker-compose.yml
  • Gemfile
  • Gemfile.lock
  • entrypoint.sh

  • Dockerfile
    FROM ruby:2.7.0
    
    ## nodejsとyarnはwebpackをインストールする際に必要
    # yarnパッケージ管理ツールをインストール
    RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
    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 && \
    apt-get update && apt-get install -y yarn
    
    RUN apt-get update -qq && apt-get install -y nodejs yarn
    RUN mkdir /myapp
    WORKDIR /myapp
    COPY Gemfile /myapp/Gemfile
    COPY Gemfile.lock /myapp/Gemfile.lock
    RUN bundle install
    COPY . /myapp
    
    RUN yarn install --check-files
    RUN bundle exec rails webpacker:compile
    
    # Add a script to be executed every time the container starts.
    COPY entrypoint.sh /usr/bin/
    RUN chmod +x /usr/bin/entrypoint.sh
    ENTRYPOINT ["entrypoint.sh"]
    EXPOSE 3000
    
    # Start the main process.
    CMD ["rails", "server", "-b", "0.0.0.0"]
    

    docker-compose.yml
    version: '3'
    services:
      db:
        image: mysql:5.7
        environment:
          MYSQL_ROOT_PASSWORD: password
          MYSQL_DATABASE: root
        ports:
          - "3306:3306"
        volumes:
          - ./tmp/db:/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
    

    Gemfile
    source 'https://rubygems.org'
    gem 'rails', '6.0.3'
    

    Gemfile.lock (빈 파일)
    
    

    entrypoint.sh
    #!/bin/bash
    set -e
    
    # Remove a potentially pre-existing server.pid for Rails.
    rm -f /myapp/tmp/pids/server.pid
    
    # Then exec the container's main process (what's set as CMD in the Dockerfile).
    exec "$@"
    

    Rails 프로젝트 만들기


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

    컨테이너 빌드


    $ docker-compose build
    

    데이터베이스 파일 수정



    위의 실행 후 config/database.yml 파일을 아래와 같이 완전히 수정합니다.

    config/database.yml
    default: &default
      adapter: mysql2
      encoding: utf8mb4
      pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
      username: root
      password:
      host: localhost
    
    development:
      <<: *default
      database: myapp_development
      host: db
      username: root
      password: password
    
    test:
      <<: *default
      database: myapp_test
      host: db
      username: root
      password: password
    

    데이터베이스 만들기


    $ docker-compose run web rails db:create
    

    Webpacker 설치



    Rails 6 시스템에서 Webpacker가 필요하기 때문에 웹 서버 컨테이너에 webpacker를 설치합니다.
    $ docker-compose run web rails webpacker:install 
    

    docker-compose로 컨테이너 시작


    $ docker-compose up -d
    

    액세스하여 시작 확인



    브라우저에서 localhost:3000으로 이동하여 Rails 초기 화면이 표시되는지 확인합니다.



    컨테이너 중지



    검증을 끝내고 컨테이너를 정지시킬 때도 docker-compose 를 사용합니다.
    $ docker-compose down
    

    좋은 웹페이지 즐겨찾기