knqyf263's blog

自分のためのメモとして残しておくためのブログ。

Docker DesktopからRancher Desktopに乗り換えてみた

この記事はPRを含みます。

概要

Rancher Desktopがcontainerdに加えdockerにも対応したのでDocker Desktopから乗り換えてみました。簡単な用途だとdockerコマンドがそのまま使えるので特に困っていません。

背景

2021年9月にDocker Desktopが有料化されました。移行期間として2022年1月31まで引き続き無料で利用できましたが、それもついに終了しました。

www.docker.com

ただし、個人利用もしくはスモールビジネス(従業員数250人未満かつ年間売上高1000万ドル未満)、教育機関、非商用のオープンソースプロジェクトでは引き続き無料で利用できるという条件でした。non-commercial open source projectsの定義を自分は見つけられず、仕事としてOSSをやっている自分は該当するのかどうか微妙なところでしたが、恐らく該当するだろうしお金を払って利用を続ける予定でした。

乗り換え先としてLimaなど候補はいくつかあり、その1つにRancher Desktopがあります(Limaも内部で使われています)。最近1.0.0に到達しました。

japan.zdnet.com

実は自分の用途ではRancher Desktopで良さそうというのが本記事の内容です。こちらはKubernetesを簡単に使うためのツールなのですが、コンテナランタイムも同梱されておりcontainerdが使えます。K3sなどについては別の記事を参照してください。containerdを操作するためのCLIとしてnerdctlも同梱されており、dockerコマンドと同様に使えます。また、WindowsやM1 Macにも対応しています(追記:M1だとうまくインストールできなかったという声を頂きました)。後述しますが、Kubernetesが不要な場合は削除したりも出来ます。

多くの人にとってはnerdctlを使ってdockerと同じように操作できれば事足りると思うのですが、dockerdと直接通信するOSSを開発している自分にとってはdockerdそのものが必要だったため移行は難しい状態でした。もちろんVM使ったりで回避する方法もあるのですが、毎日使うものなので手軽に使いたいですし「Rancher Desktopの中身はcontainerdだから自分は移行できないわ〜」などと社内でも言っていました。ところが先日久しぶりにリリースノートを見たらdockerdに対応していることに気付きました。

自分が最後に確認したのは2021年11月末だったのでたった1, 2ヶ月ぐらいで変わらないだろうと油断していました。男子三日会わざれば、刮目して見よ というやつで2ヶ月も前の知識を吹聴していた事を反省しています。Rancher Desktopの公式ページから引用したのが以下の図になります。

f:id:knqyf263:20220201215033p:plain

containerdとdockerdを簡単に切り替えられ、それらランタイムとnerdctl, Docker CLIで通信できますし、Kubernetesクラスタも起動するのでkubectl, helmコマンドも使えます。自分の作っているOSSはcontainerdとの通信も行う必要があるためdockerdとcontainerd両方気軽に使えるのは願ったり叶ったりです。

移行

自分はmacOSを使っているので、macOSの場合の移行方法を書いておきます。

Docker Desktopのアンインストール

以下のFAQにありますが、Rancher Desktopでdockerdを使う場合はソケットが重複してしまうためDocker Desktopと一緒には使えません。どちらか一方のみが起動している必要があります。

docs.rancherdesktop.io

Docker Desktopを終了すれば良いのですが、自分の場合は最近Docker Desktopを起動すると即座にクラッシュする問題が起きていたので一旦アンインストールします。以下に書いてあるとおり "Troubleshoot" => "Uninstall" で簡単にアンインストールできます。

docs.docker.com

こんな感じです。

f:id:knqyf263:20220201214145p:plain

Rancher Desktopのインストール

以下から自分の環境にあったインストーラをダウンロードします。MacならHomebrewでもインストール可能なのですが、FAQにHelm, kubectl, nerdctl, dockerなどのコマンドが既にbrewでインストールされているとエラーになると書いてあったのでdmgで入れました。

rancherdesktop.io

最初にKubernetesのバージョンやコンテナランタイムが聞かれます。自分は適当に最新バージョンでdockerdを選択しました。

f:id:knqyf263:20220201220235p:plain

起動すると以下のような画面になります。初回はイメージのダウンロードなどがあるため時間がかかります。ここで一つ気づいたのですがProject Statusがbetaですね。v1.0.0なのでstableなのかと思っていました。まだ安定してないのかもしれず注意が必要かもしれません。

f:id:knqyf263:20220201220658p:plain

この時点で自動的にnerdctlやdockerコマンドもインストールされています。contextも設定されてKubernetesクラスタも利用できる状態になっています。

$ kubectl get nodes
NAME                   STATUS   ROLES                  AGE   VERSION
lima-rancher-desktop   Ready    control-plane,master   13m   v1.22.6+k3s1

CPUやメモリの設定、コンテナランタイムの変更などはGUIKubernetes Settingsから可能です。

f:id:knqyf263:20220201222258p:plain

適当にdockerコマンドを使ってイメージをpullしてみます。

$ docker pull alpine:3.11
3.11: Pulling from library/alpine
79e9f2f55bf5: Pull complete
Digest: sha256:bcae378eacedab83da66079d9366c8f5df542d7ed9ab23bf487e3e1a8481375d
Status: Downloaded newer image for alpine:3.11
docker.io/library/alpine:3.11

全く問題なく動きます。一応runもしてみます。

$ docker run --rm -it alpine:3.11 sh
/ # cat /etc/alpine-release
3.11.13

"Images"を開くと alpine:3.11 が確かにpullされています。拍子抜けするほど簡単に移行できました。

Kubernetesクラスタの無効化

Kubernetesクラスタは日常的には使わないので無効化する方法を調べました。FAQを見るとどうやら自分でノードを削除する方法しかないようです。

$ kubectl config use-context rancher-desktop
$ kubectl delete node lima-rancher-desktop

必要になったら上の画像にもありますが"Reset Kubernetes"とすれば戻ります。クラスタがぐちゃぐちゃになってもすぐ戻せて便利。Kubernetesクラスタの無効化はIssueにもありますし近い将来GUIから出来るようになるんじゃないでしょうか。

github.com

追記:v1.1.0から無効化出来るようになりました。

github.com

"Enable Kubernetes"のチェックを外せば良いようです。v1.0.0の時は割と不安定で辛いところがあったのですが、Kubernetesを無効にしてから安定してきた気がします。

f:id:knqyf263:20220306175629p:plain

宣伝

実はこの記事はRancher Desktopへの移行方法と見せかけた巧妙なPR記事です。というのは嘘で普通にRancher Desktop便利だったので紹介したのですが、自分の開発しているTrivyというOSSが内部で使われているので少し宣伝しておきます。あとSUSE/Rancherの人達はちょくちょくPR送ってきてくれるのでシンプルに好きです。

"Images"でイメージ一覧が見られるのですが、イメージの横のボタンを押すとScanという項目があります。

f:id:knqyf263:20220201223423p:plain

このボタンを押すとそのイメージの脆弱性がスキャンされ、結果が一覧で表示されます。インタラクティブにフィルタも出来ます。

f:id:knqyf263:20220201223549p:plain

こういう縁もあってSUSEの開発者の皆様とは仲良くさせていただいています。

SUSEの方も宣伝してくれたりします。お互いのOSSを利用し合って貢献し合ったら最高だなということで、自分にとってはDocker Desktopから乗り換える別のモチベーションにもなりました。何かバグ見つけたらPRとか送ろうと思います。

ちなみに読み方はスーサらしいので気をつけてください。

www.youtube.com

まとめ

SUSE及びRancherへの愛からこの記事を書いたのですが、実際Rancher Desktopへの移行は非常に簡単でした。ただRancher Desktop歴5分でこの記事を書いているので何かまた問題が見つかるかもしれません。