개발 환경의 Rails 앱을 Docker 컨테이너에서 시작해 보았습니다.
11435 단어 docker-compose도커Rails
목차
1. 소개
2. 전제
3. 거친 절차
4.docker의 설정 파일 작성
5. 앱용 컨테이너와 데이터베이스용 컨테이너의 연결 설정
6. 컨테이너 시작
7. 정리
소개
요전날 Rails에서 학습계의 웹 앱을 작성했습니다만, 환경 구축시에는, 뭔가 에러가 나오면 원인을 조사해 해소의 반복이었습니다. 다양한 지식을 얻는 좋은 기회였지만, 향후 개발을 할 때는 보다 효율적으로 할 수 있으면 좋겠다는 생각이 있습니다. 해결 수단의 하나로서는 「Docker」를 들 수 있을까 생각합니다. 다음에 앱 개발을 할 때는 초기 단계부터 Docker를 이용한 개발을 하고 싶습니다만, 우선은 이번 작성한 기존의 앱을 Docker 컨테이너로 기동할 수 없는지 시도해 보았기 때문에, 기록으로서 남깁니다.
전제
· 개발 단말기에 Docker를 설치 한 것
· 다음 절차의 각 소프트웨어 버전은 다음과 같습니다.
· Ruby : 2.6.5
·Rails: 6.0.3
· MySQL : 5.6
・이번에는 기존 앱을 2종류의 Docker 컨테이너(앱용 컨테이너, 데이터베이스용 컨테이너)를 연계시켜 기동한다
거친 절차
①docker의 설정 파일(Dockerfile과 docker-compose.yml) 작성
② 앱용 컨테이너와 데이터베이스용 컨테이너의 연결 설정
③ 컨테이너 기동
docker 설정 파일 만들기
우선은 기존 앱의 폴더 계층에서 이하, 2 종류의 파일을 작성합니다.
■ Dockerfile
→Docker 이미지의 기본이 되는 파일. 여기에 기술된 내용으로, 완전히 환경의 이미지가 생성됩니다. 이번에는 앱용 컨테이너의 본질이 되도록 기술해 갑니다.
■ docker-compose.yml
→ 여러 컨테이너를 관리할 때 사용하는 파일. 이번에는 앱 용 컨테이너와 데이터베이스 용 컨테이너의 정의를 작성하고 관리합니다.
파일을 작성하면 각각에 정의를 기술해 갑니다. ※ 각 행에서 무엇을 하고 있는지는 코멘트를 참조
■ Dockerfile의 내용
#アプリ用コンテナの素
#ベースとなるバージョン2.6.5のrubyイメージを公式リポジトリより取得
FROM ruby:2.6.5
#RUNをbashで実行
SHELL ["/bin/bash", "-c"]
#各ソフトウェア(yarn,nodejs,npm,mysql,vim,nodeバージョン管理ライブラリ)をインストール。
#イメージ軽量化のためにapt-getリストをクリア
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 && \
apt-get update && apt-get install -y yarn nodejs npm default-mysql-client vim && \
npm install n -g && \
n 12.13.0 && \
echo "export PATH=/usr/local/n/versions/node/12.13.0/bin/:$PATH" >> ~/.bashrc && \
source ~/.bashrc && \
rm -rf /var/lib/apt/lists/*
#結合テスト(Rspec)用にChrome関連のインストール
RUN apt-get update && apt-get install -y unzip && \
CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` && \
wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/ && \
unzip ~/chromedriver_linux64.zip -d ~/ && \
rm ~/chromedriver_linux64.zip && \
chown root:root ~/chromedriver && \
chmod 755 ~/chromedriver && \
mv ~/chromedriver /usr/bin/chromedriver && \
sh -c 'wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -' && \
sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' && \
apt-get update && apt-get install -y google-chrome-stable
#アプリ用ディレクトリの作成 ※「memory_tank」の部分は適宜、自分のアプリ名にする
RUN mkdir /memory_tank
#ワークディレクトリを設定 ※「memory_tank」の部分は適宜、自分のアプリ名にする
WORKDIR /memory_tank
#ローカルのGemfileをアプリ用コンテナにコピーする
COPY Gemfile /memory_tank/Gemfile
COPY Gemfile.lock /memory_tank/Gemfile.lock
#アプリ用コンテナにgemをインストール
RUN gem install bundler
RUN bundle install
#結合テスト(Rspec)用にcapybara,selenium-webdriverを最新化
RUN bundle update capybara selenium-webdriver
#ローカルのアプリファイルをまるっとアプリ用コンテナにコピー
COPY . /memory_tank
■ docker-compose.yml의 내용
docker-compose.ymlversion: "2"
services:
db: #データベース用コンテナの定義
image: mysql:5.6 #ベースとなるバージョン5,6のmysqlイメージを公式リポジトリより取得
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci #文字コードの設定
environment:
MYSQL_ROOT_PASSWORD: xxxxxxxx #データベースユーザ「root」のパスワード
MYSQL_DATABASE: memory_tank_development #データベース名
volumes:
- mysql-data:/var/lib/mysql #名前付きボリュームでデータを永続化 ※ Dockerの管理下にデータを保管
ports:
- "4306:3306" #ポート設定
app: #アプリ用コンテナの定義
build: . #DockerFileを素にコンテナイメージを作成
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" #Railsの起動
volumes:
- .:/memory_tank #ローカルのディレクトリをコンテナにマウント
ports:
- "3000:3000" #ポート設定
depends_on: #作成順序の設定 「db」→「app」
- db
volumes:
mysql-data: #名前付きボリューム
앱 용 컨테이너와 데이터베이스 용 컨테이너 연결 설정
그런 다음 앱 컨테이너와 데이터베이스 컨테이너가 성공적으로 통신할 수 있도록 database.yml을 편집합니다.
※socket 통신에서의 DB 접속이 아니라 「host:db」와 같이, 데이터베이스용 컨테이너를 직접 지정합니다.
database.ymldefault: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password:*****
host: db #データベース用コンテナを指定
컨테이너 시작
여기까지 각종 정의가 완료되었으므로, 마지막에 컨테이너를 백그라운드에서 기동해 가동 확인을 실시합니다.
xxxx@xxxxnoMacBook-Pro memory_tank % docker-compose up -d
Starting memory_tank_db_1 ... done
Starting memory_tank_app_1 ... done
xxxx@xxxxnoMacBook-Pro memory_tank % docker-compose exec app bin/rails db:migrate #マイグレーション
・・・
xxxx@xxxxnoMacBook-Pro memory_tank % docker-compose exec app bin/rails webpacker:install #webpackerのインストール
localhost : 3000으로 앱에 연결할 수 있는지 확인
요약
이번 작업을 통해 어느 정도는 Docker에 대한 기초 지식이 익숙해 졌기 때문에, 향후는 web 앱 초기 단계에서의 Docker 도입이나 AWS ECS에의 프로덕션 배포에 연결해 나갈 수 있으면 좋겠습니다.
이상, 끝까지 읽어 주셔서 감사합니다!
Reference
이 문제에 관하여(개발 환경의 Rails 앱을 Docker 컨테이너에서 시작해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Unimaru/items/55115408f7d161fd32a7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
요전날 Rails에서 학습계의 웹 앱을 작성했습니다만, 환경 구축시에는, 뭔가 에러가 나오면 원인을 조사해 해소의 반복이었습니다. 다양한 지식을 얻는 좋은 기회였지만, 향후 개발을 할 때는 보다 효율적으로 할 수 있으면 좋겠다는 생각이 있습니다. 해결 수단의 하나로서는 「Docker」를 들 수 있을까 생각합니다. 다음에 앱 개발을 할 때는 초기 단계부터 Docker를 이용한 개발을 하고 싶습니다만, 우선은 이번 작성한 기존의 앱을 Docker 컨테이너로 기동할 수 없는지 시도해 보았기 때문에, 기록으로서 남깁니다.
전제
· 개발 단말기에 Docker를 설치 한 것
· 다음 절차의 각 소프트웨어 버전은 다음과 같습니다.
· Ruby : 2.6.5
·Rails: 6.0.3
· MySQL : 5.6
・이번에는 기존 앱을 2종류의 Docker 컨테이너(앱용 컨테이너, 데이터베이스용 컨테이너)를 연계시켜 기동한다
거친 절차
①docker의 설정 파일(Dockerfile과 docker-compose.yml) 작성
② 앱용 컨테이너와 데이터베이스용 컨테이너의 연결 설정
③ 컨테이너 기동
docker 설정 파일 만들기
우선은 기존 앱의 폴더 계층에서 이하, 2 종류의 파일을 작성합니다.
■ Dockerfile
→Docker 이미지의 기본이 되는 파일. 여기에 기술된 내용으로, 완전히 환경의 이미지가 생성됩니다. 이번에는 앱용 컨테이너의 본질이 되도록 기술해 갑니다.
■ docker-compose.yml
→ 여러 컨테이너를 관리할 때 사용하는 파일. 이번에는 앱 용 컨테이너와 데이터베이스 용 컨테이너의 정의를 작성하고 관리합니다.
파일을 작성하면 각각에 정의를 기술해 갑니다. ※ 각 행에서 무엇을 하고 있는지는 코멘트를 참조
■ Dockerfile의 내용
#アプリ用コンテナの素
#ベースとなるバージョン2.6.5のrubyイメージを公式リポジトリより取得
FROM ruby:2.6.5
#RUNをbashで実行
SHELL ["/bin/bash", "-c"]
#各ソフトウェア(yarn,nodejs,npm,mysql,vim,nodeバージョン管理ライブラリ)をインストール。
#イメージ軽量化のためにapt-getリストをクリア
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 && \
apt-get update && apt-get install -y yarn nodejs npm default-mysql-client vim && \
npm install n -g && \
n 12.13.0 && \
echo "export PATH=/usr/local/n/versions/node/12.13.0/bin/:$PATH" >> ~/.bashrc && \
source ~/.bashrc && \
rm -rf /var/lib/apt/lists/*
#結合テスト(Rspec)用にChrome関連のインストール
RUN apt-get update && apt-get install -y unzip && \
CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` && \
wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/ && \
unzip ~/chromedriver_linux64.zip -d ~/ && \
rm ~/chromedriver_linux64.zip && \
chown root:root ~/chromedriver && \
chmod 755 ~/chromedriver && \
mv ~/chromedriver /usr/bin/chromedriver && \
sh -c 'wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -' && \
sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' && \
apt-get update && apt-get install -y google-chrome-stable
#アプリ用ディレクトリの作成 ※「memory_tank」の部分は適宜、自分のアプリ名にする
RUN mkdir /memory_tank
#ワークディレクトリを設定 ※「memory_tank」の部分は適宜、自分のアプリ名にする
WORKDIR /memory_tank
#ローカルのGemfileをアプリ用コンテナにコピーする
COPY Gemfile /memory_tank/Gemfile
COPY Gemfile.lock /memory_tank/Gemfile.lock
#アプリ用コンテナにgemをインストール
RUN gem install bundler
RUN bundle install
#結合テスト(Rspec)用にcapybara,selenium-webdriverを最新化
RUN bundle update capybara selenium-webdriver
#ローカルのアプリファイルをまるっとアプリ用コンテナにコピー
COPY . /memory_tank
■ docker-compose.yml의 내용
docker-compose.ymlversion: "2"
services:
db: #データベース用コンテナの定義
image: mysql:5.6 #ベースとなるバージョン5,6のmysqlイメージを公式リポジトリより取得
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci #文字コードの設定
environment:
MYSQL_ROOT_PASSWORD: xxxxxxxx #データベースユーザ「root」のパスワード
MYSQL_DATABASE: memory_tank_development #データベース名
volumes:
- mysql-data:/var/lib/mysql #名前付きボリュームでデータを永続化 ※ Dockerの管理下にデータを保管
ports:
- "4306:3306" #ポート設定
app: #アプリ用コンテナの定義
build: . #DockerFileを素にコンテナイメージを作成
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" #Railsの起動
volumes:
- .:/memory_tank #ローカルのディレクトリをコンテナにマウント
ports:
- "3000:3000" #ポート設定
depends_on: #作成順序の設定 「db」→「app」
- db
volumes:
mysql-data: #名前付きボリューム
앱 용 컨테이너와 데이터베이스 용 컨테이너 연결 설정
그런 다음 앱 컨테이너와 데이터베이스 컨테이너가 성공적으로 통신할 수 있도록 database.yml을 편집합니다.
※socket 통신에서의 DB 접속이 아니라 「host:db」와 같이, 데이터베이스용 컨테이너를 직접 지정합니다.
database.ymldefault: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password:*****
host: db #データベース用コンテナを指定
컨테이너 시작
여기까지 각종 정의가 완료되었으므로, 마지막에 컨테이너를 백그라운드에서 기동해 가동 확인을 실시합니다.
xxxx@xxxxnoMacBook-Pro memory_tank % docker-compose up -d
Starting memory_tank_db_1 ... done
Starting memory_tank_app_1 ... done
xxxx@xxxxnoMacBook-Pro memory_tank % docker-compose exec app bin/rails db:migrate #マイグレーション
・・・
xxxx@xxxxnoMacBook-Pro memory_tank % docker-compose exec app bin/rails webpacker:install #webpackerのインストール
localhost : 3000으로 앱에 연결할 수 있는지 확인
요약
이번 작업을 통해 어느 정도는 Docker에 대한 기초 지식이 익숙해 졌기 때문에, 향후는 web 앱 초기 단계에서의 Docker 도입이나 AWS ECS에의 프로덕션 배포에 연결해 나갈 수 있으면 좋겠습니다.
이상, 끝까지 읽어 주셔서 감사합니다!
Reference
이 문제에 관하여(개발 환경의 Rails 앱을 Docker 컨테이너에서 시작해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Unimaru/items/55115408f7d161fd32a7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
①docker의 설정 파일(Dockerfile과 docker-compose.yml) 작성
② 앱용 컨테이너와 데이터베이스용 컨테이너의 연결 설정
③ 컨테이너 기동
docker 설정 파일 만들기
우선은 기존 앱의 폴더 계층에서 이하, 2 종류의 파일을 작성합니다.
■ Dockerfile
→Docker 이미지의 기본이 되는 파일. 여기에 기술된 내용으로, 완전히 환경의 이미지가 생성됩니다. 이번에는 앱용 컨테이너의 본질이 되도록 기술해 갑니다.
■ docker-compose.yml
→ 여러 컨테이너를 관리할 때 사용하는 파일. 이번에는 앱 용 컨테이너와 데이터베이스 용 컨테이너의 정의를 작성하고 관리합니다.
파일을 작성하면 각각에 정의를 기술해 갑니다. ※ 각 행에서 무엇을 하고 있는지는 코멘트를 참조
■ Dockerfile의 내용
#アプリ用コンテナの素
#ベースとなるバージョン2.6.5のrubyイメージを公式リポジトリより取得
FROM ruby:2.6.5
#RUNをbashで実行
SHELL ["/bin/bash", "-c"]
#各ソフトウェア(yarn,nodejs,npm,mysql,vim,nodeバージョン管理ライブラリ)をインストール。
#イメージ軽量化のためにapt-getリストをクリア
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 && \
apt-get update && apt-get install -y yarn nodejs npm default-mysql-client vim && \
npm install n -g && \
n 12.13.0 && \
echo "export PATH=/usr/local/n/versions/node/12.13.0/bin/:$PATH" >> ~/.bashrc && \
source ~/.bashrc && \
rm -rf /var/lib/apt/lists/*
#結合テスト(Rspec)用にChrome関連のインストール
RUN apt-get update && apt-get install -y unzip && \
CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` && \
wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/ && \
unzip ~/chromedriver_linux64.zip -d ~/ && \
rm ~/chromedriver_linux64.zip && \
chown root:root ~/chromedriver && \
chmod 755 ~/chromedriver && \
mv ~/chromedriver /usr/bin/chromedriver && \
sh -c 'wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -' && \
sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' && \
apt-get update && apt-get install -y google-chrome-stable
#アプリ用ディレクトリの作成 ※「memory_tank」の部分は適宜、自分のアプリ名にする
RUN mkdir /memory_tank
#ワークディレクトリを設定 ※「memory_tank」の部分は適宜、自分のアプリ名にする
WORKDIR /memory_tank
#ローカルのGemfileをアプリ用コンテナにコピーする
COPY Gemfile /memory_tank/Gemfile
COPY Gemfile.lock /memory_tank/Gemfile.lock
#アプリ用コンテナにgemをインストール
RUN gem install bundler
RUN bundle install
#結合テスト(Rspec)用にcapybara,selenium-webdriverを最新化
RUN bundle update capybara selenium-webdriver
#ローカルのアプリファイルをまるっとアプリ用コンテナにコピー
COPY . /memory_tank
■ docker-compose.yml의 내용
docker-compose.ymlversion: "2"
services:
db: #データベース用コンテナの定義
image: mysql:5.6 #ベースとなるバージョン5,6のmysqlイメージを公式リポジトリより取得
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci #文字コードの設定
environment:
MYSQL_ROOT_PASSWORD: xxxxxxxx #データベースユーザ「root」のパスワード
MYSQL_DATABASE: memory_tank_development #データベース名
volumes:
- mysql-data:/var/lib/mysql #名前付きボリュームでデータを永続化 ※ Dockerの管理下にデータを保管
ports:
- "4306:3306" #ポート設定
app: #アプリ用コンテナの定義
build: . #DockerFileを素にコンテナイメージを作成
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" #Railsの起動
volumes:
- .:/memory_tank #ローカルのディレクトリをコンテナにマウント
ports:
- "3000:3000" #ポート設定
depends_on: #作成順序の設定 「db」→「app」
- db
volumes:
mysql-data: #名前付きボリューム
앱 용 컨테이너와 데이터베이스 용 컨테이너 연결 설정
그런 다음 앱 컨테이너와 데이터베이스 컨테이너가 성공적으로 통신할 수 있도록 database.yml을 편집합니다.
※socket 통신에서의 DB 접속이 아니라 「host:db」와 같이, 데이터베이스용 컨테이너를 직접 지정합니다.
database.ymldefault: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password:*****
host: db #データベース用コンテナを指定
컨테이너 시작
여기까지 각종 정의가 완료되었으므로, 마지막에 컨테이너를 백그라운드에서 기동해 가동 확인을 실시합니다.
xxxx@xxxxnoMacBook-Pro memory_tank % docker-compose up -d
Starting memory_tank_db_1 ... done
Starting memory_tank_app_1 ... done
xxxx@xxxxnoMacBook-Pro memory_tank % docker-compose exec app bin/rails db:migrate #マイグレーション
・・・
xxxx@xxxxnoMacBook-Pro memory_tank % docker-compose exec app bin/rails webpacker:install #webpackerのインストール
localhost : 3000으로 앱에 연결할 수 있는지 확인
요약
이번 작업을 통해 어느 정도는 Docker에 대한 기초 지식이 익숙해 졌기 때문에, 향후는 web 앱 초기 단계에서의 Docker 도입이나 AWS ECS에의 프로덕션 배포에 연결해 나갈 수 있으면 좋겠습니다.
이상, 끝까지 읽어 주셔서 감사합니다!
Reference
이 문제에 관하여(개발 환경의 Rails 앱을 Docker 컨테이너에서 시작해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Unimaru/items/55115408f7d161fd32a7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#アプリ用コンテナの素
#ベースとなるバージョン2.6.5のrubyイメージを公式リポジトリより取得
FROM ruby:2.6.5
#RUNをbashで実行
SHELL ["/bin/bash", "-c"]
#各ソフトウェア(yarn,nodejs,npm,mysql,vim,nodeバージョン管理ライブラリ)をインストール。
#イメージ軽量化のためにapt-getリストをクリア
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 && \
apt-get update && apt-get install -y yarn nodejs npm default-mysql-client vim && \
npm install n -g && \
n 12.13.0 && \
echo "export PATH=/usr/local/n/versions/node/12.13.0/bin/:$PATH" >> ~/.bashrc && \
source ~/.bashrc && \
rm -rf /var/lib/apt/lists/*
#結合テスト(Rspec)用にChrome関連のインストール
RUN apt-get update && apt-get install -y unzip && \
CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` && \
wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/ && \
unzip ~/chromedriver_linux64.zip -d ~/ && \
rm ~/chromedriver_linux64.zip && \
chown root:root ~/chromedriver && \
chmod 755 ~/chromedriver && \
mv ~/chromedriver /usr/bin/chromedriver && \
sh -c 'wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -' && \
sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' && \
apt-get update && apt-get install -y google-chrome-stable
#アプリ用ディレクトリの作成 ※「memory_tank」の部分は適宜、自分のアプリ名にする
RUN mkdir /memory_tank
#ワークディレクトリを設定 ※「memory_tank」の部分は適宜、自分のアプリ名にする
WORKDIR /memory_tank
#ローカルのGemfileをアプリ用コンテナにコピーする
COPY Gemfile /memory_tank/Gemfile
COPY Gemfile.lock /memory_tank/Gemfile.lock
#アプリ用コンテナにgemをインストール
RUN gem install bundler
RUN bundle install
#結合テスト(Rspec)用にcapybara,selenium-webdriverを最新化
RUN bundle update capybara selenium-webdriver
#ローカルのアプリファイルをまるっとアプリ用コンテナにコピー
COPY . /memory_tank
version: "2"
services:
db: #データベース用コンテナの定義
image: mysql:5.6 #ベースとなるバージョン5,6のmysqlイメージを公式リポジトリより取得
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci #文字コードの設定
environment:
MYSQL_ROOT_PASSWORD: xxxxxxxx #データベースユーザ「root」のパスワード
MYSQL_DATABASE: memory_tank_development #データベース名
volumes:
- mysql-data:/var/lib/mysql #名前付きボリュームでデータを永続化 ※ Dockerの管理下にデータを保管
ports:
- "4306:3306" #ポート設定
app: #アプリ用コンテナの定義
build: . #DockerFileを素にコンテナイメージを作成
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" #Railsの起動
volumes:
- .:/memory_tank #ローカルのディレクトリをコンテナにマウント
ports:
- "3000:3000" #ポート設定
depends_on: #作成順序の設定 「db」→「app」
- db
volumes:
mysql-data: #名前付きボリューム
그런 다음 앱 컨테이너와 데이터베이스 컨테이너가 성공적으로 통신할 수 있도록 database.yml을 편집합니다.
※socket 통신에서의 DB 접속이 아니라 「host:db」와 같이, 데이터베이스용 컨테이너를 직접 지정합니다.
database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password:*****
host: db #データベース用コンテナを指定
컨테이너 시작
여기까지 각종 정의가 완료되었으므로, 마지막에 컨테이너를 백그라운드에서 기동해 가동 확인을 실시합니다.
xxxx@xxxxnoMacBook-Pro memory_tank % docker-compose up -d
Starting memory_tank_db_1 ... done
Starting memory_tank_app_1 ... done
xxxx@xxxxnoMacBook-Pro memory_tank % docker-compose exec app bin/rails db:migrate #マイグレーション
・・・
xxxx@xxxxnoMacBook-Pro memory_tank % docker-compose exec app bin/rails webpacker:install #webpackerのインストール
localhost : 3000으로 앱에 연결할 수 있는지 확인
요약
이번 작업을 통해 어느 정도는 Docker에 대한 기초 지식이 익숙해 졌기 때문에, 향후는 web 앱 초기 단계에서의 Docker 도입이나 AWS ECS에의 프로덕션 배포에 연결해 나갈 수 있으면 좋겠습니다.
이상, 끝까지 읽어 주셔서 감사합니다!
Reference
이 문제에 관하여(개발 환경의 Rails 앱을 Docker 컨테이너에서 시작해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Unimaru/items/55115408f7d161fd32a7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
xxxx@xxxxnoMacBook-Pro memory_tank % docker-compose up -d
Starting memory_tank_db_1 ... done
Starting memory_tank_app_1 ... done
xxxx@xxxxnoMacBook-Pro memory_tank % docker-compose exec app bin/rails db:migrate #マイグレーション
・・・
xxxx@xxxxnoMacBook-Pro memory_tank % docker-compose exec app bin/rails webpacker:install #webpackerのインストール
이번 작업을 통해 어느 정도는 Docker에 대한 기초 지식이 익숙해 졌기 때문에, 향후는 web 앱 초기 단계에서의 Docker 도입이나 AWS ECS에의 프로덕션 배포에 연결해 나갈 수 있으면 좋겠습니다.
이상, 끝까지 읽어 주셔서 감사합니다!
Reference
이 문제에 관하여(개발 환경의 Rails 앱을 Docker 컨테이너에서 시작해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Unimaru/items/55115408f7d161fd32a7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)