初心者ですが既存のrails6のアプリにMySQLでDockerを導入できたので備忘録として記事を残します。
もし間違っていたら教えていただきたいです。
Ruby on Rails 「途中まで作ったアプリにDockerを導入したい」に挑戦してみる(MySQL / Sequel Pro)
基本的にはこちらの方の記事を参考にさせていただきました。
1 Dockerfile/docker-compose.ymlを既存アプリのルートディレクトリに作成する。
2 Dockerfileを編集する
Dockerfile
FROM ruby:2.6
RUN apt-get update -qq && \
apt-get install -y build-essential \
libpq-dev \
nodejs
RUN mkdir /app_name
ENV APP_ROOT /app_name
WORKDIR $APP_ROOT
ADD ./Gemfile $APP_ROOT/Gemfile
ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock
RUN gem install bundler
RUN bundle install
ADD . $APP_ROOT
FROM ruby:2.6 について
私のアプリはruby2.6.2で作られているので、このように記述しました。
3 docker-compose.ymlを編集する
docker-compose.yml
version: '3'
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: 'password'
ports:
- "4306:3306"
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/app_name
ports:
- "3000:3000"
depends_on:
- db
基本的には参考記事通りです。
4 database.yml編集する。
config/database.yml
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: password
socket: /tmp/mysql.sock
host: db
# host: localhost これは以前までのもので一応コメントアウトで残しておきました。
development:
<<: *default
database: 自分のDBの名前
5 docker-compose build でコンテナを作成する。
[自分のアプリ名] $ docker-compose build
これで新たにDockerのコンテナが作成されます。
一番最初だけ時間がかかるので気長に待ちましょう。
6 Dockerコンテナ上でDB作成&migrationを実行
rails6の場合ここで以下のようなエラーが出ると思います。
ySQL Community Server (GPL)
web_1 | => Booting Puma
web_1 | => Rails 6.0.3.1 application starting in development
web_1 | => Run `rails server --help` for more startup options
web_1 | sh: 1: yarn: not found
web_1 |
web_1 |
web_1 | ========================================
web_1 | Your Yarn packages are out of date!
web_1 | Please run `yarn install --check-files` to update.
web_1 | ========================================
web_1 |
web_1 |
web_1 | To disable this check, please change `check_yarn_integrity`
web_1 | to `false` in your webpacker config file (config/webpacker.yml).
web_1 |
web_1 |
web_1 |
web_1 |
web_1 |
web_1 | Exiting
このエラーを解消したいのでエラー文通りに
config/webpacker.yml
# Verifies that correct packages and versions are installed by inspecting package.json, yarn.lock, and node_modules
check_yarn_integrity: false
このようにfalseに変えることでエラーを解消できました。
参考記事
yarnが原因でdocker-compose up ができない ( Your Yarn packages are out of date!)」に挑戦してみる(MySQL / Sequel Pro)
本題に戻ります
[自分のアプリ名] $ docker-compose run web bundle exec rake db:create
このコマンドでDocker上にDBが作成されます。
レコードは最初からになるので注意してください。
[自分のアプリ名] $ docker-compose run web bundle exec rake db:migrate
migrateも忘れずに行いましょう。
7 docker-compose up でコンテナを起動する。
[自分のアプリ名] $ docker-compose up
これでローカルホストで表示できるようになりました。
コンテナが立ち上がったら
http://localhost:3000/
にアクセスしてみてください。