Rails 6✖️MySQLで作成したアプリに途中からDockerを導入する方法
はじめに
ポートフォリオの開発環境にDockerを導入するにあたり、多くの記事を参考にさせていただきました。
しかし、その多くが作成の初期段階から導入する方法であったり、バージョンや使用データベースに違いがあったりで、苦戦しました。
改善箇所はあるかと思いますが、なんとかエラーなく起動することができたのでメモとして残しておきます。
環境
・macOS Catalina
・Ruby:2.6.5
・Rails:6.0.3
・MySQL:5.6
手順
1.DockerをMacにインストールする
2.各種ファイルを新しく用意して編集する
3.database.ymlの編集
4.コンテナをbuildする
5.Dockerコンテナ上にデータベースを作成
6.コンテナを起動する
1.DockerをMacにインストールする
Dockerをインストールし、画面右上にクジラのアイコンが出ている状態にします。
2.各種ファイルを用意・編集
下記の3つのファイルを新規で作成します。
・Dockerfile
・docker-compose.yml
・entrypoint.sh
作成したファイルに記述していきます。
※アプリ名をいれる箇所は仮でアプリ名としています。
・Dockerfile
FROM ruby:2.6.5
RUN 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
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs yarn
WORKDIR /アプリ名
COPY Gemfile /アプリ名/Gemfile
COPY Gemfile.lock /アプリ名/Gemfile.lock
RUN gem install bundler
RUN bundle install
COPY . /アプリ名
RUN yarn install --check-files
RUN bundle exec rails webpacker:compile
# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
・docker-compose.yml
version: "3"
services:
db:
image: mysql:5.6
environment:
MYSQL_ROOT_PASSWORD: password
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/アプリ名
ports:
- "3000:3000"
depends_on:
- db
stdin_open: true
tty: true
environment:
- MYSQL_HOST=db
- MYSQL_PASSWORD=password
volumes:
mysql-data:
driver: local
・entrypoint.sh
#!/bin/bash
set -e
# Remove a potentially pre-existing server.pid for Rails.
rm -f /アプリ名/tmp/pids/server.pid
# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"
3.database.ymlの編集
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: <%= ENV['MYSQL_PASSWORD'] || '' %>
socket: /tmp/mysql.sock
host: <%= ENV['MYSQL_HOST'] || 'localhost' %>
4.イメージをbuildする
docker-compose build
5.Dockerコンテナ上にデータベースを作成
$ docker-compose run web bundle exec rake db:create
$ docker-compose run web bundle exec rake db:migrate
6.コンテナを起動する
$ docker-compose up
最後に
これでlocalhost3000にてアクセスできます。
参考
・Ruby on Rails 「途中まで作ったアプリにDockerを導入したい」に挑戦してみる(MySQL / Sequel Pro)
・【Rails】Rails 6.0 x Docker x MySQLで環境構築
・【Rails環境構築】Docker + Rails + Mysql
・DockerでRuby on Railsの環境構築を行うためのステップ【Rails 6対応】
・Rails 6 + MySQLの環境構築をDocker composeで作る
Author And Source
この問題について(Rails 6✖️MySQLで作成したアプリに途中からDockerを導入する方法), 我々は、より多くの情報をここで見つけました https://qiita.com/yohei95/items/bb8c1d0dbafe02a85678著者帰属:元の著者の情報は、元の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 .