#はじめに
dockerにまずは触れてみるということで、作成中のRailsアプリをコンテナに入れてまずは開発環境を作ってみた。
ちなみにこちらの記事を参照に導入を行った。
Ruby on Rails 「途中まで作ったアプリにDockerを導入したい」に挑戦してみる
#前提
Railsアプリ作成済
#環境
Mac OS Catalina
Ruby 2.6.5
Rails 6.0.0
MySQL 5.6.47
#行ったこと
今回作成したファイルは「Dockerfile」と「docker-compose.yml」の2つ。
(前提としてrailsのアプリを作成済なので、「Gemfile」と「Gemfile.lock」は今回は新たに作る必要なし。)
ただし、Gemfile.lockはコンテナをbuildする前に一度全て記述を削除してbundle installが必要。
#記述がある場合は消しておく。
#コンテナをbuild前に以下を実行
% docker-compose run web bundle install
次にコンテナをbuild
% docker-compose build
それからdockerにもDBを作らなければいけないため、以下を実行
% docker-compose run web bundle exec rake db:create
% docker-compose run web bundle exec rake db:migrate
これでコンテナを起動する
% docker-compose up
起動はできたが、ブラウザで確認するも接続ができない。
まずはコンテナの状態を確認する。
#起動中のDockerコンテナを表示
% docker ps
=>
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ad25b9c231b9 mysql:5.7 "docker-entrypoint.s…" 7 minutes ago Up 7 minutes 33060/tcp, 0.0.0.0:4306->3306/tcp drill_app2_db_1
Mysqlしか動いていない。よく起動画面を見たら、
web_1 | sh: 1: yarn: not found
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 | Exiting
web側?(言い方が分からない)が起動できていない。yarnが古いらしいのでアップデートする。
% docker-compose run web yarn upgrate
=>
Error response from daemon: OCI runtime create failed: container_linux.go:349:
starting container process caused "exec: \"yarn\": executable file not found in $PATH": unknown
これもエラーが出てしまい、upgradeできない。どうしようかと考えていたところ、同じ状況の記事を発見したのでこちらに沿ってファイルの設定を変更する。
yarnが原因でdocker-compose up ができない ( Your Yarn packages are out of date!)
# Verifies that correct packages and versions are installed by inspecting package.json, yarn.lock, and node_modules
#下記をtrue=>falseに変更
check_yarn_integrity: false
"check_yarn_integrity:"は、js用のパッケージが古くなっていたら知らせてくれる設定らしい。ここではいったんそれをoffにする。
webpacker の check_yarn_integrity オプションについて調べてみた
これでもう一度、起動。
% docker-compose up
これでとりあえず起動完了。ブラウザも表示されるようになった。mysqlへの接続もok。
#終わりに
どうもrails6系ではwebpackが入ったため、yarnのエラーが絡んでくるとかなんとか。
それからGemlock.fileを消したのがまずかったのかもしれない。(すみません、まだ詳しく調べられていません。)