【備忘録】Rails+MySQLの環境構築をDockerでおこなう
前提
ローカル環境
- macOS Mojave10.14.6
- Docker for mac 2.2.0.5
バージョン
- Ruby...2.6.3
- Rails...5.2.4.1
- alpine
その他
プロジェクト用ディレクトリを用意
$ mkdir myapp
$ cd myapp
ファイル作成
$ touch docker-compose.yml Dockerfile Gemfile Gemfile.lock
各ファイルを編集
- .env.example
DB_NAME=myapp
DB_TEST_NAME=myapp_test
DB_USER=admin
DB_PASS=admin
DB_ROOT_PASS=password
TZ=Asia/Tokyo
- docker-compose.yml
version: "3"
services:
app:
build: .
volumes:
- .:/var/www/myapp
command: rails s -p 8000 -b '0.0.0.0'
ports:
- 13000:8000
links:
- db
- db-test
db:
image: mysql:5.7
environment:
- MYSQL_DATABASE=${DB_NAME}
- MYSQL_USER=${DB_USER}
- MYSQL_PASSWORD=${DB_PASS}
- MYSQL_ROOT_PASSWORD=${DB_ROOT_PASS}
- TZ=${TZ}
ports:
- 23306:3306
db-test:
image: mysql:5.7
environment:
- MYSQL_DATABASE=${DB_TEST_NAME}
- MYSQL_USER=${DB_USER}
- MYSQL_PASSWORD=${DB_PASS}
- MYSQL_ROOT_PASSWORD=${DB_ROOT_PASS}
- TZ=${TZ}
ports:
- 33306:3306
- Dockerfile
FROM ruby:2.6.3-alpine3.10
RUN apk --update --no-cache add git \
tzdata \
libxml2-dev \
curl-dev \
make \
gcc \
libc-dev \
g++ \
mariadb-dev \
linux-headers \
nodejs
ENV APP_ROOT /var/www/myapp
WORKDIR $APP_ROOT
COPY ./Gemfile $APP_ROOT/Gemfile
COPY ./Gemfile.lock $APP_ROOT/Gemfile.lock
RUN bundle install && \
apk update
COPY . $APP_ROOT
RUN rm -rf /usr/local/bundle/cache/* ${APP_ROOT}/vendor/bundle/cache/*
- Gemfile
source 'https://rubygems.org'
gem 'rails', '5.2.2'
.env.exampleをコピーして.env作成
$ cp .env.example .env
// コピー後、値をPJに応じて変更
アプリケーション作成
$ docker-compose run app rails new . --force --no-deps --database=mysql --skip-bundle
- ディレクトリが下記のようにできていれば成功
$ tree -L 1 .
.
├── Dockerfile
├── Gemfile
├── Gemfile.lock
├── README.md
├── Rakefile
├── app
├── bin
├── config
├── config.ru
├── db
├── docker-compose.yml
├── lib
├── log
├── package.json
├── public
├── storage
├── test
├── tmp
└── vendor
config/database.ymlを編集
$ vi config/database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: admin # docker-compose.ymlの設定と合わせる
password: admin # docker-compose.ymlの設定と合わせる
host: db # docker-compose.ymlのサービス名と合わせる
development:
<<: *default
database: myapp # docker-compose.ymlの設定と合わせる
host: db # docker-compose.ymlの設定と合わせる
(中略)
test:
<<: *default
database: myapp_test # docker-compose.ymlの設定と合わせる
host: db-test # docker-compose.ymlの設定と合わせる
(中略)
production:
<<: *default
database: myapp_production
username: admin # docker-compose.ymlの設定と合わせる
password: <%= ENV['TESTAPP_DATABASE_PASSWORD'] %>
docker-compose
$ docker-compose build
$ docker-compose up -d
$ docker-compose exec app ash
$ rails -v // バージョンが表示されれば成功
$ rails db:create
画面確認
$ mkdir myapp
$ cd myapp
ファイル作成
$ touch docker-compose.yml Dockerfile Gemfile Gemfile.lock
各ファイルを編集
- .env.example
DB_NAME=myapp
DB_TEST_NAME=myapp_test
DB_USER=admin
DB_PASS=admin
DB_ROOT_PASS=password
TZ=Asia/Tokyo
- docker-compose.yml
version: "3"
services:
app:
build: .
volumes:
- .:/var/www/myapp
command: rails s -p 8000 -b '0.0.0.0'
ports:
- 13000:8000
links:
- db
- db-test
db:
image: mysql:5.7
environment:
- MYSQL_DATABASE=${DB_NAME}
- MYSQL_USER=${DB_USER}
- MYSQL_PASSWORD=${DB_PASS}
- MYSQL_ROOT_PASSWORD=${DB_ROOT_PASS}
- TZ=${TZ}
ports:
- 23306:3306
db-test:
image: mysql:5.7
environment:
- MYSQL_DATABASE=${DB_TEST_NAME}
- MYSQL_USER=${DB_USER}
- MYSQL_PASSWORD=${DB_PASS}
- MYSQL_ROOT_PASSWORD=${DB_ROOT_PASS}
- TZ=${TZ}
ports:
- 33306:3306
- Dockerfile
FROM ruby:2.6.3-alpine3.10
RUN apk --update --no-cache add git \
tzdata \
libxml2-dev \
curl-dev \
make \
gcc \
libc-dev \
g++ \
mariadb-dev \
linux-headers \
nodejs
ENV APP_ROOT /var/www/myapp
WORKDIR $APP_ROOT
COPY ./Gemfile $APP_ROOT/Gemfile
COPY ./Gemfile.lock $APP_ROOT/Gemfile.lock
RUN bundle install && \
apk update
COPY . $APP_ROOT
RUN rm -rf /usr/local/bundle/cache/* ${APP_ROOT}/vendor/bundle/cache/*
- Gemfile
source 'https://rubygems.org'
gem 'rails', '5.2.2'
.env.exampleをコピーして.env作成
$ cp .env.example .env
// コピー後、値をPJに応じて変更
アプリケーション作成
$ docker-compose run app rails new . --force --no-deps --database=mysql --skip-bundle
- ディレクトリが下記のようにできていれば成功
$ tree -L 1 .
.
├── Dockerfile
├── Gemfile
├── Gemfile.lock
├── README.md
├── Rakefile
├── app
├── bin
├── config
├── config.ru
├── db
├── docker-compose.yml
├── lib
├── log
├── package.json
├── public
├── storage
├── test
├── tmp
└── vendor
config/database.ymlを編集
$ vi config/database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: admin # docker-compose.ymlの設定と合わせる
password: admin # docker-compose.ymlの設定と合わせる
host: db # docker-compose.ymlのサービス名と合わせる
development:
<<: *default
database: myapp # docker-compose.ymlの設定と合わせる
host: db # docker-compose.ymlの設定と合わせる
(中略)
test:
<<: *default
database: myapp_test # docker-compose.ymlの設定と合わせる
host: db-test # docker-compose.ymlの設定と合わせる
(中略)
production:
<<: *default
database: myapp_production
username: admin # docker-compose.ymlの設定と合わせる
password: <%= ENV['TESTAPP_DATABASE_PASSWORD'] %>
docker-compose
$ docker-compose build
$ docker-compose up -d
$ docker-compose exec app ash
$ rails -v // バージョンが表示されれば成功
$ rails db:create
画面確認
$ touch docker-compose.yml Dockerfile Gemfile Gemfile.lock
- .env.example
DB_NAME=myapp
DB_TEST_NAME=myapp_test
DB_USER=admin
DB_PASS=admin
DB_ROOT_PASS=password
TZ=Asia/Tokyo
- docker-compose.yml
version: "3"
services:
app:
build: .
volumes:
- .:/var/www/myapp
command: rails s -p 8000 -b '0.0.0.0'
ports:
- 13000:8000
links:
- db
- db-test
db:
image: mysql:5.7
environment:
- MYSQL_DATABASE=${DB_NAME}
- MYSQL_USER=${DB_USER}
- MYSQL_PASSWORD=${DB_PASS}
- MYSQL_ROOT_PASSWORD=${DB_ROOT_PASS}
- TZ=${TZ}
ports:
- 23306:3306
db-test:
image: mysql:5.7
environment:
- MYSQL_DATABASE=${DB_TEST_NAME}
- MYSQL_USER=${DB_USER}
- MYSQL_PASSWORD=${DB_PASS}
- MYSQL_ROOT_PASSWORD=${DB_ROOT_PASS}
- TZ=${TZ}
ports:
- 33306:3306
- Dockerfile
FROM ruby:2.6.3-alpine3.10
RUN apk --update --no-cache add git \
tzdata \
libxml2-dev \
curl-dev \
make \
gcc \
libc-dev \
g++ \
mariadb-dev \
linux-headers \
nodejs
ENV APP_ROOT /var/www/myapp
WORKDIR $APP_ROOT
COPY ./Gemfile $APP_ROOT/Gemfile
COPY ./Gemfile.lock $APP_ROOT/Gemfile.lock
RUN bundle install && \
apk update
COPY . $APP_ROOT
RUN rm -rf /usr/local/bundle/cache/* ${APP_ROOT}/vendor/bundle/cache/*
- Gemfile
source 'https://rubygems.org'
gem 'rails', '5.2.2'
.env.exampleをコピーして.env作成
$ cp .env.example .env
// コピー後、値をPJに応じて変更
アプリケーション作成
$ docker-compose run app rails new . --force --no-deps --database=mysql --skip-bundle
- ディレクトリが下記のようにできていれば成功
$ tree -L 1 .
.
├── Dockerfile
├── Gemfile
├── Gemfile.lock
├── README.md
├── Rakefile
├── app
├── bin
├── config
├── config.ru
├── db
├── docker-compose.yml
├── lib
├── log
├── package.json
├── public
├── storage
├── test
├── tmp
└── vendor
config/database.ymlを編集
$ vi config/database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: admin # docker-compose.ymlの設定と合わせる
password: admin # docker-compose.ymlの設定と合わせる
host: db # docker-compose.ymlのサービス名と合わせる
development:
<<: *default
database: myapp # docker-compose.ymlの設定と合わせる
host: db # docker-compose.ymlの設定と合わせる
(中略)
test:
<<: *default
database: myapp_test # docker-compose.ymlの設定と合わせる
host: db-test # docker-compose.ymlの設定と合わせる
(中略)
production:
<<: *default
database: myapp_production
username: admin # docker-compose.ymlの設定と合わせる
password: <%= ENV['TESTAPP_DATABASE_PASSWORD'] %>
docker-compose
$ docker-compose build
$ docker-compose up -d
$ docker-compose exec app ash
$ rails -v // バージョンが表示されれば成功
$ rails db:create
画面確認
$ cp .env.example .env
// コピー後、値をPJに応じて変更
$ docker-compose run app rails new . --force --no-deps --database=mysql --skip-bundle
- ディレクトリが下記のようにできていれば成功
$ tree -L 1 .
.
├── Dockerfile
├── Gemfile
├── Gemfile.lock
├── README.md
├── Rakefile
├── app
├── bin
├── config
├── config.ru
├── db
├── docker-compose.yml
├── lib
├── log
├── package.json
├── public
├── storage
├── test
├── tmp
└── vendor
config/database.ymlを編集
$ vi config/database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: admin # docker-compose.ymlの設定と合わせる
password: admin # docker-compose.ymlの設定と合わせる
host: db # docker-compose.ymlのサービス名と合わせる
development:
<<: *default
database: myapp # docker-compose.ymlの設定と合わせる
host: db # docker-compose.ymlの設定と合わせる
(中略)
test:
<<: *default
database: myapp_test # docker-compose.ymlの設定と合わせる
host: db-test # docker-compose.ymlの設定と合わせる
(中略)
production:
<<: *default
database: myapp_production
username: admin # docker-compose.ymlの設定と合わせる
password: <%= ENV['TESTAPP_DATABASE_PASSWORD'] %>
docker-compose
$ docker-compose build
$ docker-compose up -d
$ docker-compose exec app ash
$ rails -v // バージョンが表示されれば成功
$ rails db:create
画面確認
$ vi config/database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: admin # docker-compose.ymlの設定と合わせる
password: admin # docker-compose.ymlの設定と合わせる
host: db # docker-compose.ymlのサービス名と合わせる
development:
<<: *default
database: myapp # docker-compose.ymlの設定と合わせる
host: db # docker-compose.ymlの設定と合わせる
(中略)
test:
<<: *default
database: myapp_test # docker-compose.ymlの設定と合わせる
host: db-test # docker-compose.ymlの設定と合わせる
(中略)
production:
<<: *default
database: myapp_production
username: admin # docker-compose.ymlの設定と合わせる
password: <%= ENV['TESTAPP_DATABASE_PASSWORD'] %>
$ docker-compose build
$ docker-compose up -d
$ docker-compose exec app ash
$ rails -v // バージョンが表示されれば成功
$ rails db:create
画面確認
Author And Source
この問題について(【備忘録】Rails+MySQLの環境構築をDockerでおこなう), 我々は、より多くの情報をここで見つけました https://qiita.com/kaba_farm/items/4c0a69a064969b824b9d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .