Open7

Docker Desktop for Mac 2.4.0.0以降がつらい

ピン留めされたアイテム
mythrnrmythrnr

(お試しで作成)

v3.1.0 が出てるのに v2.4.0.0 の話ですか笑」と思う人もいるかもですが 2.4.0.0 になって発生して未だに直ってないシリーズの不具合たちなのでご参考まで(リリースノート

何がつらい?

以上の理由でまだ 2.3.0.5 を使っているが、大変安定している。
とはいえ Docker Engine のバージョンが 19.03.12 で、その後に セキュリティ関連のアップデート があるので早く直ってほしいなぁという気持ち

mythrnrmythrnr

後日談

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 互換が出たので今後は困らなくなっていくはず。
  • ホットリロードはやっぱり効かない😂
mythrnrmythrnr

Lima のVMを案件ごとに立てると切り替えるタイミングで DOCKER_HOST を書き換える必要があるので頻繁に切り替える場合は少々面倒

mythrnrmythrnr

Docker Desktop for Mac 上の mysql:5.7--platform=linux/amd64 をつけるだけで動くようになった。Lima on M1 は --platform=linux/amd64 を付けても動作しない

mythrnrmythrnr

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 と利便性に差がない

結局 inotifywaitgo build をシェルで連携して解決。枯れたツールが最強という結果に。
ともあれ Docker Desktop でホストからのファイルの変更が検知できなくなったのは痛手。Lima も検知できないので別のところに起因していそう。

mythrnrmythrnr

Docker Desktop を 4.2 から 4.3 にアップデートすると Remote Container が起動できなくなる...。Remote Container での起動時に下のコマンドが失敗している

docker-compose -f path/to/docker-compose.yml --profile * config
mythrnrmythrnr

追記: aarch64 向けにリリースは追加されているので、下記は不要

M1 Mac + Docker Desktop + VSCode(Remote Container) + Rust(AlpineLinux) + Nginx + ホットリロード(バッチリ) を構築しようとしたら rust-analyzeraarch64-unknown-linux-musl 向けにリリースされておらず、コンテナ内で補完が効かない

https://github.com/rust-analyzer/rust-analyzer/releases

なので、自前でビルドする。下記手順で問題なかった

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} \
(略)