![macOS上のコンテナ実行環境をRancher DesktopからColimaに変えてみた](https://images.ctfassets.net/ct0aopd36mqt/1dD7b8HkT2sbiJzUIewMTD/e5cdc6f33c4fdd9d798f11a4564612ff/eyecatch_developersio_darktone_1200x630.jpg)
macOS上のコンテナ実行環境をRancher DesktopからColimaに変えてみた
お疲れさまです。とーちです。
MacOSでDockerを使用するために、Rancher Desktopを使っている方は多いのではないでしょうか?
私も長らくRancher Desktopを使っていたのですが、つい最近、この記事でColimaというツールを知り「これは良さそう」と思ったので実際に試してみることにしました。
今回は、軽量なコンテナランタイムとして注目されている「Colima」への移行について、実際に試してみた経験を共有したいと思います。
とりあえずまとめ
- Colimaは軽量でシンプルなコンテナランタイム環境を提供
- DockerCLIは別途インストールする必要あり
- Kubernetes環境も必要に応じて簡単に構築可能
そもそもなぜコンテナランタイムが必要なのか?
まず、MacOSでDockerを使用する際になぜコンテナランタイムが必要なんでしょうか?私は雰囲気でRancher Desktopを使ってたのでそこから確認してみました。
大前提として、Dockerコンテナは「Linux」の技術を使って動作します。具体的には「Linux カーネルの機能」を活用することで様々な機能を実現しています。(公式ドキュメントにも書いてあります)
MacOSはUNIXベースのOSではあるものの「Linux」ではないため、そのままではDockerコンテナを動かせません。そのため、Linux環境を提供するツール(Rancher DesktopやColima)が必要になります
上記の図は dockerの公式ドキュメントから参照したものですが、上記の図の中の主にDockerホストの部分をRancher DesktopやColimaが補っていると私は理解しています。
Colimaの特徴
Colimaは以下のような特徴を持つツールです
- IntelおよびApple Silicon Mac、Linuxをサポート
- シンプルなCLIインターフェース
- 自動ポート転送
- ボリュームマウント
- 複数のインスタンス管理が可能
- 複数のコンテナランタイムをサポート
- Docker(オプションでKubernetesを使用可能)
- Containerd
- Incus
特にRancher Desktopと比べGUIなどがない分、軽量かつシンプルになりそうに感じました。自分のユースケースだとDockerコマンドの実行のみが主目的であるためGUIは必要ありません。そのためColimaに移行することにしました。
Rancher DesktopからColimaに移行してみる
1. Rancher Desktopのアンインストール
まずは必要なコンテナイメージがある場合はバックアップしましょう。私の場合であればAWSを普段から使ってるので、必要なイメージがあればECRにpushします(push手順は割愛します)。
次にRancher Desktopを停止します。メニューバーのアイコンから「Quit Rancher Desktop」を選択してください。
続いてアンインストールです。私はHomebrewでインストールしていたので、以下のコマンドでアンインストールします:
brew uninstall rancher
次に関連ファイルも削除していきます。以下のコマンドを順番に実行していきましょう。
# Rancher Desktopの設定等が入っているフォルダ
rm -fr ~/Library/Application\ Support/Rancher\ Desktop
rm -fr ~/Library/Application\ Support/rancher-desktop
# Rancher DesktopがインストールしたCLIツール等が入っているフォルダ
rm -rf ~/.rd
# Rancher Desktopのキャッシュ
rm -rf ~/Library/Caches/rancher-desktop
# Rancher Desktopのログ
rm -rf ~/Library/Logs/rancher-desktop
~/.rd
ディレクトリについて少し補足です。このディレクトリにはRancher Desktopがインストールしたdocker CLIやkubectl等が入っています。私は以前、pathの問題で本来使いたいpathにあるkubectlが使えずに少しだけ手間取ったことがありました。混乱の元になるのでRancher Desktopを使わないのであれば削除しておくべきだと思います。
2. Colimaのインストールと初期設定
それでは、Colimaをインストールしていきましょう。インストールコマンドは以下です。後述しますがこのタイミングで brew install docker
でDockerCLIも入れておいたほうがいいです。
brew install colima
インストールすると以下のようなメッセージが表示されました
To start colima now and restart at login:
brew services start colima
Or, if you don't want/need a background service you can just run:
/opt/homebrew/opt/colima/bin/colima start -f
ログイン時に自動で起動させたいので、以下のコマンドを実行します
brew services start colima
brew servicesは初めて使いましたが、brewのサブコマンドでログイン時の自動起動を設定できるんですね。
以下のページがbrew servicesの使用方法について分かりやすく説明されていました。個人的にbrew services stopで自動起動設定まで削除されてしまう挙動に少し振り回されたので、初めてbrew servicesコマンドを使う方は目を通しておいたほうがいいかもしれません。
3. トラブルシューティング
さて、ここでbrew services list
を確認すると、エラーが出ていました
> brew services list
Name Status User File
colima error 256 username ~/Library/LaunchAgents/homebrew.mxcl.colima.plist
unbound none
手動でColimaを起動してみると原因が分かりました
> colima start --very-verbose
<中略>
FATA[0000] dependency check failed for docker: docker not found, run 'brew install docker' to install
Docker CLIを入れるのを忘れてましたね。ちゃんとReadmeにも書いてあります。
brew install docker
インストール後、サービスを再起動してみます
brew services restart colima
するとサービス上は起動成功したように見えましたが、colimaコマンドでstatusを確認してみると
> colima status
FATA[0000] error retrieving current runtime: empty value
ランタイムの設定が空になっているようです。GitHubのREADMEには「You can use the docker
client on macOS after colima start
with no additional setup.」とあるので、やってみます。
> colima start --very-verbose
TRAC[0000] cmd ["limactl" "info"]
<中略>
WARN[0000] already running, ignoring
> colima status
INFO[0000] colima is running using macOS Virtualization.Framework
INFO[0000] arch: aarch64
INFO[0000] runtime: docker
INFO[0000] mountType: sshfs
INFO[0000] socket: unix:///Users/username/.colima/default/docker.sock
よさそうですね!念の為再度serviceの再起動をして問題ないか確認してみます
> brew services restart colima
Stopping `colima`... (might take a while)
==> Successfully stopped `colima` (label: homebrew.mxcl.colima)
==> Successfully started `colima` (label: homebrew.mxcl.colima)
すると起動直後は以下のようにColimaが起動してないというエラーとなりましたが、数十秒ほど待つと正常なステータスになりました。
> colima status
FATA[0000] colima is not running
> colima status
INFO[0000] colima is running using macOS Virtualization.Framework
INFO[0000] arch: aarch64
INFO[0000] runtime: docker
INFO[0000] mountType: sshfs
INFO[0000] socket: unix:///Users/username/.colima/default/docker.sock
4. 動作確認
実際にDockerコマンドを使って動作確認をしてみましょう
# イメージのpull
> docker pull nginx:latest
latest: Pulling from library/nginx
4d2547c08499: Pull complete
<中略>
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
# コンテナイメージの起動
> docker run -d -p 80:80 nginx:latest
acad026a6feed1454e33ac1ed28fa3ed4095aa6981a0f1689ad7ca1185976010
# アクセス確認
> curl localhost:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
<以下略>
dockerコマンドでコンテナイメージをpullしたり使用したりという用途においてはまったく問題なさそうですね。
5. Colimaの設定について
Colimaの起動時に引数を指定することで色々と設定を変えることができます。
例えばColimaはLinuxが動くVMとして起動するわけですが、そのVMのリソースを以下のように変更することができます
colima start --cpu 1 --memory 2 --disk 10
これでCPUコア数1、メモリ2GB、ディスク容量10GBのVMとして起動されます。
また、Kubernetes環境が必要な場合は--kubernetes
オプションを付けるだけでOKです。
> colima start --kubernetes
INFO[0000] starting colima
INFO[0000] runtime: docker+k3s
INFO[0003] starting ... context=vm
<中略>
INFO[0058] Switched to context "colima". context=kubernetes
INFO[0058] done
kubectlの設定も自動で行われます
> kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* colima colima colima
podもすんなり起動できました
> kubectl run nginx-test --image=nginx
pod/nginx-test created
> kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-test 1/1 Running 0 16s
設定の注意点
なお、上記のように一度 colima start
にオプションをつけて実行すると、次回以降の起動時にも同じ設定が使われます。例えば上記の場合、次回からもKubernetesが有効な状態で起動します。
起動時の設定を変更するには以下のコマンドを実行します
> colima start -e
すると以下のように(少なくともvscodeの場合は)設定ファイルが自動で開きます
設定を変更して保存すると、以下のように確認が表示されます:
> colima start -e
INFO[0000] vscode detected, editing in vscode
colima is currently running, restart to apply changes? [y/N]
ここでy
を選択すれば、新しい設定で再起動されます。
まとめ
Rancher DesktopからColimaへ移行してみました。以前、何度かRancher Desktopの挙動に悩まされたこと(上で書いた~/.rd
ディレクトリの件とか)があったのでよりシンプルな環境にしたいなというのが今回の私のモチベーションでした。同じような考えの方はぜひColimaを試してみてください。
以上、とーちでした。