【Rails】기존의 Rails6 프로젝트에 Docker를 도입해 본다

소개



기존 Rails 프로젝트를 Docker에 올려 갑니다.
초학자에 의한 기사이므로 실수 등 있으시면 지적하실 수 있으면 다행입니다.
※본 기사는 개발 환경만의 도입을 대상으로 하고 있습니다.

참고



Docker가 무엇인지 전혀 모른다! 라고 하는 분은 우선은 아래의 기사를 참고로 Docker를 접해 봐 주세요.
Docker를 Mac에 설치
이 기사도 손쉽게 Docker를 살짝 이해하는데 추천합니다.
Docker에 대해 가능한 한 이해하기 쉽습니다.

환경


  • macOS Catalina 10.15.7
  • Ruby 2.6.5
  • Rails 6.0.3.3
  • Docker 19.03.13
  • docker-compose 1.27.4
  • MySQL 5.6.47

  • 목차


  • 필요한 파일 만들기
  • 파일 구성

  • 만든 파일 편집
  • 컨테이너 시작

  • 필요한 파일 만들기



    필요한 파일은 다음 5개입니다. rails new를 했을 때에 자동 생성되는 파일도 있으므로 필요한 것만 작성해 갑시다.
  • Dockerfile
  • docker-compose.yml
  • Gemfile
  • Gemfile.lock
  • database.yml

  • 파일 구성


    既存のアプリケーション名
    └── app
         ├── Dockerfile  # 作成
         ├── docker-compose.yml  # 作成
         ├── Gemfile
         ├── Gemfile.lock
         ├── config
              └──database.yml
    

    만든 파일 편집



    Dockerfile



    Dockerfile
    
    FROM ruby:2.6.5   #自身のrubyバージョンを指定 (ruby -v)
    
    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
    
    RUN apt-get update && apt-get install -y --no-install-recommends\
        nodejs \
        yarn \
        mariadb-client  \
        build-essential  \
        && apt-get clean \
        && rm -rf /var/lib/apt/lists/*
    
    WORKDIR /myproject
    
    COPY Gemfile /myproject/Gemfile
    COPY Gemfile.lock /myproject/Gemfile.lock
    
    RUN gem install bundler
    RUN bundle install
    RUN yarn install --check-files
    
    COPY . /myproject
    

    Rails6에서 webpacker가 표준이 되었기 때문에 yarn의 설치가 필요하게 됩니다.
    Docker Hub 에서 확인하면 ruby의 이미지는 데비안계이므로 yarn 공식 문서 에 기재되어 있는 OS 마다의 인스톨 방법을 참고로 기술해 갑니다.
    덧붙여서, yarn의 공식 문서는 일본어 표시의 그대로라고 왠지 OS의 선택사항 안에 Mac과 Windows 밖에 표시해 주므로 영어 표시로 전환해 확인합시다.

    일본어 표시

    영어 표시


    docker-compose.yml



    docker-compose.yml
    version: '3'
    
    services:
      db:   #データベースのコンテナ作成
        image: mysql:5.7   #自身のmysqlバージョンを指定 (mysql --version)
        command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
        ports: 
          - '3306:3306'
        volumes:
          - mysql-data:/var/lib/mysql 
        environment:
          MYSQL_DATABASE: myapp_development   #プロジェクト名_development
          MYSQL_ROOT_PASSWORD: password
          MYSQL_USER: root
          MYSQL_PASSWORD: password
    
      web:   #アプリケーションのコンテナ作成
        build:
          context: .
          dockerfile: Dockerfile
        command: bundle exec rails s -p 3000 -b '0.0.0.0'
        tty: true 
        stdin_open: true
        depends_on:
          - db
        ports:
          - "3000:3000"
        volumes:
          - .:/myproject
    volumes:      #dbを永続化するための記述
      mysql-data:
    

    Gemfile



    Gemfile
    source 'https://rubygems.org'
    gem 'rails', '~>6.0.0'
    

    기존 어플리케이션의 경우 이 기술은 이미 있을 것입니다만 만약을 위해 확인해 둡시다.

    database.yml



    database.yml
    default: &default
      adapter: mysql2
      encoding: utf8
      pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
      username: root   #docker-compose.ymlで指定したユーザー名
      password: password   #docker-compose.ymlで指定したパスワード
    
    development:
      <<: *default
      database: myapp_development   #プロジェクト名_development
      host: db   #docker-compose.ymlでデータベースのコンテナ作成部分で指定したservice名
    
    test:
      <<: *default
      database: myapp_test   #プロジェクト名_test
      host: db   #docker-compose.ymlでデータベースのコンテナ作成部分で指定したservice名
    

    응용 프로그램 컨테이너에서 데이터베이스 컨테이너에 연결하기위한 설정을 설명합니다.
    보안 측면을 신경 쓰려면 username과 password에 환경 변수를 설정합시다. 이번에는 개발 환경만이라고 하는 것도 있어 설정하고 있지 않습니다.

    컨테이너 시작



    터미널
    cd myapp
    docker-compose build    #コンテナを建てる
    docker-compose up -d   #コンテナ起動(-dオプションをつけることでバックグラウンドで実行)
    

    이제 localhost:3000 에 액세스하면 페이지가 표시됩니다◎
  • 오류가 발생하면

  • 터미널
    docker-compose logs -f
    

    로 실시간으로 로그를 확인할 수 있으므로 오류 원인을 찾아 해결합시다.
  • 서버를 중지하려면 다음 명령을 실행하십시오.

  • 터미널
    docker-compose down
    

    마지막으로



    구현에 생각의 외수간 찍었으므로 비망록적으로 기사로 해 보았습니다.
    누군가의 참고가 되면 다행입니다.

    좋은 웹페이지 즐겨찾기