【Rails・MySQL・Docker】기존의 Rails5+MySQL의 앱에 Docker를 도입한다
9253 단어 MySQLRailsRails5docker-compose도커
개요
기존 Rails5+MySQL 애플리케이션(AWS EC2에서 배포됨)에 나중에 Docker를 도입했습니다.
이번은 로컬 환경만의 구축입니다만, Docker 초학자로 꽤 고생했으므로 비망록으로서 정리합니다.
공부를 위해서 코드나 커멘드의 하나하나의 의미도 써 가고 싶습니다.
기존 Rails 앱에 Docker를 도입하고 싶은 분의 도움이 되시면 감사하겠습니다.
실수 등이 있으면 지적 해주십시오.
전제
Doker의 기초는 입문 Docker 과 DOCKER/KUBERNETES 실천 컨테이너 개발 입문 에서 배웠습니다.
Docker를 처음 만지는 분은 우선 Docker의 개념이나 기초적 부분을 상기 등으로 이해하는 것이 좋습니다.
절차
①Docker for Mac 설치
여기 URL 에서 Mac용 Docker를 엽니다.
"Get Docker"링크에서 Docker.dmg를 다운로드합니다.
설치가 끝나면 응용 프로그램 폴더에서 Docker를 엽니다.
"Docker needs privileged access"대화 상자가 나타나면 OK를 누릅니다.
메뉴 바에 Docker 아이콘이 나오고 "Docker is starting"이 표시되면 조금 기다립니다.
"Docker is now up and running"이 표시되면 준비 완료입니다.
터미널에서,
$ docker version
를 실행하여 버전이 표시되면 올바르게 설치할 수 있습니다.
②필요한 파일의 작성
응용 프로그램의 디렉토리 바로 아래에 "docker-compose.yml"과 "Dockerfile"파일을 만듭니다.
구성myapp ---- Dockerfile
|-- app
|-- bin
|-- config
|-- db
|-- docker-compose.yml
|-- Dockerfile
|-- Gemfile
|-- Gemfile.lock
③Dockerfile 편집
Dockerfile
# 作成するDockerイメージのベースとなるイメージを指定
FROM ruby:2.5.3
# Dockerイメージビルド時に、Dockerコンテナ内で実行するコマンドを定義
RUN apt-get update -qq && \
apt-get install -y build-essential \
libpq-dev \
nodejs
# 作業ディレクトリの作成
RUN mkdir /app_name
# Dockerfileをもとに生成したDockerコンテナ内で使える環境変数を指定
ENV APP_ROOT /app_name
WORKDIR $APP_ROOT
# ホストからGemfileをコンテナ上にコピー
ADD ./Gemfile $APP_ROOT/Gemfile
ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock
# Gemfileをbundle install
RUN bundle install
ADD . $APP_ROOT
④docker-compose.yml 편집
docker-compose.yml
# Version 3はファイルの記述定義のうち安定して利用できる最新版とのことです
version: "3"
services:
# "db"というコンテナを定義
db:
# MySQLのイメージを指定します
image: mysql:5.7
environment:
# PasswordとUsernameはdatabase.ymlと合わせます
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: root
ports:
- "4306:3306"
# ポートはどちらも"3306"でも大丈夫ですが、左側を"4306"と別の番号にすることでSequel ProでデータをDBを確認できるようになります。
# "web"というコンテナを定義
web:
build: .
command: rails s -p 3000 -b '0.0.0.0'
# ローカルのディレクトリをマウント
volumes:
- .:/app_name
ports:
- "3000:3000"
# appコンテナとdbコンテナを連携
links:
- db
⑤database.yml 편집
database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
# PasswordとUsernameはdocker-compose.ymlと合わせます
username: root
password: password
host: db
development:
<<: *default
database: myapp_development
test:
<<: *default
database: myapp_test
production:
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password:
socket: /tmp/mysql.sock
database: myapp_production
username: root
password: <%= ENV['DATABASE_PASSWORD'] %>
socket: /var/lib/mysql/mysql.sock
# <<: *defaultは「default」を一つにまとめて使用するという意味なので
# 本番環境はDockerと干渉させないために「production」のみ個別で書きます
⑥Docker 시작
# imageをビルド
$ docker-compose build
# コンテナの実行
$ docker-compose up
⑦DB 만들기
다른 터미널 탭을 열고 앱 디렉토리로 이동
# DBを作成
$ docker-compose run web rails db:create
⑧ 브라우저 확인
http://localhost:3000/ 로 이동하여 부팅이 가능한지 확인합니다.
⑨Sequel Pro로 DB를 확인할 수 있도록 한다
평소 Sequel Pro에서 DB를 확인했기 때문에 Docker 환경에서도 Sequel Pro에서 확인할 수 있도록 연결합니다.
명명: 켜도 켜도 괜찮습니다.
호스트 이름 : 기본적으로 127.0.0.1이 될까 생각합니다 (자신의 IP 주소입니다)
사용자 이름: root (docker-compose.yml에 나열된 것입니다)
비밀번호 : password (docker-compose.yml에 나열된 것입니다)
데이터베이스: 비어 있고 괜찮습니다.
포트 : 4306 (docker-compose.yml의 포트 왼쪽의 번호가됩니다)
이상
현재는 AWS의 ECS로 배포하고 있으므로, 향후는 프로덕션 환경도 Docker의 구축을 할 예정으로,
CircleCI로 테스트 자동화와 terraform으로 인프라 구성의 코딩도 진행해 나가려고 합니다.
수정점이 있으면 가르쳐 주시면 감사하겠습니다.
참고
입문 Docker
DOCKER/KUBERNETES 실천 컨테이너 개발 입문
Reference
이 문제에 관하여(【Rails・MySQL・Docker】기존의 Rails5+MySQL의 앱에 Docker를 도입한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/miyomiyo344/items/7c027a8f7a59248563d1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ docker version
응용 프로그램의 디렉토리 바로 아래에 "docker-compose.yml"과 "Dockerfile"파일을 만듭니다.
구성
myapp ---- Dockerfile
|-- app
|-- bin
|-- config
|-- db
|-- docker-compose.yml
|-- Dockerfile
|-- Gemfile
|-- Gemfile.lock
③Dockerfile 편집
Dockerfile
# 作成するDockerイメージのベースとなるイメージを指定
FROM ruby:2.5.3
# Dockerイメージビルド時に、Dockerコンテナ内で実行するコマンドを定義
RUN apt-get update -qq && \
apt-get install -y build-essential \
libpq-dev \
nodejs
# 作業ディレクトリの作成
RUN mkdir /app_name
# Dockerfileをもとに生成したDockerコンテナ内で使える環境変数を指定
ENV APP_ROOT /app_name
WORKDIR $APP_ROOT
# ホストからGemfileをコンテナ上にコピー
ADD ./Gemfile $APP_ROOT/Gemfile
ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock
# Gemfileをbundle install
RUN bundle install
ADD . $APP_ROOT
④docker-compose.yml 편집
docker-compose.yml
# Version 3はファイルの記述定義のうち安定して利用できる最新版とのことです
version: "3"
services:
# "db"というコンテナを定義
db:
# MySQLのイメージを指定します
image: mysql:5.7
environment:
# PasswordとUsernameはdatabase.ymlと合わせます
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: root
ports:
- "4306:3306"
# ポートはどちらも"3306"でも大丈夫ですが、左側を"4306"と別の番号にすることでSequel ProでデータをDBを確認できるようになります。
# "web"というコンテナを定義
web:
build: .
command: rails s -p 3000 -b '0.0.0.0'
# ローカルのディレクトリをマウント
volumes:
- .:/app_name
ports:
- "3000:3000"
# appコンテナとdbコンテナを連携
links:
- db
⑤database.yml 편집
database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
# PasswordとUsernameはdocker-compose.ymlと合わせます
username: root
password: password
host: db
development:
<<: *default
database: myapp_development
test:
<<: *default
database: myapp_test
production:
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password:
socket: /tmp/mysql.sock
database: myapp_production
username: root
password: <%= ENV['DATABASE_PASSWORD'] %>
socket: /var/lib/mysql/mysql.sock
# <<: *defaultは「default」を一つにまとめて使用するという意味なので
# 本番環境はDockerと干渉させないために「production」のみ個別で書きます
⑥Docker 시작
# imageをビルド
$ docker-compose build
# コンテナの実行
$ docker-compose up
⑦DB 만들기
다른 터미널 탭을 열고 앱 디렉토리로 이동
# DBを作成
$ docker-compose run web rails db:create
⑧ 브라우저 확인
http://localhost:3000/ 로 이동하여 부팅이 가능한지 확인합니다.
⑨Sequel Pro로 DB를 확인할 수 있도록 한다
평소 Sequel Pro에서 DB를 확인했기 때문에 Docker 환경에서도 Sequel Pro에서 확인할 수 있도록 연결합니다.
명명: 켜도 켜도 괜찮습니다.
호스트 이름 : 기본적으로 127.0.0.1이 될까 생각합니다 (자신의 IP 주소입니다)
사용자 이름: root (docker-compose.yml에 나열된 것입니다)
비밀번호 : password (docker-compose.yml에 나열된 것입니다)
데이터베이스: 비어 있고 괜찮습니다.
포트 : 4306 (docker-compose.yml의 포트 왼쪽의 번호가됩니다)
이상
현재는 AWS의 ECS로 배포하고 있으므로, 향후는 프로덕션 환경도 Docker의 구축을 할 예정으로,
CircleCI로 테스트 자동화와 terraform으로 인프라 구성의 코딩도 진행해 나가려고 합니다.
수정점이 있으면 가르쳐 주시면 감사하겠습니다.
참고
입문 Docker
DOCKER/KUBERNETES 실천 컨테이너 개발 입문
Reference
이 문제에 관하여(【Rails・MySQL・Docker】기존의 Rails5+MySQL의 앱에 Docker를 도입한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/miyomiyo344/items/7c027a8f7a59248563d1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# 作成するDockerイメージのベースとなるイメージを指定
FROM ruby:2.5.3
# Dockerイメージビルド時に、Dockerコンテナ内で実行するコマンドを定義
RUN apt-get update -qq && \
apt-get install -y build-essential \
libpq-dev \
nodejs
# 作業ディレクトリの作成
RUN mkdir /app_name
# Dockerfileをもとに生成したDockerコンテナ内で使える環境変数を指定
ENV APP_ROOT /app_name
WORKDIR $APP_ROOT
# ホストからGemfileをコンテナ上にコピー
ADD ./Gemfile $APP_ROOT/Gemfile
ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock
# Gemfileをbundle install
RUN bundle install
ADD . $APP_ROOT
docker-compose.yml
# Version 3はファイルの記述定義のうち安定して利用できる最新版とのことです
version: "3"
services:
# "db"というコンテナを定義
db:
# MySQLのイメージを指定します
image: mysql:5.7
environment:
# PasswordとUsernameはdatabase.ymlと合わせます
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: root
ports:
- "4306:3306"
# ポートはどちらも"3306"でも大丈夫ですが、左側を"4306"と別の番号にすることでSequel ProでデータをDBを確認できるようになります。
# "web"というコンテナを定義
web:
build: .
command: rails s -p 3000 -b '0.0.0.0'
# ローカルのディレクトリをマウント
volumes:
- .:/app_name
ports:
- "3000:3000"
# appコンテナとdbコンテナを連携
links:
- db
⑤database.yml 편집
database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
# PasswordとUsernameはdocker-compose.ymlと合わせます
username: root
password: password
host: db
development:
<<: *default
database: myapp_development
test:
<<: *default
database: myapp_test
production:
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password:
socket: /tmp/mysql.sock
database: myapp_production
username: root
password: <%= ENV['DATABASE_PASSWORD'] %>
socket: /var/lib/mysql/mysql.sock
# <<: *defaultは「default」を一つにまとめて使用するという意味なので
# 本番環境はDockerと干渉させないために「production」のみ個別で書きます
⑥Docker 시작
# imageをビルド
$ docker-compose build
# コンテナの実行
$ docker-compose up
⑦DB 만들기
다른 터미널 탭을 열고 앱 디렉토리로 이동
# DBを作成
$ docker-compose run web rails db:create
⑧ 브라우저 확인
http://localhost:3000/ 로 이동하여 부팅이 가능한지 확인합니다.
⑨Sequel Pro로 DB를 확인할 수 있도록 한다
평소 Sequel Pro에서 DB를 확인했기 때문에 Docker 환경에서도 Sequel Pro에서 확인할 수 있도록 연결합니다.
명명: 켜도 켜도 괜찮습니다.
호스트 이름 : 기본적으로 127.0.0.1이 될까 생각합니다 (자신의 IP 주소입니다)
사용자 이름: root (docker-compose.yml에 나열된 것입니다)
비밀번호 : password (docker-compose.yml에 나열된 것입니다)
데이터베이스: 비어 있고 괜찮습니다.
포트 : 4306 (docker-compose.yml의 포트 왼쪽의 번호가됩니다)
이상
현재는 AWS의 ECS로 배포하고 있으므로, 향후는 프로덕션 환경도 Docker의 구축을 할 예정으로,
CircleCI로 테스트 자동화와 terraform으로 인프라 구성의 코딩도 진행해 나가려고 합니다.
수정점이 있으면 가르쳐 주시면 감사하겠습니다.
참고
입문 Docker
DOCKER/KUBERNETES 실천 컨테이너 개발 입문
Reference
이 문제에 관하여(【Rails・MySQL・Docker】기존의 Rails5+MySQL의 앱에 Docker를 도입한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/miyomiyo344/items/7c027a8f7a59248563d1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
# PasswordとUsernameはdocker-compose.ymlと合わせます
username: root
password: password
host: db
development:
<<: *default
database: myapp_development
test:
<<: *default
database: myapp_test
production:
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password:
socket: /tmp/mysql.sock
database: myapp_production
username: root
password: <%= ENV['DATABASE_PASSWORD'] %>
socket: /var/lib/mysql/mysql.sock
# <<: *defaultは「default」を一つにまとめて使用するという意味なので
# 本番環境はDockerと干渉させないために「production」のみ個別で書きます
# imageをビルド
$ docker-compose build
# コンテナの実行
$ docker-compose up
⑦DB 만들기
다른 터미널 탭을 열고 앱 디렉토리로 이동
# DBを作成
$ docker-compose run web rails db:create
⑧ 브라우저 확인
http://localhost:3000/ 로 이동하여 부팅이 가능한지 확인합니다.
⑨Sequel Pro로 DB를 확인할 수 있도록 한다
평소 Sequel Pro에서 DB를 확인했기 때문에 Docker 환경에서도 Sequel Pro에서 확인할 수 있도록 연결합니다.
명명: 켜도 켜도 괜찮습니다.
호스트 이름 : 기본적으로 127.0.0.1이 될까 생각합니다 (자신의 IP 주소입니다)
사용자 이름: root (docker-compose.yml에 나열된 것입니다)
비밀번호 : password (docker-compose.yml에 나열된 것입니다)
데이터베이스: 비어 있고 괜찮습니다.
포트 : 4306 (docker-compose.yml의 포트 왼쪽의 번호가됩니다)
이상
현재는 AWS의 ECS로 배포하고 있으므로, 향후는 프로덕션 환경도 Docker의 구축을 할 예정으로,
CircleCI로 테스트 자동화와 terraform으로 인프라 구성의 코딩도 진행해 나가려고 합니다.
수정점이 있으면 가르쳐 주시면 감사하겠습니다.
참고
입문 Docker
DOCKER/KUBERNETES 실천 컨테이너 개발 입문
Reference
이 문제에 관하여(【Rails・MySQL・Docker】기존의 Rails5+MySQL의 앱에 Docker를 도입한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/miyomiyo344/items/7c027a8f7a59248563d1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# DBを作成
$ docker-compose run web rails db:create
http://localhost:3000/ 로 이동하여 부팅이 가능한지 확인합니다.
⑨Sequel Pro로 DB를 확인할 수 있도록 한다
평소 Sequel Pro에서 DB를 확인했기 때문에 Docker 환경에서도 Sequel Pro에서 확인할 수 있도록 연결합니다.
명명: 켜도 켜도 괜찮습니다.
호스트 이름 : 기본적으로 127.0.0.1이 될까 생각합니다 (자신의 IP 주소입니다)
사용자 이름: root (docker-compose.yml에 나열된 것입니다)
비밀번호 : password (docker-compose.yml에 나열된 것입니다)
데이터베이스: 비어 있고 괜찮습니다.
포트 : 4306 (docker-compose.yml의 포트 왼쪽의 번호가됩니다)
이상
현재는 AWS의 ECS로 배포하고 있으므로, 향후는 프로덕션 환경도 Docker의 구축을 할 예정으로,
CircleCI로 테스트 자동화와 terraform으로 인프라 구성의 코딩도 진행해 나가려고 합니다.
수정점이 있으면 가르쳐 주시면 감사하겠습니다.
참고
입문 Docker
DOCKER/KUBERNETES 실천 컨테이너 개발 입문
Reference
이 문제에 관하여(【Rails・MySQL・Docker】기존의 Rails5+MySQL의 앱에 Docker를 도입한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/miyomiyo344/items/7c027a8f7a59248563d1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
현재는 AWS의 ECS로 배포하고 있으므로, 향후는 프로덕션 환경도 Docker의 구축을 할 예정으로,
CircleCI로 테스트 자동화와 terraform으로 인프라 구성의 코딩도 진행해 나가려고 합니다.
수정점이 있으면 가르쳐 주시면 감사하겠습니다.
참고
입문 Docker
DOCKER/KUBERNETES 실천 컨테이너 개발 입문
Reference
이 문제에 관하여(【Rails・MySQL・Docker】기존의 Rails5+MySQL의 앱에 Docker를 도입한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/miyomiyo344/items/7c027a8f7a59248563d1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(【Rails・MySQL・Docker】기존의 Rails5+MySQL의 앱에 Docker를 도입한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/miyomiyo344/items/7c027a8f7a59248563d1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)