😇
M1 ProのDockerで沼にハマった話
環境構築の話はこちらから
背景
開発環境構築が終わり、業務で使用しているDocker for MacでRailsアプリのコンテナ起動完了するまでに、土日2日間かかってしまった経験を共有したいと思います。
開発環境バージョン
Ruby: 2.7.2
Rails: 6.0
Postgesql: 10.5
Docker for Macをインストール
Intel版でDocker for Mac version:4.2.0を使用していましたが、たまにソースコードの差分を検知できないことがあるため、今回はバージョン4.1.1(M1用)をインストールします。
Docker for Macの禁じ手
下の設定画面でCPU数を9以上にすると、docker engineがstoppedとstartingを無限ループしてしまいます。再起動しても、無限ループ終わりません。
もし、こうなったら一度Docker for Macをアンインストールして、再度インストールするしかないです。
参考URL
いざ、Docker for Macの沼へ
準備
- docker-composeの編集
docker-composeには起動させるイメージを指定していると思います。
ホストOSはcircleci/ruby:2.7.2-buster-node-browsersを使用しているため、他のイメージのプラットフォームをplatform: linux/x86_64で指定する必要があります。
db:
image: postgres:10.5-alpine
platform: linux/x86_64 # ←ここ
複数のplatformが用意されている
- config/environments/development.rbの編集
rails db:migrate
を実行時、このエラー出る。
Function not implemented - Failed to initialize inotify (Errno::ENOSYS)
そこでconfig/environments/development.rbを編集した。
config/environments/development.rb
- config.file_watcher = ActiveSupport::EventedFileUpdateChecker
+ config.file_watcher = ActiveSupport::FileUpdateChecker
参考URL
ビルド編
dockerfileがあるディレクトリで
docker-compose build
docker-compose run --rm web bin/setup
初回起動時、Javascriptのコンパイルが上手くいかない場合、
rails webpacker:install
を実行すると上手くいくこともある
M1 ChipならIntel版より高速に動作すると思いきや、コンテナ起動速度はあまり変わらないかも。。。
全てのコンテナをARM版へ移行できれば、起動速度は速くなるかもしれません。
また、Docker for Macから他のツールへ移行するのもいいかもしれません。
今、移行候補としているのはlimaです。
Discussion
蛇足ですみません。
の部分ですが、
個人的に混乱を招いてしまったので、同じような人が出ないように
のようにコメントアウトするように書いていただけると助かります。
助かる記事をありがとうございました。
記事を読んでいただき、ありがとうございます!
config/environments/development.rb
のdiffを確認できるようにしました。