5
8

More than 1 year has passed since last update.

備忘録 M1Mac+Lima+DockerでDocker compose開発する際のポイント

Last updated at Posted at 2021-12-27

tl;dr

  • 多くのイメージはarm64v8でimageを探すと見つかることがあるよ
  • mysqlはmysql-serverはmysqlと動きが異なるので、arm64v8/mariadbを使ったほうが良いよ
  • lima + dockerに接続するならunix socketが良いよ

Lima+Docker+Docker Compose+OSX環境

DockerDesktopがおもすぎる問題は非常に言われており、ベンチマークも各所に上がっている。DockerDesktopが重いシンプルな理由としては以下が挙げられる

  • 別アーキテクチャ(Intel x64)のエミュレートをしているため、動作が超非効率
  • Macのディスクをマウントして動作させているため、これまた動作が非効率(Intel macでも同様の現象あり)

この問題はひとえにCPUのアーキテクチャが全く異なることからきている。

筆者は Lima + Docker + DockerCompose 環境でPython/PHPの開発が多いのだが、全てをubuntuから独自イメージを作ってない人にとっては、ハマりがちという問題がある。
2日ハマりきった経験をもとに知りたかった情報をまとめます。

arm64v8を使おう

M1MacのCPUのアーキテクチャ名は linux/amd64 でも、 linux/x86_64 でもなく、 「linux/arm64v8」であることをしっかりと念頭に置く必要がある。
現在M1Macのような新しいアーキテクチャ対応のDockerプログラムは徐々に出つつあり、メジャーなDocker imageでは対応されつつあるが、mysql(8のみ限定的に対応)やphpmyadmin(公式では非対応)などのDockerを使っている場合など、そのままでは動作しないケースも多い。

2021年12月時点では、「arm64v8 <ソフト名> docker」のような検索をすることで野良docker imageが出てくることが多いので、それを使うという手もある。

以下は、よく行う変換のルールだ
* mysql -> arm64v8/mariadb (mysql5.7の場合はmariadb10.3, mysql8の場合は mariadb10.7)
* phpmyadmin/phpmyadmin -> arm64v8/phpmyadmin
* wernight/ngrok -> athombv/ngrok (ルールの書き換えが必要)

~/work などを作ってwritableにmountしよう

Limaの仕様上、~をwritableにするのは推奨されていないため、~/workなどをwritableにするのが良い
Limaは内部ではsshfsを使っているのだが、sshfs + Docker Volumeの組み合わせはdocker側を止めて置かないと、dockerが保持しているvolumeデータを残したまま次に接続しようとしてしまう。再起動して「volume notempty」のエラーが出た場合は、
1. dockerを全部削除
2. limaで入って、 /Users//work などのフォルダを削除(中身を確認、だいたいdockerでマウントされているものがはいっている)
というフローで解決できる

limaのインストール後に出てくるunix socketを使ってdockerしよう

limaの公式のdockerの設定を使うと、最後にunix socketの情報が出てくる。
このunix socketの情報を正しく設定すると、非常にうまく動作する。一方、ipアドレスベースでの指定は非常にバグが多く、うまく動作しないことが多い。

5
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
8