Rails6+Nginx+MySQL의 Docker 개발 환경을 자동으로 구축하는 셸 스크립트를 만들어 보았습니다.
입문
제목과 같이 Rails6는 Docker의 컨테이너에서 실행됩니다.
나는 개발 환경을 자동으로 구축할 수 있는 케이스 스크립트를 만들어 보았다.
폴더 및 Docker 파일도 스크립트에서 생성
Docker와 docker-compose를 가져오면 어떤 환경에서도 명령으로 구축할 수 있다고 생각합니다.
(대략...)
내 자신의 환경은 다음과 같다.
OS
환경
Windows 10 Home 64bit
Ubuntu 18.04(WSL2)
구축할 환경
다음 설정은docker에서 실행되며, 목표는 로컬에서 초기 화면을 볼 수 있는 것입니다.
항목
활용단어참조
버전
언어
ruby
2.6.6
프레임 구조
rails
6.0.2
데이터베이스
MySQL
8.0
네트워크 서버
Nginx
1.17.10
AP 서버
puma
4.3.5
용기 구조는 다음과 같다.
앱 컨테이너
ruby
rails
puma
db 용기
MySQL
웹 용기
Nginx
할 수 있는 일
나는 먼저 실제로 할 수 있는 일을 제시한 후에 내용을 기재하고 싶다.
케이스 내용
이번에 제작된 케이스 각본은 다음과 같다.
길기 때문에 GitHub를 드리는 게 좋을 것 같은데 여기 많이 적어놨어요(^^;
docker_rails_template.sh#!/bin/bash
####################################################
# 以下環境をdockerで構築するためのシェルスクリプト #
# プログラミング言語:Ruby / Ruby on rails #
# データベース :mysql #
# webサーバ :Nginx #
####################################################
RUBY_VERSION="2.6.6"
RAILS_VERSION="6.0.2"
MYSQL_VERSION="8.0"
NGINX_VERSION="1.17.10"
APP_ADDLESS="app"
if [ $# != 1 ]; then
echo "引数の指定が間違っています。"
echo "ex: $0 sample"
exit 1
fi
APP_NAME=$1
APP_DIR=`pwd`/${APP_NAME}
# 作業フォルダを作成
echo "----- Make working directories -----"
echo "mkdir -p ${APP_DIR}"
mkdir -p ${APP_DIR}
cd ${APP_DIR}
echo ""
# Dockerfile 配置用のフォルダを作成
echo "----- Make docker directories -----"
echo "mkdir -p docker/app"
mkdir -p docker/app
echo "mkdir -p docker/web"
mkdir -p docker/web
echo ""
# ソースコード配置用のフォルダを作成
echo "----- Make source directories -----"
echo "mkdir -p src/tmp/sockets"
mkdir -p src/tmp/sockets
echo ""
# 各種ファイル作成
echo "----- Make source directories -----"
# app用のDockerfile 作成
echo "make app Dockerfile"
cat << EOF > docker/app/Dockerfile
FROM ruby:${RUBY_VERSION}
RUN apt-get update -y && apt-get install -y default-mysql-client nodejs npm && \
npm install -g -y yarn
RUN mkdir /myapp
WORKDIR /myapp
COPY ./src/Gemfile Gemfile
COPY ./src/Gemfile.lock Gemfile.lock
RUN bundle install
COPY ./src /myapp
EOF
# web用のDockerfile 作成
echo "make web Dockerfile"
cat << EOF > docker/web/Dockerfile
FROM nginx:${NGINX_VERSION}
RUN rm -f /etc/nginx/conf.d/*
COPY ./docker/web/${APP_NAME}.conf /etc/nginx/conf.d/${APP_NAME}.conf
CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
EOF
# Gemfile 作成
echo "make Gemfile"
cat << EOF > src/Gemfile
source 'https://rubygems.org'
gem 'rails', '${RAILS_VERSION}'
EOF
# Gemfile.lock 作成
echo "make Gemfile"
touch ${APP_DIR}/src/Gemfile.lock
# nginx.conf 作成
echo "make ${APP_NAME}.conf"
cat << EOF > docker/web/${APP_NAME}.conf
upstream ${APP_NAME} {
server unix:///myapp/tmp/sockets/puma.sock;
}
server {
listen 80;
server_name ${APP_ADDLESS};
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
root /myapp/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 @${APP_NAME};
keepalive_timeout 5;
location @${APP_NAME} {
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://${APP_NAME};
}
}
EOF
# docker-compose.yml 作成
echo "make docker-compose.yml"
cat << EOF > docker-compose.yml
version: '3'
volumes:
db_data:
services:
db:
image: mysql:${MYSQL_VERSION}
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: password
volumes:
- db_data:/var/lib/mysql
ports:
- 3306:3306
app:
build:
context: .
dockerfile: ./docker/app/Dockerfile
command: bundle exec puma -C config/puma.rb
volumes:
- ./src:/myapp
depends_on:
- db
web:
build:
context: .
dockerfile: ./docker/web/Dockerfile
volumes:
- ./src/public:/myapp/public
- ./src/tmp:/myapp/tmp
ports:
- 80:80
depends_on:
- app
EOF
echo ""
# rails new 実行
echo "----- Set application -----"
echo "docker-compose run app rails new . --force --database=mysql"
docker-compose run app rails new . --force --database=mysql
# database.yml を編集
echo "edit database.yml"
cat src/config/database.yml | sed 's/password:$/password: password/' | sed 's/host: localhost/host: db/' > __tmpfile__
cat __tmpfile__ > src/config/database.yml
rm __tmpfile__
# puba.rb を編集
cat << EOF > src/config/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("../..", __FILE__)
bind "unix://#{app_root}/tmp/sockets/puma.sock"
stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log", true
EOF
echo ""
echo "----- container start -----"
# イメージをビルド
echo "docker-compose build"
docker-compose build
# 初回マイグレーション
echo "docker-compose run app rails db:create"
docker-compose run app rails db:create
# 一度コンテナをリセット
echo "docker-compose down"
docker-compose down
# コンテナ起動
echo "docker-compose up"
docker-compose up
실행 결과
적절한 위치에서 다음 명령을 수행합니다.
매개 변수로 전달sample
은 만들고 싶은 응용 프로그램의 이름입니다.sudo ./docker_rails_template_ver1.0.sh sample
완성하는데 10분 정도 걸립니다.
다음 상태일 때 완료합니다.app_1 | * Listening on tcp://0.0.0.0:3000
app_1 | * Listening on unix:///myapp/tmp/sockets/puma.sock
app_1 | Use Ctrl-C to stop
브라우저에서localhost에 접근해 보십시오.
그냥 rails라면 ポート3000
방문이 많아요.
이번에는 웹 서버(Nginx), ポート80
를 통해 받아들여지기 때문에 포트를 지정하지 않고 접근할 수 있습니다.
잘 나오면 완성이야.
다만, 버전을 조금만 만지면 어디서 넘어질 수 있으니 주의하세요.
이런 상황에서는 성실하게 일할 수밖에 없다...(^^;
셸 내용 정보
셸 스크립트에 댓글을 달았지만 내부에서 진행된 일을 보충하고 싶습니다.
보충할 수 없는 부분과 상세한 처리 내용을 신경 쓰는 사람은 최하부에 열거한 참고 보도를 참조하세요.
폴더 계층
호스트 측 폴더 계층은 다음과 같습니다.
루트 디렉토리에 배치된 docker-compose.yml
에서 dockerフォルダ
에 속하는 Dockerfile을 찾아 컨테이너 생성 등을 수행합니다.
이 밖에 rails의 원본 코드는 src
에 저장되어 있다.
이 src
폴더는 앱 컨테이너와의 공유 볼륨으로 사용됩니다.sample
├── docker
│ ├── app
│ │ └── Dockerfile
│ └── web
│ └── Dockerfile
├── docker-compose.yml
└── src
src 폴더 생성 정보
# ソースコード配置用のフォルダを作成
echo "----- Make source directories -----"
echo "mkdir -p src/tmp/sockets"
mkdir -p src/tmp/sockets
echo ""
src 폴더 생성 중 src/tmp/sockets
까지 폴더를 만드는 이유를 추가합니다.
응용 서버는 puma
를 사용하지만,puma가 시작될 때 src/tmp/sockets/puma.sock
파일을 자동으로 생성합니다.
하지만 자동으로 생성될 때 폴더 차원이 생성되지 않기 때문에 미리 만들었습니다.
응용 프로그램 Docker 파일 정보
ruby + rails6 + puma
의 컨테이너용 Docker 파일입니다.rails6
반드시 설치webpacker
해야 하며, 이와 동시에 yarn
가 필요합니다. 주의하십시오.
nginx.conf 생성 정보
Nginx용 설정 파일이 됩니다.
upstrem에서 찍은 사진///myapp/tmp/sockets/puma.sock
은 앱 용기 내의puma와 합작한 부분이다.
웹 용기ポート80
에서 요청을 받아 앱 용기에 연결합니다.
docker-compose.yml 생성 정보
docker-compose에서 데이터베이스 용기, 앱 용기, 웹 용기를 조작하는 데 사용되는 파일입니다.
db 용기/var/lib/mysql
에서docker의local 볼륨db_data
을 영구 볼륨으로 마운트합니다.
비밀번호가 번거롭기 때문에 "password"로 고정합니다.
앱 컨테이너/myapp
마운트 호스트 측면src
.
시작할 때마다 다음 명령으로 웹 용기를 받아들이기 시작합니다.bundle exec puma -C config/puma.rb
동시에db용기depends_on
와 관련됩니다.
웹 용기src
내 폴더를 불러옵니다. 기본 디스플레이용 html와 콘센트 통신용puma입니다.앱 용기와 sock을 공유합니다.
포트 수락 80.
후속 처리 정보
이후 실행rails new
, 생성된 파일을 편집한 후 이미지 구축 → 용기 실행.(잡다)src
호스트 측에서 응용 프로그램의 원본을 편집할 수 있기 때문에 매번 이미지 구축을 할 필요가 없고 개발 환경에 사용할 수 있다.
위에서 말한 바와 같이 참고할 만한 것이 있으면 좋겠다.
참고문
아래의 보도를 참고하도록 허락해 주십시오.감사합니다 m(__)m
지나치게 신중한 Docker-compose를 사용하여 rails5+MySQL on Docker 환경(Docker for Mac)을 구축합니다.
Rails+PostgreSQL+Docker+AWS에서 생성된 포트폴리오 정보
docker-compose 명령 요약
Reference
이 문제에 관하여(Rails6+Nginx+MySQL의 Docker 개발 환경을 자동으로 구축하는 셸 스크립트를 만들어 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/junichiro-watanabe/items/17523ace7d425e192607
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
다음 설정은docker에서 실행되며, 목표는 로컬에서 초기 화면을 볼 수 있는 것입니다.
항목
활용단어참조
버전
언어
ruby
2.6.6
프레임 구조
rails
6.0.2
데이터베이스
MySQL
8.0
네트워크 서버
Nginx
1.17.10
AP 서버
puma
4.3.5
용기 구조는 다음과 같다.
앱 컨테이너
ruby
rails
puma
db 용기
MySQL
웹 용기
Nginx
할 수 있는 일
나는 먼저 실제로 할 수 있는 일을 제시한 후에 내용을 기재하고 싶다.
케이스 내용
이번에 제작된 케이스 각본은 다음과 같다.
길기 때문에 GitHub를 드리는 게 좋을 것 같은데 여기 많이 적어놨어요(^^;
docker_rails_template.sh#!/bin/bash
####################################################
# 以下環境をdockerで構築するためのシェルスクリプト #
# プログラミング言語:Ruby / Ruby on rails #
# データベース :mysql #
# webサーバ :Nginx #
####################################################
RUBY_VERSION="2.6.6"
RAILS_VERSION="6.0.2"
MYSQL_VERSION="8.0"
NGINX_VERSION="1.17.10"
APP_ADDLESS="app"
if [ $# != 1 ]; then
echo "引数の指定が間違っています。"
echo "ex: $0 sample"
exit 1
fi
APP_NAME=$1
APP_DIR=`pwd`/${APP_NAME}
# 作業フォルダを作成
echo "----- Make working directories -----"
echo "mkdir -p ${APP_DIR}"
mkdir -p ${APP_DIR}
cd ${APP_DIR}
echo ""
# Dockerfile 配置用のフォルダを作成
echo "----- Make docker directories -----"
echo "mkdir -p docker/app"
mkdir -p docker/app
echo "mkdir -p docker/web"
mkdir -p docker/web
echo ""
# ソースコード配置用のフォルダを作成
echo "----- Make source directories -----"
echo "mkdir -p src/tmp/sockets"
mkdir -p src/tmp/sockets
echo ""
# 各種ファイル作成
echo "----- Make source directories -----"
# app用のDockerfile 作成
echo "make app Dockerfile"
cat << EOF > docker/app/Dockerfile
FROM ruby:${RUBY_VERSION}
RUN apt-get update -y && apt-get install -y default-mysql-client nodejs npm && \
npm install -g -y yarn
RUN mkdir /myapp
WORKDIR /myapp
COPY ./src/Gemfile Gemfile
COPY ./src/Gemfile.lock Gemfile.lock
RUN bundle install
COPY ./src /myapp
EOF
# web用のDockerfile 作成
echo "make web Dockerfile"
cat << EOF > docker/web/Dockerfile
FROM nginx:${NGINX_VERSION}
RUN rm -f /etc/nginx/conf.d/*
COPY ./docker/web/${APP_NAME}.conf /etc/nginx/conf.d/${APP_NAME}.conf
CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
EOF
# Gemfile 作成
echo "make Gemfile"
cat << EOF > src/Gemfile
source 'https://rubygems.org'
gem 'rails', '${RAILS_VERSION}'
EOF
# Gemfile.lock 作成
echo "make Gemfile"
touch ${APP_DIR}/src/Gemfile.lock
# nginx.conf 作成
echo "make ${APP_NAME}.conf"
cat << EOF > docker/web/${APP_NAME}.conf
upstream ${APP_NAME} {
server unix:///myapp/tmp/sockets/puma.sock;
}
server {
listen 80;
server_name ${APP_ADDLESS};
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
root /myapp/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 @${APP_NAME};
keepalive_timeout 5;
location @${APP_NAME} {
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://${APP_NAME};
}
}
EOF
# docker-compose.yml 作成
echo "make docker-compose.yml"
cat << EOF > docker-compose.yml
version: '3'
volumes:
db_data:
services:
db:
image: mysql:${MYSQL_VERSION}
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: password
volumes:
- db_data:/var/lib/mysql
ports:
- 3306:3306
app:
build:
context: .
dockerfile: ./docker/app/Dockerfile
command: bundle exec puma -C config/puma.rb
volumes:
- ./src:/myapp
depends_on:
- db
web:
build:
context: .
dockerfile: ./docker/web/Dockerfile
volumes:
- ./src/public:/myapp/public
- ./src/tmp:/myapp/tmp
ports:
- 80:80
depends_on:
- app
EOF
echo ""
# rails new 実行
echo "----- Set application -----"
echo "docker-compose run app rails new . --force --database=mysql"
docker-compose run app rails new . --force --database=mysql
# database.yml を編集
echo "edit database.yml"
cat src/config/database.yml | sed 's/password:$/password: password/' | sed 's/host: localhost/host: db/' > __tmpfile__
cat __tmpfile__ > src/config/database.yml
rm __tmpfile__
# puba.rb を編集
cat << EOF > src/config/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("../..", __FILE__)
bind "unix://#{app_root}/tmp/sockets/puma.sock"
stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log", true
EOF
echo ""
echo "----- container start -----"
# イメージをビルド
echo "docker-compose build"
docker-compose build
# 初回マイグレーション
echo "docker-compose run app rails db:create"
docker-compose run app rails db:create
# 一度コンテナをリセット
echo "docker-compose down"
docker-compose down
# コンテナ起動
echo "docker-compose up"
docker-compose up
실행 결과
적절한 위치에서 다음 명령을 수행합니다.
매개 변수로 전달sample
은 만들고 싶은 응용 프로그램의 이름입니다.sudo ./docker_rails_template_ver1.0.sh sample
완성하는데 10분 정도 걸립니다.
다음 상태일 때 완료합니다.app_1 | * Listening on tcp://0.0.0.0:3000
app_1 | * Listening on unix:///myapp/tmp/sockets/puma.sock
app_1 | Use Ctrl-C to stop
브라우저에서localhost에 접근해 보십시오.
그냥 rails라면 ポート3000
방문이 많아요.
이번에는 웹 서버(Nginx), ポート80
를 통해 받아들여지기 때문에 포트를 지정하지 않고 접근할 수 있습니다.
잘 나오면 완성이야.
다만, 버전을 조금만 만지면 어디서 넘어질 수 있으니 주의하세요.
이런 상황에서는 성실하게 일할 수밖에 없다...(^^;
셸 내용 정보
셸 스크립트에 댓글을 달았지만 내부에서 진행된 일을 보충하고 싶습니다.
보충할 수 없는 부분과 상세한 처리 내용을 신경 쓰는 사람은 최하부에 열거한 참고 보도를 참조하세요.
폴더 계층
호스트 측 폴더 계층은 다음과 같습니다.
루트 디렉토리에 배치된 docker-compose.yml
에서 dockerフォルダ
에 속하는 Dockerfile을 찾아 컨테이너 생성 등을 수행합니다.
이 밖에 rails의 원본 코드는 src
에 저장되어 있다.
이 src
폴더는 앱 컨테이너와의 공유 볼륨으로 사용됩니다.sample
├── docker
│ ├── app
│ │ └── Dockerfile
│ └── web
│ └── Dockerfile
├── docker-compose.yml
└── src
src 폴더 생성 정보
# ソースコード配置用のフォルダを作成
echo "----- Make source directories -----"
echo "mkdir -p src/tmp/sockets"
mkdir -p src/tmp/sockets
echo ""
src 폴더 생성 중 src/tmp/sockets
까지 폴더를 만드는 이유를 추가합니다.
응용 서버는 puma
를 사용하지만,puma가 시작될 때 src/tmp/sockets/puma.sock
파일을 자동으로 생성합니다.
하지만 자동으로 생성될 때 폴더 차원이 생성되지 않기 때문에 미리 만들었습니다.
응용 프로그램 Docker 파일 정보
ruby + rails6 + puma
의 컨테이너용 Docker 파일입니다.rails6
반드시 설치webpacker
해야 하며, 이와 동시에 yarn
가 필요합니다. 주의하십시오.
nginx.conf 생성 정보
Nginx용 설정 파일이 됩니다.
upstrem에서 찍은 사진///myapp/tmp/sockets/puma.sock
은 앱 용기 내의puma와 합작한 부분이다.
웹 용기ポート80
에서 요청을 받아 앱 용기에 연결합니다.
docker-compose.yml 생성 정보
docker-compose에서 데이터베이스 용기, 앱 용기, 웹 용기를 조작하는 데 사용되는 파일입니다.
db 용기/var/lib/mysql
에서docker의local 볼륨db_data
을 영구 볼륨으로 마운트합니다.
비밀번호가 번거롭기 때문에 "password"로 고정합니다.
앱 컨테이너/myapp
마운트 호스트 측면src
.
시작할 때마다 다음 명령으로 웹 용기를 받아들이기 시작합니다.bundle exec puma -C config/puma.rb
동시에db용기depends_on
와 관련됩니다.
웹 용기src
내 폴더를 불러옵니다. 기본 디스플레이용 html와 콘센트 통신용puma입니다.앱 용기와 sock을 공유합니다.
포트 수락 80.
후속 처리 정보
이후 실행rails new
, 생성된 파일을 편집한 후 이미지 구축 → 용기 실행.(잡다)src
호스트 측에서 응용 프로그램의 원본을 편집할 수 있기 때문에 매번 이미지 구축을 할 필요가 없고 개발 환경에 사용할 수 있다.
위에서 말한 바와 같이 참고할 만한 것이 있으면 좋겠다.
참고문
아래의 보도를 참고하도록 허락해 주십시오.감사합니다 m(__)m
지나치게 신중한 Docker-compose를 사용하여 rails5+MySQL on Docker 환경(Docker for Mac)을 구축합니다.
Rails+PostgreSQL+Docker+AWS에서 생성된 포트폴리오 정보
docker-compose 명령 요약
Reference
이 문제에 관하여(Rails6+Nginx+MySQL의 Docker 개발 환경을 자동으로 구축하는 셸 스크립트를 만들어 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/junichiro-watanabe/items/17523ace7d425e192607
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#!/bin/bash
####################################################
# 以下環境をdockerで構築するためのシェルスクリプト #
# プログラミング言語:Ruby / Ruby on rails #
# データベース :mysql #
# webサーバ :Nginx #
####################################################
RUBY_VERSION="2.6.6"
RAILS_VERSION="6.0.2"
MYSQL_VERSION="8.0"
NGINX_VERSION="1.17.10"
APP_ADDLESS="app"
if [ $# != 1 ]; then
echo "引数の指定が間違っています。"
echo "ex: $0 sample"
exit 1
fi
APP_NAME=$1
APP_DIR=`pwd`/${APP_NAME}
# 作業フォルダを作成
echo "----- Make working directories -----"
echo "mkdir -p ${APP_DIR}"
mkdir -p ${APP_DIR}
cd ${APP_DIR}
echo ""
# Dockerfile 配置用のフォルダを作成
echo "----- Make docker directories -----"
echo "mkdir -p docker/app"
mkdir -p docker/app
echo "mkdir -p docker/web"
mkdir -p docker/web
echo ""
# ソースコード配置用のフォルダを作成
echo "----- Make source directories -----"
echo "mkdir -p src/tmp/sockets"
mkdir -p src/tmp/sockets
echo ""
# 各種ファイル作成
echo "----- Make source directories -----"
# app用のDockerfile 作成
echo "make app Dockerfile"
cat << EOF > docker/app/Dockerfile
FROM ruby:${RUBY_VERSION}
RUN apt-get update -y && apt-get install -y default-mysql-client nodejs npm && \
npm install -g -y yarn
RUN mkdir /myapp
WORKDIR /myapp
COPY ./src/Gemfile Gemfile
COPY ./src/Gemfile.lock Gemfile.lock
RUN bundle install
COPY ./src /myapp
EOF
# web用のDockerfile 作成
echo "make web Dockerfile"
cat << EOF > docker/web/Dockerfile
FROM nginx:${NGINX_VERSION}
RUN rm -f /etc/nginx/conf.d/*
COPY ./docker/web/${APP_NAME}.conf /etc/nginx/conf.d/${APP_NAME}.conf
CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
EOF
# Gemfile 作成
echo "make Gemfile"
cat << EOF > src/Gemfile
source 'https://rubygems.org'
gem 'rails', '${RAILS_VERSION}'
EOF
# Gemfile.lock 作成
echo "make Gemfile"
touch ${APP_DIR}/src/Gemfile.lock
# nginx.conf 作成
echo "make ${APP_NAME}.conf"
cat << EOF > docker/web/${APP_NAME}.conf
upstream ${APP_NAME} {
server unix:///myapp/tmp/sockets/puma.sock;
}
server {
listen 80;
server_name ${APP_ADDLESS};
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
root /myapp/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 @${APP_NAME};
keepalive_timeout 5;
location @${APP_NAME} {
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://${APP_NAME};
}
}
EOF
# docker-compose.yml 作成
echo "make docker-compose.yml"
cat << EOF > docker-compose.yml
version: '3'
volumes:
db_data:
services:
db:
image: mysql:${MYSQL_VERSION}
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: password
volumes:
- db_data:/var/lib/mysql
ports:
- 3306:3306
app:
build:
context: .
dockerfile: ./docker/app/Dockerfile
command: bundle exec puma -C config/puma.rb
volumes:
- ./src:/myapp
depends_on:
- db
web:
build:
context: .
dockerfile: ./docker/web/Dockerfile
volumes:
- ./src/public:/myapp/public
- ./src/tmp:/myapp/tmp
ports:
- 80:80
depends_on:
- app
EOF
echo ""
# rails new 実行
echo "----- Set application -----"
echo "docker-compose run app rails new . --force --database=mysql"
docker-compose run app rails new . --force --database=mysql
# database.yml を編集
echo "edit database.yml"
cat src/config/database.yml | sed 's/password:$/password: password/' | sed 's/host: localhost/host: db/' > __tmpfile__
cat __tmpfile__ > src/config/database.yml
rm __tmpfile__
# puba.rb を編集
cat << EOF > src/config/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("../..", __FILE__)
bind "unix://#{app_root}/tmp/sockets/puma.sock"
stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log", true
EOF
echo ""
echo "----- container start -----"
# イメージをビルド
echo "docker-compose build"
docker-compose build
# 初回マイグレーション
echo "docker-compose run app rails db:create"
docker-compose run app rails db:create
# 一度コンテナをリセット
echo "docker-compose down"
docker-compose down
# コンテナ起動
echo "docker-compose up"
docker-compose up
sudo ./docker_rails_template_ver1.0.sh sample
app_1 | * Listening on tcp://0.0.0.0:3000
app_1 | * Listening on unix:///myapp/tmp/sockets/puma.sock
app_1 | Use Ctrl-C to stop
셸 스크립트에 댓글을 달았지만 내부에서 진행된 일을 보충하고 싶습니다.
보충할 수 없는 부분과 상세한 처리 내용을 신경 쓰는 사람은 최하부에 열거한 참고 보도를 참조하세요.
폴더 계층
호스트 측 폴더 계층은 다음과 같습니다.
루트 디렉토리에 배치된
docker-compose.yml
에서 dockerフォルダ
에 속하는 Dockerfile을 찾아 컨테이너 생성 등을 수행합니다.이 밖에 rails의 원본 코드는
src
에 저장되어 있다.이
src
폴더는 앱 컨테이너와의 공유 볼륨으로 사용됩니다.sample
├── docker
│ ├── app
│ │ └── Dockerfile
│ └── web
│ └── Dockerfile
├── docker-compose.yml
└── src
src 폴더 생성 정보
# ソースコード配置用のフォルダを作成
echo "----- Make source directories -----"
echo "mkdir -p src/tmp/sockets"
mkdir -p src/tmp/sockets
echo ""
src 폴더 생성 중 src/tmp/sockets
까지 폴더를 만드는 이유를 추가합니다.응용 서버는
puma
를 사용하지만,puma가 시작될 때 src/tmp/sockets/puma.sock
파일을 자동으로 생성합니다.하지만 자동으로 생성될 때 폴더 차원이 생성되지 않기 때문에 미리 만들었습니다.
응용 프로그램 Docker 파일 정보
ruby + rails6 + puma
의 컨테이너용 Docker 파일입니다.rails6
반드시 설치webpacker
해야 하며, 이와 동시에 yarn
가 필요합니다. 주의하십시오.nginx.conf 생성 정보
Nginx용 설정 파일이 됩니다.
upstrem에서 찍은 사진
///myapp/tmp/sockets/puma.sock
은 앱 용기 내의puma와 합작한 부분이다.웹 용기
ポート80
에서 요청을 받아 앱 용기에 연결합니다.docker-compose.yml 생성 정보
docker-compose에서 데이터베이스 용기, 앱 용기, 웹 용기를 조작하는 데 사용되는 파일입니다.
db 용기
/var/lib/mysql
에서docker의local 볼륨db_data
을 영구 볼륨으로 마운트합니다.비밀번호가 번거롭기 때문에 "password"로 고정합니다.
앱 컨테이너
/myapp
마운트 호스트 측면src
.시작할 때마다 다음 명령으로 웹 용기를 받아들이기 시작합니다.
bundle exec puma -C config/puma.rb
동시에db용기depends_on
와 관련됩니다.웹 용기
src
내 폴더를 불러옵니다. 기본 디스플레이용 html와 콘센트 통신용puma입니다.앱 용기와 sock을 공유합니다.포트 수락 80.
후속 처리 정보
이후 실행
rails new
, 생성된 파일을 편집한 후 이미지 구축 → 용기 실행.(잡다)src
호스트 측에서 응용 프로그램의 원본을 편집할 수 있기 때문에 매번 이미지 구축을 할 필요가 없고 개발 환경에 사용할 수 있다.위에서 말한 바와 같이 참고할 만한 것이 있으면 좋겠다.
참고문
아래의 보도를 참고하도록 허락해 주십시오.감사합니다 m(__)m
지나치게 신중한 Docker-compose를 사용하여 rails5+MySQL on Docker 환경(Docker for Mac)을 구축합니다.
Rails+PostgreSQL+Docker+AWS에서 생성된 포트폴리오 정보
docker-compose 명령 요약
Reference
이 문제에 관하여(Rails6+Nginx+MySQL의 Docker 개발 환경을 자동으로 구축하는 셸 스크립트를 만들어 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/junichiro-watanabe/items/17523ace7d425e192607
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Rails6+Nginx+MySQL의 Docker 개발 환경을 자동으로 구축하는 셸 스크립트를 만들어 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/junichiro-watanabe/items/17523ace7d425e192607텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)