この記事はPRを含みます。
概要
Rancher Desktopがcontainerdに加えdockerにも対応したのでDocker Desktopから乗り換えてみました。簡単な用途だとdockerコマンドがそのまま使えるので特に困っていません。
背景
2021年9月にDocker Desktopが有料化されました。移行期間として2022年1月31まで引き続き無料で利用できましたが、それもついに終了しました。
ただし、個人利用もしくはスモールビジネス(従業員数250人未満かつ年間売上高1000万ドル未満)、教育機関、非商用のオープンソースプロジェクトでは引き続き無料で利用できるという条件でした。non-commercial open source projectsの定義を自分は見つけられず、仕事としてOSSをやっている自分は該当するのかどうか微妙なところでしたが、恐らく該当するだろうしお金を払って利用を続ける予定でした。
乗り換え先としてLimaなど候補はいくつかあり、その1つにRancher Desktopがあります(Limaも内部で使われています)。最近1.0.0に到達しました。
実は自分の用途ではRancher Desktopで良さそうというのが本記事の内容です。こちらはKubernetesを簡単に使うためのツールなのですが、コンテナランタイムも同梱されておりcontainerdが使えます。K3sなどについては別の記事を参照してください。containerdを操作するためのCLIとしてnerdctlも同梱されており、dockerコマンドと同様に使えます。また、WindowsやM1 Macにも対応しています(追記:M1だとうまくインストールできなかったという声を頂きました)。後述しますが、Kubernetesが不要な場合は削除したりも出来ます。
多くの人にとってはnerdctlを使ってdockerと同じように操作できれば事足りると思うのですが、dockerdと直接通信するOSSを開発している自分にとってはdockerdそのものが必要だったため移行は難しい状態でした。もちろんVM使ったりで回避する方法もあるのですが、毎日使うものなので手軽に使いたいですし「Rancher Desktopの中身はcontainerdだから自分は移行できないわ〜」などと社内でも言っていました。ところが先日久しぶりにリリースノートを見たらdockerdに対応していることに気付きました。
知らないうちにRancher Desktopがdockerdにも対応していた。dockerdとcontainerdの両方使いたい自分にとっては最強説ある。https://t.co/daBOt9kV9m
— イスラエルいくべぇ (@knqyf263) 2022年1月27日
自分が最後に確認したのは2021年11月末だったのでたった1, 2ヶ月ぐらいで変わらないだろうと油断していました。男子三日会わざれば、刮目して見よ というやつで2ヶ月も前の知識を吹聴していた事を反省しています。Rancher Desktopの公式ページから引用したのが以下の図になります。
containerdとdockerdを簡単に切り替えられ、それらランタイムとnerdctl, Docker CLIで通信できますし、Kubernetesクラスタも起動するのでkubectl, helmコマンドも使えます。自分の作っているOSSはcontainerdとの通信も行う必要があるためdockerdとcontainerd両方気軽に使えるのは願ったり叶ったりです。
移行
自分はmacOSを使っているので、macOSの場合の移行方法を書いておきます。
Docker Desktopのアンインストール
以下のFAQにありますが、Rancher Desktopでdockerdを使う場合はソケットが重複してしまうためDocker Desktopと一緒には使えません。どちらか一方のみが起動している必要があります。
Docker Desktopを終了すれば良いのですが、自分の場合は最近Docker Desktopを起動すると即座にクラッシュする問題が起きていたので一旦アンインストールします。以下に書いてあるとおり "Troubleshoot" => "Uninstall" で簡単にアンインストールできます。
こんな感じです。
Rancher Desktopのインストール
以下から自分の環境にあったインストーラをダウンロードします。MacならHomebrewでもインストール可能なのですが、FAQにHelm, kubectl, nerdctl, dockerなどのコマンドが既にbrewでインストールされているとエラーになると書いてあったのでdmgで入れました。
最初にKubernetesのバージョンやコンテナランタイムが聞かれます。自分は適当に最新バージョンでdockerdを選択しました。
起動すると以下のような画面になります。初回はイメージのダウンロードなどがあるため時間がかかります。ここで一つ気づいたのですがProject Statusがbetaですね。v1.0.0なのでstableなのかと思っていました。まだ安定してないのかもしれず注意が必要かもしれません。
この時点で自動的に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やメモリの設定、コンテナランタイムの変更などはGUIのKubernetes Settingsから可能です。
適当に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から出来るようになるんじゃないでしょうか。
追記:v1.1.0から無効化出来るようになりました。
"Enable Kubernetes"のチェックを外せば良いようです。v1.0.0の時は割と不安定で辛いところがあったのですが、Kubernetesを無効にしてから安定してきた気がします。
宣伝
実はこの記事はRancher Desktopへの移行方法と見せかけた巧妙なPR記事です。というのは嘘で普通にRancher Desktop便利だったので紹介したのですが、自分の開発しているTrivyというOSSが内部で使われているので少し宣伝しておきます。あとSUSE/Rancherの人達はちょくちょくPR送ってきてくれるのでシンプルに好きです。
"Images"でイメージ一覧が見られるのですが、イメージの横のボタンを押すとScanという項目があります。
このボタンを押すとそのイメージの脆弱性がスキャンされ、結果が一覧で表示されます。インタラクティブにフィルタも出来ます。
こういう縁もあってSUSEの開発者の皆様とは仲良くさせていただいています。
うおおおおSUSEの人が新しいRPM DBフォーマット対応してくれた!!!自宅のサーバ全てSUSEにします!!!https://t.co/bgzzY4Wim9
— イスラエルいくべぇ (@knqyf263) 2021年12月11日
SUSEの方も宣伝してくれたりします。お互いのOSSを利用し合って貢献し合ったら最高だなということで、自分にとってはDocker Desktopから乗り換える別のモチベーションにもなりました。何かバグ見つけたらPRとか送ろうと思います。
The latest version of trivy can more accurately scan SLE and openSUSE container images for vulnerabilities. Has to do with ndb support (a different RPM database).https://t.co/7k481uIgw8 pic.twitter.com/en7Yza4ghj
— Matt Farina (@mattfarina) 2022年1月7日
ちなみに読み方はスーサらしいので気をつけてください。
まとめ
SUSE及びRancherへの愛からこの記事を書いたのですが、実際Rancher Desktopへの移行は非常に簡単でした。ただRancher Desktop歴5分でこの記事を書いているので何かまた問題が見つかるかもしれません。