Site cover image

Site icon imageおかしんワークス

ビジネステクノロジーエンジニア @okash1n のブログです

MacのDocker Desktop代替としてRancher DesktopとPodman Desktopを試して諦めた話

どうも。最近Dockerのことばかり書いてるビジネステクノロジーユニットのおかしんです。今回はDocker Desktopの代替としてRancher DesktopやPodman Desktopを試したのですが、それぞれ解決できない問題があり諦めた話をします。

以前こんな2つの記事を書きました。

Windowsにおいては、Docker on WSLすることで、Docker Desktopやその他のツールを使わなくてもDockerを快適に使えるということは書きました。(詳しい方法は以下のOpenSOPをご覧ください)

ですが、Macについては正直ベストプラクティスがあまり自分の中で確立出来ていませんでした。

自分の中での結論

自分の中での結論はMacでDocker Desktopを使わずにDockerを使うなら、LimaかVirtualBoxでLinux動かして、その中でDockerを動かしてSSHして使うのがベストという結論に至りました。

それが難しければちゃんとお金を払ってDocker Desktopを使うのが良いと思います。

そして、結果的に開発本部に相乗りさせてもらう前提でDocker Desktop Teamを選択しました。

Docker Desktopを使わない選択肢

Docker Desktopの有料化が企業に与える影響と、企業における適切なDockerの利用方法Docker Desktopの有料化および値上げに伴って、企業に与える影響や、Docker Desktopを使わずに適切にDockerを利用する方法について考えてみました。studist.tech

こちらの記事で書いたように、特定の売上や規模の会社でDocker Desktopを利用するなら、有料化しなければなりません。ですのでDocker Desktopを使わずにDockerを使う選択肢を探し始めるわけですが、そもそも何故Webアプリの開発者でも無い私がDockerを使いたいのか。

Dockerを使いたい理由

これには開発者で無いからこその理由がありまして、やはり環境構築が一番楽なのがDockerなんです。

例えば情シスでよく使うGASなんかをGitHubで管理したいとなっても、環境差異を出来るだけ無くして、チームメンバー全員が同じような開発環境を整えようとなると、開発のバックグラウンドがあるメンバーばかりであれば「ターミナルで諸々の依存関係を入れて使いましょう」で終わりですが、Windowsの人とMacの人がいるチームで、そのあたりを一から説明するとなるとかなり骨が折れます。

clasp はインストールパッケージ使うの? npm でいれるの? brew で入れるの?環境変数は?

pythonとかわかりやすいと思うのですが、出来るだけ標準的な手順書を書いたとしても、もしメンバーがWindowsでAnacondaとか入れてたりすると絶対におかしなエラーが出たりします。

そういう意味では、チームメンバー皆が開発者じゃないからこそDockerとVisual Studio Code(以下 VS Code)のRemote Containersは1つの手順書で最も例外を発生させにくい構成だと私は思ってるのです。

特にVS CodeのRemote Containersは世界を変えたなと思います。ノンプログラマに環境構築してもらうなら、Dockerfileとdevcontainers書いて、それを git cloneさせるのが一番確実だと思ってます(お金が許せばGitHub Codespaceはもっと最高)。

というわけで、Dockerを使いたいのですが、Docker Desktopが有料化されてしまい、私のチームはDockerでアプリケーション開発してるわけでもないので、Docker Desktopにお金かけるほどでもないな、と思ったので代替策を色々探しました。

候補に上がった代替

Windows

WindowsはDocker on WSLが一番良いなと思いました。その方法は以下OpenSOPをご覧ください。めちゃくちゃ頑張って書いたし、何台ものPCで試したので完成度高いと自負してます。

Windows11でストア版WSL(Windows Subsystem for Linux)をインストールしセットアップするこの手順はWindows11 ビルド 22621.1485 で初めてWSL2を利用する想定で実施していますteachme.jp

WindowsのWSLのみでDockerを動かし、Dockerデーモンを常駐させ、VS Codeからコンテナを開く事前にWSLのインストールが必要になります。 またこの手順はビルドバージョン22000.0以上のWindows10もしくはWindows11で行うことを前提としています。 当手順ではWindows11 22621.1485…teachme.jp

もしくはRancher DesktopやPodman DesktopをバックエンドにWSLを取る構成(Docker DesktopのWSLバックエンドの構成に一番近い)

やはりWindowsは、WSL2によって本物のLinuxカーネルを内蔵しているのだから、それを使わない手は無いですね。

結果的に私自身はDocker on WSLを選択しましたが、チームとしては「Docker Desktop WSL2 バックエンド」の構成を取ることになりそうです。(簡単なので)

Mac

Macはすごく悩みました選択肢として上がったのは以下

  • Rancher Desktop
  • Podman Desktop
  • minikube
  • Finch
  • Lima
  • Virtual Box

できるだけ簡単に環境構築するという観点ではGUIのある「Rancher Desktop」と「Podman Desktop」が最終候補に残りました。

一番Docker Desktopと使用感が近いのはこの2つだと思います。

Rancher Desktopを試してみた

Rancher DesktopはLima仮想マシン上でDockerを動かしてMacでDockerを使えるようにするツールです。

各社でも推奨している人が多く、一番Docker Desktopに近い使用感だと思います。

Rancher Desktopはコンテナエンジンとして dockerdcontainerdを使えるのですが、Visual Studio Codeと一緒に使うことを目的としているので dockerd を使います。(Visual Studio CodeのRemote Containersが nerdctl を使えず、dockerpodman しか使えないため)

たしかに、Rancher DesktopはほとんどDocker Desktopと遜色なく使えたのですが、Visual Studio CodeのRemote Containersで環境構築を楽にしたいという私にとっては、困った問題がありました。

Rancher Desktopを諦めた理由

上記TweetのISSUEの通りなのですが、Rancher Desktopで dockerd を使ってると、再起動時に毎回管理者権限を求められパスワード入力しなければいけないのが非常にストレスでした。逆に管理者権限を使わない設定もできるのですが、これだとRemote Containersがうまく動きません。

containerd だとこの問題は起こらないのですが、肝心のRemote Containerが containerd をサポートしていないので選択できませんでした。

このパスワード入力さえクリアできたら、Rancher DesktopはDocker Desktopとほぼ同じように使えますし、VSCodeのRemote Containersも特にエラーなく動きます。

ですが、この問題は2022年から報告されており1年以上修正されていないので、直るのは時間がかかりそうです。

Podman Desktopを試してみた

Podman DesktopはRedhatが開発しているツールで、海外での利用実績も多く、期待していたツールでした。

Visual Studio CodeのRemote ContainersもPodmanをサポートしてます。

Image in a image block

Fedoraベースの仮想マシンが動き、その中でDockerが実行されます。

こころなしかRancher Desktopよりパフォーマンスが良い気がしましたが、これも致命的な問題がありました。

Podmanを諦めた理由

Rancher Desktopのように毎回管理者権限求められるわけでもなく、Remote Containersも公式にサポートしてるのでめっちゃええやんと思ってました。

ですが、上記のISSUEの通り、PodmanのVMのユーザーとホストであるMacnoユーザーIDが競合する設計になっているので、コンテナ内で一般ユーザーの権限問題が発生してしまいます。

Dockerfileの書き方によっては回避できるのですが、Microsoftが出している devcontainers のサンプル達や、VSCodeが生成するDockerfileだとこのエラーに引っかかります。

2月頃のPodmanのアップデートにより発生した問題で、今もまだ解決していません。これが解決するのであればPodman Desktopが一番良いと思っています。

最終的にDocker Desktopを選んだ

上記の通り、Rancher DesktopもPodman Desktopもそれぞれ既知かつ直っていない問題を抱えているので選択できませんでした。ですが一年後にはいずれも直っているかもしれません。

最終的には、開発本部のDocker Desktop Teamに相乗りさせてもらうことにしました。

いずれRancher DesktopとPodman Desktopの問題が修正されたら私はPodman Desktopを使いたいな〜と思ってます。パフォーマンスがよかったので。

AmazonのFinchはまだVS Codeが対応していませんが、これも対応してくれるなら選択肢に上がってきそうです。

自分で環境構築できるなら生のLimaでセットアップするのも良さそうでした。

今回はここまで。ではではまたー。