[Rails] [Docker] 복제품은 오케이!Docker에서 Rails 개발 환경 구축 방법

18714 단어 DockerRuby

[Rails] [Docker] 복제품은 오케이!Docker에서 Rails 개발 환경 구축 방법


카탈로그

  • 이미지 생성
  • 작업 환경, 전제 조건

  • 단계

  • STEP1. Dockerfile 만들기
  • STEP1.1 nginx Dockerfile
  • STEP1.2nginx 구성 파일
  • STEP1.3 rails의 Dockerfile
  • STEP2.puma 설정
  • STEP3.docker-compose 제작
  • STEP4. 데이터베이스 설정
  • STEP5. 컨테이너 구축
  • STEP6. 데이터베이스 만들기
  • STEP7. 확인
  • 이미지 생성


    이번에는 컨테이너 세 개를 만든다.

    작업 환경, 전제 조건


    [작업 환경]OS : macOS 10.14.6 Docker : 19.03.8 ruby : 2.6.5 rails : 5.2.4[전제 조건]
    Mac용 Docker 설치

    STEP1. Dockerfile 만들기


    먼저 Docker 폴더와 빈 파일을 만듭니다.
    문서의 내용은 뒤에 서술될 것이다.

    STEP1-1. nginx의 Dockerfile


    다음은nginx의dockerfile입니다.
    findpro-bangkok는 응용 프로그램 이름입니다. 각자의 응용 프로그램 이름으로 변경하십시오.
    Dockerfile
    
    FROM nginx:1.15.8
    
    # インクルード用のディレクトリ内を削除
    RUN rm -f /etc/nginx/conf.d/*
    
    # Nginxの設定ファイルをコンテナにコピー
    COPY /docker/nginx/nginx.conf /etc/nginx/conf.d/findpro-bangkok.conf
    
    # 画像などのpublicファイルはnginxに配置
    RUN mkdir -p /findpro-bangkok/public
    COPY ./public /findpro-bangkok/public
    
    # ビルド完了後にNginxを起動
    CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
    
    

    STEP1-2. nginx 프로필


    nginx 설정의nginx를 설명합니다.conf를 만듭니다.
    nginx.conf
    # プロキシ先の指定
    # Nginxが受け取ったリクエストをバックエンドのpumaに送信
    upstream puma {
      # ソケット通信したいのでpuma.sockを指定
      server unix:///findpro-bangkok/tmp/sockets/puma.sock;
    }
    
    server {
      listen 80 default;
      # ドメインもしくはIPを指定
      server_name localhost;
    
      access_log /var/log/nginx/access.log;
      error_log  /var/log/nginx/error.log;
    
      # ドキュメントルートの指定
      root /findpro-bangkok/public;
    
      client_max_body_size 100m;
      error_page 404             /404.html;
      error_page 505 502 503 504 /500.html;
      try_files  $uri/index.html $uri @puma;
      keepalive_timeout 5;
    
      # リバースプロキシ関連の設定
      location @puma {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_pass http://puma;
      }
    }
    
    

    STEP1-3. rails Dockerfile


    다음은 rails의 Dockerfile을 만듭니다.
    Dockerfile
    FROM ruby:2.6.5
    
    RUN apt-get update -qq && \
      apt-get install -y apt-utils \
      build-essential \
      libpq-dev \
      nodejs \
      vim
    
    #各自のアプリ名に変更する
    ENV RAILS_ROOT /findpro-bangkok
    
    RUN mkdir $RAILS_ROOT
    WORKDIR $RAILS_ROOT
    
    COPY Gemfile Gemfile
    COPY Gemfile.lock Gemfile.lock
    RUN gem install bundler:2.1.4
    RUN bundle install
    
    #プロジェクトフォルダ内のすべてのファイルをRailsコンテナ内にコピーする
    COPY . .
    
    #ソケット通信のためのディレクトリを作成
    RUN mkdir -p tmp/sockets
    
    

    STEP2.puma 설정


    다음 config 폴더에 있는puma의 설정 파일을 편집합니다.
    *puma 폴더는 생산용 폴더이기 때문에 이번에는 파란색puma입니다.편집 rb.

    puma.rb
    threads_count = ENV.fetch('RAILS_MAX_THREADS') { 5 }.to_i
    threads threads_count, threads_count
    port        ENV.fetch('PORT') { 3000 }
    environment ENV.fetch('RAILS_ENV') { 'development' }
    plugin :tmp_restart
    
    app_root = File.expand_path('..', __dir__)
    bind "unix://#{app_root}/tmp/sockets/puma.sock"
    
    stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log", true
    

    STEP3.docker-compose 제작


    docker-compose는 여러 용기의 구축을 모아 실행하는 구조입니다.
    프로젝트 폴더 바로 아래에docker-compose 파일을 만듭니다.

    docker-compose.yml
    version: '3'
    volumes:
      tmp_data:
      public_data:
    services:
      nginx:
        build:
          context: ./
          dockerfile: ./docker/nginx/Dockerfile
        ports:
          - '80:80'
        volumes:
          - public_data:/findpro-bangkok/public
          - tmp_data:/findpro-bangkok/tmp/sockets
        depends_on:
          - app
        links:
          - app
      app:
        build:
          context: ./
          dockerfile: ./docker/rails/Dockerfile
        command: bundle exec puma
        volumes:
         #.:/findpro-bangkokでプロジェクトのカレントフォルダとコンテナのフォルダを同期しています.これによって変更した箇所を再度ビルドすることなく、コンテナに反映することができます.
          - .:/findpro-bangkok:cached
          #nginxとsocket通信するためにホストコンピュータ上にtmp_dataというファイルを作成し、nginxコンテナと共有しています.
          - tmp_data:/findpro-bangkok/tmp/sockets
          - public_data:/findpro-bangkok/public
        tty: true
        stdin_open: true
      db:
        image: postgres
        volumes:
          - ./tmp/db:/var/lib/postgresql/data
        environment:
          POSTGRES_PASSWORD: 'postgres'
    

    STEP4. 데이터베이스 설정


    마지막으로 데이터베이스.yml로 데이터베이스를 설정합니다.
    이번에는 개발 환경을 위해 개발까지의 설정 내용을 기재합니다.

    *test와production의 기술은 아래에 있으니 삭제하지 마십시오.
    # PostgreSQL. Versions 9.1 and up are supported.
    #
    # Install the pg driver:
    #   gem install pg
    # On OS X with Homebrew:
    #   gem install pg -- --with-pg-config=/usr/local/bin/pg_config
    # On OS X with MacPorts:
    #   gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config
    # On Windows:
    #   gem install pg
    #       Choose the win32 build.
    #       Install PostgreSQL and put its /bin directory on your path.
    #
    # Configure Using Gemfile
    # gem 'pg'
    #
    default: &default
      adapter: postgresql
      encoding: unicode
      host: db
      port: 5432
      username: postgres
      password: postgres
      pool: 5
    
      # For details on connection pooling, see Rails configuration guide
      # http://guides.rubyonrails.org/configuring.html#database-pooling
      pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
    
    development:
      <<: *default
      database: findpro-bangkok_development
    
    ###以下省略
    
    

    STEP5. 컨테이너 구축


    그럼 드디어 만들어진 용기를 가동할 거예요.
    먼저 터미널에서 프로젝트 폴더로 이동하여 다음 명령을 실행합니다.
    [JS-MAC findpro-bangkok]$ docker-compose build
    
    구축에 성공하면 다음 명령을 실행합니다.
    [JS-MAC findpro-bangkok]$ docker-compose up
    

    STEP6. 데이터베이스 만들기


    마지막으로 데이터베이스를 만들어야 하기 때문에.
    다른 새 터미널을 시작하고 Rails 컨테이너로 들어갑니다.
    [@JS-MAC findpro-bangkok]$ docker ps #Railsコンテナ(findpro-bangkok_app)のIDを確認
    CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                NAMES
    4549423f21ed        findpro-bangkok_nginx   "/bin/sh -c '/usr/sb…"   44 minutes ago      Up 3 seconds        0.0.0.0:80->80/tcp   findpro-bangkok_nginx_1
    22ecc47308ae        findpro-bangkok_app     "bundle exec puma"       44 minutes ago      Up 5 seconds                             findpro-bangkok_app_1
    755cb83a9bf4        postgres                "docker-entrypoint.s…"   44 minutes ago      Up 5 seconds        5432/tcp             findpro-bangkok_db_1
    [@JS-MAC findpro-bangkok]$ docker exec -it 22e /bin/sh #Railsコンテナにログインする.22eはappコンテナのIDの頭文字です.
    # rails db:create #データベースを作成する.
    Database 'findpro-bangkok_development' already exists
    Database 'findpro-bangkok_test' already exists
    # rails db:migrate #マイグレーションを実行する.
    

    STEP7. 확인


    마지막으로 크롬으로 localhost를 확인합니다.

    좋은 웹페이지 즐겨찾기