Docker Desktop for Mac 2.4.0.0以降がつらい
(お試しで作成)
「v3.1.0 が出てるのに v2.4.0.0 の話ですか笑」と思う人もいるかもですが 2.4.0.0 になって発生して未だに直ってないシリーズの不具合たちなのでご参考まで(リリースノート)
何がつらい?
-
MySQLのコンテナが突然動かなくなってつらい(gRPC FUSE とははなんだったのか...
https://zenn.dev/mythrnr/articles/f01c5bb2596b31b91ae1 -
ファイル共有まわりがつらい(ホットリロードが効かなくなりがち
-
コンテナが起動しなくなる(致命的
https://github.com/docker/for-mac/issues/4957
「再起動すれば解決するよ」って、このバグ 50% くらいの確率で発生するんですが...???
以上の理由でまだ 2.3.0.5 を使っているが、大変安定している。
とはいえ Docker Engine のバージョンが 19.03.12 で、その後に セキュリティ関連のアップデート があるので早く直ってほしいなぁという気持ち
後日談
2021/12/03 にCatalina + 2.3.0.5 から Monterey + 4.2.0 にアップデートした(振り幅がすごい)ので、 2.4.* 以降で辛かった点がどうなったか記載しておく
- コンテナが起動しなくなる最悪の不具合 => 解消🎉
- MySQLコンテナでの gRPC FUSE 有効時の不具合 => 後ほど試す
- ホットリロード周り(inotify) => ホストOS上での編集は検知しないが、コンテナ内の vim などで編集すると検知される。Remote Container を使えば解消できそう。後ほど試す
lima が良さそうなので導入を検討中
-
limactl start ${name}.ymlで案件ごとにVMを立てられるので良さそう✨ - 速い(と言われている)👀
- ホットリロードはやっぱり効かない😂
M1 Max マシンを購入したので Docker Desktop と lima 両方試した
- ARMなのでオフィシャルのMySQLコンテナが動かない =>
mysql/mysql-server:8.0を使うが、オフィシャルmysql:8.0とは/entrypoint.shの中身がかなり違うので色々と修正が必要だった(記事化したい)。Aurora互換のために5.7を使っていたが、ARM版の提供は無いので互換性に気をつけつつ諦めるしかない。Auroraも8.0互換が出たので今後は困らなくなっていくはず。 - ホットリロードはやっぱり効かない😂
Intel Mac + Docker Desktop + VSCode(Local) + Go + MySQL + Nginx + ホットリロード(怪しい) から M1 Mac + Lima + VSCode(Remote Container) + Go + MySQL + Nginx + ホットリロード(バッチリ) な環境に移行できた
Remote Container
これまでの docker-compose のファイルで動作するように devcontainer.json を設定して無事動作。これまではデーモンで起動せずに直接ログを眺めながら開発していたので若干不便だが、慣れのレベルのはず。
Go のホットリロードツール
-
realize: 将来性の点でNG
→これまで go mod を一時的にOFFにして無理やりインストールして動かしていた -
air: 動作させたいプロジェクトだとクラッシュする -
reflex: 動かず
→ コマンドもinotifywaitと利便性に差がない
結局 inotifywait と go build をシェルで連携して解決。枯れたツールが最強という結果に。
ともあれ Docker Desktop でホストからのファイルの変更が検知できなくなったのは痛手。Lima も検知できないので別のところに起因していそう。
Docker Desktop を 4.2 から 4.3 にアップデートすると Remote Container が起動できなくなる...。Remote Container での起動時に下のコマンドが失敗している
docker-compose -f path/to/docker-compose.yml --profile * config
追記: aarch64 向けにリリースは追加されているので、下記は不要
M1 Mac + Docker Desktop + VSCode(Remote Container) + Rust(AlpineLinux) + Nginx + ホットリロード(バッチリ) を構築しようとしたら rust-analyzer が aarch64-unknown-linux-musl 向けにリリースされておらず、コンテナ内で補完が効かない
なので、自前でビルドする。下記手順で問題なかった
FROM rust:alpine
RUN
(略)
&& export RUSTUP_TARGET="`uname -m`-unknown-linux-musl" \
&& cd /tmp \
&& git clone -b "2021-12-13" https://github.com/rust-analyzer/rust-analyzer.git \
&& cd rust-analyzer \
&& cargo build \
--manifest-path ./crates/rust-analyzer/Cargo.toml \
--bin rust-analyzer \
--target ${RUSTUP_TARGET} \
--release \
&& mv target/${RUSTUP_TARGET}/release/rust-analyzer ${RUST_ANALYZER_PATH} \
&& chmod +x ${RUST_ANALYZER_PATH} \
(略)