😇

M1 ProのDockerで沼にハマった話

2021/11/28に公開
2

環境構築の話はこちらから

https://zenn.dev/kenkenlysh/articles/c84ec0110a71e6

背景

開発環境構築が終わり、業務で使用している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用)をインストールします。
https://docs.docker.com/desktop/mac/release-notes/

Docker for Macの禁じ手

下の設定画面でCPU数を9以上にすると、docker engineがstoppedとstartingを無限ループしてしまいます。再起動しても、無限ループ終わりません。
もし、こうなったら一度Docker for Macをアンインストールして、再度インストールするしかないです。
docker config

参考URL

https://github.com/docker/for-mac/issues/6063

いざ、Docker for Macの沼へ

準備

  1. 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が用意されている
https://hub.docker.com/_/postgres?tab=tags&page=1&name=10.5-alpine

  1. 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

https://github.com/evilmartians/terraforming-rails/issues/34

ビルド編

dockerfileがあるディレクトリで

docker-compose build
docker-compose run --rm web bin/setup

初回起動時、Javascriptのコンパイルが上手くいかない場合、
rails webpacker:installを実行すると上手くいくこともある

M1 ChipならIntel版より高速に動作すると思いきや、コンテナ起動速度はあまり変わらないかも。。。
全てのコンテナをARM版へ移行できれば、起動速度は速くなるかもしれません。
また、Docker for Macから他のツールへ移行するのもいいかもしれません。
今、移行候補としているのはlimaです。
https://github.com/lima-vm/lima

Discussion

rikusen0335rikusen0335

蛇足ですみません。

config/environments/development.rbの編集

の部分ですが、
個人的に混乱を招いてしまったので、同じような人が出ないように

config/environments/development.rb
# config.file_watcher = ActiveSupport::FileUpdateChecker

のようにコメントアウトするように書いていただけると助かります。

助かる記事をありがとうございました。

sontixyousontixyou

記事を読んでいただき、ありがとうございます!
config/environments/development.rbのdiffを確認できるようにしました。