Ruby를 설치하지 않고 Docker를 사용하여 Rails 환경 구축

9832 단어 DockerRails
(20/03/109:00 Rails6 보완)

개시하다


몇 년에 한 번 액세스하는 PC 교체
매번 로컬 PC에 루비(rbenv 같은 것)를 설치하고 싶지 않은 것을 계기로 삼았다.

컨디션


macOS Mojava 10.14.6
Docker 19.03.5
Compose 1.25.4

Docker를 사용한 Rails 환경 구축 단계


적절한 항목 디렉토리를 만들고 Docker file을 구성합니다.
$ mkdir project_name
$ cd project_name
Rails5 버전
Dockerfile
FROM ruby:2.6.3
ENV LANG C.UTF-8
ENV APP_ROOT /usr/src/app
RUN apt-get update -qq && \
    apt-get install -y vim nodejs \
                       mariadb-client \
                       --no-install-recommends && \
    rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/* /tmp/* /var/tmp/*
WORKDIR $APP_ROOT
COPY Gemfile Gemfile.lock $APP_ROOT/
RUN \
  echo 'gem: --no-document' >> ~/.gemrc && \
  cp ~/.gemrc /etc/gemrc && \
  chmod uog+r /etc/gemrc && \
  bundle config --global build.nokogiri --use-system-libraries && \
  bundle config --global jobs 4 && \
  bundle install && \
  rm -rf ~/.gem
COPY . $APP_ROOT
Rails6 버전
Dockerfile
FROM ruby:2.7.0
ENV LANG C.UTF-8
ENV DEBCONF_NOWARNINGS yes
ENV YARN_VERSION 1.22.4
ENV APP_ROOT /usr/src/app
RUN apt-get update -qq && \
    apt-get install -y vim nodejs \
                       mariadb-client \
                       --no-install-recommends && \
    rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/* /tmp/* /var/tmp/*
WORKDIR $APP_ROOT
COPY Gemfile Gemfile.lock $APP_ROOT/

RUN curl -L --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" > /tmp/yarn.tar.gz && \
  tar -xzf /tmp/yarn.tar.gz -C /opt && \
  ln -s /opt/yarn-v$YARN_VERSION/bin/yarn /usr/local/bin/yarn && \
  ln -s /opt/yarn-v$YARN_VERSION/bin/yarnpkg /usr/local/bin/yarnpkg && \
  rm /tmp/yarn.tar.gz

RUN \
  echo 'gem: --no-document' >> ~/.gemrc && \
  cp ~/.gemrc /etc/gemrc && \
  chmod uog+r /etc/gemrc && \
  bundle config --global build.nokogiri --use-system-libraries && \
  bundle config --global jobs 4 && \
  bundle install && \
  rm -rf ~/.gem
COPY . $APP_ROOT
나는 Docker file이 여러 방면에서 매우 신경을 쓰기 때문에 각자의 작법이 비교적 좋다고 생각한다.
다음은 docker-compose입니다.yml을 생성합니다.
docker-compose.yml
version: '3'
services:
  web:
    build: .
    environment:
      RAILS_ENV: development
      TZ: Asia/Tokyo
    ports:
      - '3000:3000'
    volumes:
      - .:/usr/src/app
    depends_on:
      - database
  database:
    image: mysql:8.0.14
    environment:
       MYSQL_ROOT_PASSWORD: password
    ports:
      - '3306:3306'
    volumes:
      - mysql-data:/var/lib/mysql
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_bin --default-authentication-plugin=mysql_native_password
volumes:
  mysql-data:
    driver: local
나는 Compose 파일에도 많은 주의가 있다고 생각하기 때문에 각자의 문법에 따라 처리한다.
중점으로 삼다
  • 웹 서버에 Timezone 설정
  • MySQL8.0 인증 방법caching_sha2_password 대응
  • 마지막은 Gemfile과 하늘의 Gemfile입니다.lock 파일을 만듭니다.
    Gemfile
    source 'https://rubygems.org'
    gem 'rails', '5.2.3'
    
    그림을 만들 준비가 되었습니다.
    $ docker-compose build
    
    그림을 만든 후 new 명령을 사용하여 rails의 초기 모양을 만듭니다.
    $ docker-compose run --rm web rails new . --skip-test --skip-bundle --skip-turbolinks --skip-action-mailer --skip-coffee --skip-action-cable --skip-active-storage --database=mysql
    
    Overwrite /usr/src/app/Gemfile? (enter "h" for help) [Ynaqdhm]Gemfile의 Conflict가 감지되었으니 주저하지 말고 Y를 입력하세요!
    rails의 초기 형태가 나타났기 때문에 기본적으로 설정된 DB 정보를 고칩니다.
    database.yml
    default: &default
      adapter: mysql2
      encoding: utf8
      pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
      username: root
      password: password
    - host: localhost
    + host: database
    
    Docker file의 끝에 rails 서버를 실행합니다.
    Dockerfile
    CMD ["rails", "server", "-b", "0.0.0.0"]
    
    마지막으로 구축을 진행하고 DB를 만들면 (Rails6이면 웹 패키지를 설치합니다) docker를 시작하면 끝납니다.
    $ docker-compose build
    $ docker-compose run --rm web rails db:create
    
    # Rails6以降はwebpackのインストールも実行
    $ docker-compose run --rm web rails webpacker:install
    
    $ docker-compose up -d
    

    참고 문장


    Docker를 사용하여 Rails 응용 프로그램을 개발하려면

    좋은 웹페이지 즐겨찾기