ColimaとDocker Desktopを併用してIntel Macへの未練を断ち切る
M1は速い、M2はもっと速い
AppleがM1チップを世に発表してから、およそ2年が経とうとしています。
ARMアーキテクチャを採用し、Macのために設計されたApple製のシリコンチップは、その「速さ」でMacの体験を大きく変えました。そのパフォーマンスに衝撃を受けて、Intel Macにはもう戻れないと思っている人も多いのでは無いでしょうか。
2022年発売のMacBookにはM1の画期的なパフォーマンスと能力をさらに高めたM2チップが搭載されています。M1 ProとM1 Maxはもっと速くて、2022年11月にはM2 ProとM2 Maxの発表も噂されています。
MacでApple製シリコンチップがスタンダードになる流れは止められないでしょう。
性能が出ても、M1にできないこともある
しかし、どれだけ速いM1,M2 Macにもできないことがあります。
それは、x86アーキテクチャに依存しているシステムやアプリケーションを動かすことです。
大概のアプリケーションはM1,M2 Macに移行してもRosetta[1]やDockerを使って動かすことができます。しかしながら、処理がより低いレイヤーな部分に依存していると、そのまま動かせないことがあります。
その最たる例として、Oracle Database本体のインストールが上げられます。Intel Macであれば、Mac上にDockerを起動して、コンテナの中にOracle Databaseをインストールできます。しかし、M1,M2 Macの場合はARMアーキテクチャであるがゆえに、Oracleコンテナをつくれません。
たとえば、レガシーなオンプレミス環境をクラウド環境へ移行する案件に関わっている場合、最新のM1,M2 MacBookを使ってOracleに向き合わなければならないこともあるでしょう。せっかく速いMacを手に入れたのに、このためだけに開発端末を2台持ちしなければならないのは、とても悲しいことです。
そんなピンチを救ってくれる(かもしれない)のがColimaです。
Colimaを使えば、Intel Macを部分的に再現できる
M1,M2 Macでx86の環境をつくるためには、Linuxの仮想化技術が必要です。
Mac OS上でLinux仮想マシンを立ち上げる「Lima」を使えば、Intel Macと同じ環境を再現します。
Limaでつくった仮想マシンの上にDockerを入れてホスト側からアクセスすれば、M1,M2 Mac上からいつも通りDockerを使っているのと同じ体験で、x86アーキテクチャの上にあるコンテナを扱うことができます。
このLima + DockerをまとめてやってくれるのがColimaというわけです。
参考までに、Colimaを使ってOracle Databaseをインストールする方法を以下の記事で詳しく書いています。Colimaのインストール手順を確認したい方はご覧ください。x86_64
のアーキテクチャを指定して起動させる部分がポイントです。
ColimaはDocker Desktopと併用できないという誤解
この記事で伝えたかった本題はここからです。
Colimaを使うなら「Docker Desktop(Docker for Mac)と共存できないからアンインストールせよ」という記事をよく見かけます。
実はこれは間違い(というか古い記述)で、ColimaとDocker Desktopは共存可能です。
Colimaを起動させるとDockerの向き先(context)がColima側で強制的に奪われてしまいますが、Docker Desktop側を使うようにコンテキストを切り替えれば、全く問題なく動作します。
実際、公式のFAQにもv0.3.0から共存できると記載されています。
Can it run alongside Docker for Mac?(Docker for Macと一緒に動作させることはできますか?)
Yes, from version v0.3.0 Colima leverages Docker contexts and can thereby run alongside Docker for Mac. Colima makes itself the default Docker context on startup and should work straight away.(Colimaはバージョン0.3.0からDocker contextsを利用しており、Docker for Macと一緒に動作させることができます。Colimaは起動時にデフォルトのDockerコンテキストになり、すぐに動作するはずです。)
Dockerのコンテキストを確認すると colima start
したあとは、たしかにcontextの向き先が colima *
になっていることが分かります。
# docker context ls
NAME TYPE DESCRIPTION DOCKER ENDPOINT KUBERNETES ENDPOINT ORCHESTRATOR
colima * moby colima unix:///Users/xxxxx/.colima/default/docker.sock
default moby Current DOCKER_HOST based configuration unix:///var/run/docker.sock swarm
desktop-linux moby unix:///Users/xxxxx/.docker/run/docker.sock
これを docker context use
を使って desktop-linux
または default
に切り替えればDocker Desktop(Docker for Mac)が使えます。
# docker context ls
NAME TYPE DESCRIPTION DOCKER ENDPOINT KUBERNETES ENDPOINT ORCHESTRATOR
colima * moby colima unix:///Users/xxxxx/.colima/default/docker.sock
default moby Current DOCKER_HOST based configuration unix:///var/run/docker.sock swarm
desktop-linux moby
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# docker context use desktop-linux
desktop-linux
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2a65602a3db7 zenndocc-zenndocc "/bin/sh -c 'echo Co…" 13 days ago Up 2 hours 0.0.0.0:8009->8000/tcp zenndocc
# docker context ls
NAME TYPE DESCRIPTION DOCKER ENDPOINT KUBERNETES ENDPOINT ORCHESTRATOR
colima moby colima unix:///Users/xxxxx/.colima/default/docker.sock
default moby Current DOCKER_HOST based configuration unix:///var/run/docker.sock swarm
desktop-linux * moby
MacでDockerを扱うなら、普段はGUIベースで様々な操作ができるDocker Desktop(Docker for Mac)を使うと最も開発生産性が高いと(個人的には)感じています。
Oracle DatabaseはDocker Desktopが使えないので、(悪い言い方をすると、仕方なく)Colimaを使います。
普段はDocker Desktop、ときどきColima
今回はじめてColimaを使ってみて、その便利さに驚きました。とても実用性が高いのに、一部誤解されていそうだったので記事を書いてみました。
ColimaをはじめとするMac上の仮想化技術は、Docker Desktopの有料化が発表されたタイミングで、無料で継続して使うための「引っ越し先」として注目度が高まったように感じます。
しかしながら完全な引っ越しではなく「使い分け」をすることで、利便性を損なうことなくIntel Macへの未練を断ち切ることができます。
M1 Macでの開発生産性を最大化するために、普段はDocker Desktopを使い倒して、x86アーキテクチャに向き合う場合はColimaを活用するのがオススメです。
-
Appleシリコン搭載Macでも、Intelプロセッサ搭載Mac用に開発されたアプリケーションを動かせるようにする互換性維持のための技術です。 ↩︎
Discussion