[Rails] [Docker] 복제품은 오케이!Docker에서 Rails 개발 환경 구축 방법
[Rails] [Docker] 복제품은 오케이!Docker에서 Rails 개발 환경 구축 방법
카탈로그
단계
STEP1. Dockerfile 만들기
이미지 생성
이번에는 컨테이너 세 개를 만든다.
작업 환경, 전제 조건
[작업 환경]
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를 확인합니다.
Reference
이 문제에 관하여([Rails] [Docker] 복제품은 오케이!Docker에서 Rails 개발 환경 구축 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/j-sunaga/items/3712867e2f8578e35d2e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)