※再投稿
本記事は朝日新聞社 Advent Calendar 2021の25日目、つまりクリスマスの記事です!
Docker Desktop for Mac(Windows)が有料化する

2021年9月にDocker Desktopが有料化するという発表がありました。
猶予期間は2022年1月31日です。
Docker Desktopを開いた時に、上のようなおしゃれなポップアップがでてきませんでしたか?
最近、Docker DesktopのUIがどんどんおしゃれになっていくなぁと思っていたら、そういうことだったんだな‥と繋がりました。
私は業務でDockerを使っています。
Docker Desktop for Macも頻繁に使うソフトウェアの一つです。
Docker Desktopさんにはお世話になっているし便利なのでのでもちろん契約するのですが、Docker Desktopを使わずにMacで快適にDockerを使う手段はないものかと思いいろいろ調べてみました。
過去に見つけたDocker for Mac高速化の記事
一年前ほど前に「Docker for Macは遅い。VirtualBoxを使えばもっとはやい。」的な記事を見つけたのを思い出しました。
正確にはこれです↓
DockerはLinux上で動くソフトウェアなわけですが、MacだったりWindowsでDockerを使う場合にはLinuxの仮想環境をそれぞれのOS上で動かさなくてはいけません。
Docker Desktop for Mac(Windows)を使うとそれらがLinuxの仮想環境を準備してくれるので、簡単にDockerを導入できるということだったようです。
上記記事ではVirtualBox + Dockerの組み合わせでDocker Desktopを使わないでDocker環境を構築しています。
以上から、Docker Desktopを使わずにMacでDockerを使うには、Docker Daemonを動かすためのLunux仮想環境をMac上に作ればいいということがわかりました。
Macで仮想環境を作るには
Macで仮想環境を作るにはいくつか方法があります。
- VirtualBox
- VMware
- Parallels Desktop
この3つが主流なんじゃないかなと思います。
私は個人的にParallels DesktopとVirtualBoxを使ったことがあります。
VirtualBoxに関しては中学生のころくらいからよく使っていた馴染み深いソフトです。
最初は私も「VirtualBox」で環境構築しようかな…と思いましたが、どうやら最近、WindowsでいうWSL的なものがMacで出てきたという噂を耳にしました。
LimaというMac版WSL
それがLimaです。
Lima can be considered as a some sort of unofficial "macOS subsystem for Linux", or "containerd for Mac".
→(訳)Limaは、ある種の非公式な「Linux用macOSサブシステム」、あるいは「Mac用containerd」と考えることができるだろう。
いいですね。
私は個人プロダクトを進める時はWindowsでWSL2を使って開発をしています。
VirtualBoxとは違い、感覚的にはWindows上で開発している気分のままLinux上で開発をすることができ非常に便利です。
WSLからWindows側のファイルに簡単にアクセスできますし、IPアドレスが一緒だったり、メモリもホストマシンと共有だったりと、VirtualBoxで面倒な部分がWSLだとすべてスムーズに事が進みます。
どうやらLimaもWSLのように使うことができるようなのです。
つまり、Limaを導入すれば簡単にLinux環境が構築でき、Docker daemonの動作環境も構築できるのでは…。
簡単にLimaの導入と使い方
githubを見ていただくとLimaの導入方法が書いてあります。
Homebrewでパッケージが用意されていて、
brew install lima
でさくっとインストールが可能です。
次に仮想環境を作ります。
仮想環境はyamlファイルを使って様々な設定をすることができ、こちらに様々な定義yamlファイルが追いてあるので参考にするといいでしょう。
yamlを準備しないで
limactl start
とすることもできます。この場合defalut.yaml(これ)の設定で仮想環境が構築されます。
もしyamlを用意した場合は
limactl start hoge.yaml
のようにコマンドを叩くと仮想環境の構築が始まります。
yamlファイルのファイル名が仮想環境名となるので注意してください。
作られた仮想環境は
$HOME/.lima
に追加されていきます。
存在している仮想環境は
$ limactl ls
NAME STATUS SSH ARCH CPUS MEMORY DISK DIR
default Running 127.0.0.1:60022 x86_64 4 4GiB 100GiB /Users/watashi/.lima/default
docker Running 127.0.0.1:60006 x86_64 4 4GiB 100GiB /Users/watashi/.lima/docker
という感じで見ることが可能です。
仮想環境内に入りたいときは
limactl shell [仮想環境名]
で環境に入ることが可能です。
細かい使い方はこちらに書いてあるので読んでみてください。
Dockerを使えるようにする。
Dockerのインストール
※もしDocker Desktopがすでに入っている方はuninstallしておいてください。Docker Desktopのウィンドウの虫ボタンからuninstallをすることができます。
MacでDockerをインストールするにはHomebrewでインストールするのが一番簡単です。
Docker Desktopは有料化するので、「Docker CLI Client」のみをインストールする必要があります。
ちなみにdocker runだったりdocker buildといった処理はDocker CLI Clientの処理です。
brew install docker
これで「Docker CLI Client」のみがインストールできました。(※参照)
brew cask install dockerではないので注意してください。
brew caskは.appを入れるためのコマンドなのでDocker Desktopがインストールされてしまいます。
ちなみにこの状態だと
$ docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Docker daemonに接続できませんというメッセージがでます。
DOCKER_HOSTの初期設定はunix:///var/run/docker.sock.になっています。
MacやWindowsにはDocker daemonは存在しない(できない?)ので、初期設定で動かないのは当たりまえですね。
ということでDocker daemonを利用できるようにLinuxの仮想環境を作っていきましょう。
Docker daemonが動く仮想環境をLimaで作る。
Limaの定義yamlは公式例のこれを使います。
下のコマンドでどこかテキトーな場所にyamlをDLしましょう。
curl -o docker.yaml https://raw.githubusercontent.com/lima-vm/lima/master/examples/docker.yaml
limactl start docker.yaml
DLができたら、yamlを使って仮想環境を生成します。
limactl start docker.yaml
上記コマンド実行後の最後のログを読んでください。(yamlのmessageに書いてある。)
INFO[0192] READY. Run `limactl shell docker` to open the shell.
INFO[0192] To run `docker` on the host (assumes docker-cli is installed):
INFO[0192] $ export DOCKER_HOST=unix:///Users/watashi/.lima/docker/sock/docker.sock
環境変数DOCKER_HOST(Doc)が指定されていますね。
export DOCKER_HOST=unix://$HOME/.lima/docker/sock/docker.sock
MacにあるDocker CLI Clientは上記のDocker daemonを使うようになります。
これにより、MacにあるDocker CLI Clientは仮想環境内にあるDocker daemonを動かすことができるようになりました。
あとはMacから下記のようにコマンドを打つことで、Docker Desktopを使っているかのごとく、仮想環境内でDocker Containerを動作させることが可能です。
docker run --name nginx -d -p 8080:80 nginx
図で描くとこんな感じ(自信ない)

私はこんな認識をしています。
間違っていたらコメントで教えてくださるとありがたいです。
Docker Desktopの代替はLimaでOK?
個人的にはDocker Desktopはとても楽ちんなので(何も考えなくていい)、多少速度が遅くても使い続けていきたいという思いがあります。個人では多分使うと思います。
とはいえ所属グループでは様々な考え方がありますから、業務PCには入れることのできない未来もあるかもしれません。
Docker Desktopを使わない世界線に紛れ込んだ際にはこの手法でDocker開発に取り組んでいこうと思います。
朝日新聞社では、技術職の中途採用を強化しています。
ご興味のある方は下記リンクから希望職種の募集ページに進んでください。
皆様からのご応募、お待ちしております!