MacでのDocker Desktopは有料化とかそもそもシステム上の問題でファイル同期のパフォーマンスが悪い(っていうざっくりした理解)ので使っていなかったのですが、代替になるものを試していなかったのでpodmanを使ってみようと思います。
Dockerをアンインストール
podmanをDockerの代替にするのでDockerを削除します。
Docker Desktopを開くと右上に表示される虫のアイコンをクリックします。
一番下に「Uninstall」が表示されるのでクリックします。
完了したらDocker Desktopを終了して、アプリケーションフォルダからdocker.appを削除します。
podmanをインストール
Podman Desktopでpodmanをインストール(しちゃった)
Podman Desktop 0.8.0を使って簡単にインストールできるのかなと思って試しました。
なのでHomebrewとかは使っていないです。
dmgファイルからアプリケーションをインストールして、実行するとpodmanがインストールされてないよと表示されるので画面上からクリックでインストールするとしばらく待たされました。
が、画面表示がいつまでも変わらないので「おやおや」と思ってPodman Desktopを再起動すると次のような画面に。
インストールされたpodmanはバージョンが4.2.1でした。
で、ここで「initialize Podman」をクリックしてもいいのですが、結局これ後々設定が足りなくてやり直しが発生します。
そんなことが起こるとはつゆ知らずポチッとしました。
これは何をしてるかというと、コンテナを動かすための仮想マシンを作成するようです。中身はFedoraみたいですね。
ターミナルからpodmanのバージョンを確認しておきます。
$ podman -v
podman version 4.2.1
エラーになる場合はsourceコマンドとかでパスの設定を反映する必要があるかもしれません。
dockerコマンドにシンボリックリンクを作成
podmanをdockerコマンドのシンボリックリンクに設定します。
$ sudo ln -s `which podman` /usr/local/bin/docker
docker-compose
docker-composeを使いたかったので、Docker Desktopからではなくcurlでインストールします。
リリースノートのAssetsから自分の環境にあったもののリンクをコピーしてインストールします。
% sudo curl -L https://github.com/docker/compose/releases/download/v2.10.2/docker-compose-darwin-x86_64 -o /usr/local/bin/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 27.4M 100 27.4M 0 0 4901k 0 0:00:05 0:00:05 --:--:-- 6304k
% docker-compose -v
Docker Compose version v2.10.2
最新はv2.11.2なのに色々失敗した結果v2.10.2になってましたがv2.11.2で大丈夫だと思います。
docker-compose
docker-compose upでcredentialsエラー
docker-composeをcurlでインストール後、既成のコンテナ(nginxとか)で適当にcompose.yml
を作成してupしようとするとcredentialsを取得しようとしてエラーになりました。
Docker Desktopをインストールしてないからcredentialsが無いってことみたい。
% docker-compose up -d
[+] Running 0/0
⠋ web Pulling 0.0s
error getting credentials - err: exec: "docker-credential-desktop": executable file not found in $PATH, out: ``
homeディレクトリの.docker/config.json
からcredsStore
を削除すればいいと書いてあったので削除したら動きました。
docker-composeにDockerfile追加
Node.jsのプロジェクトのDockerfileを作成してcompose.ymlに追加しました。
% docker-compose build
[+] Building 0.0s (0/0)
listing workers for Build: failed to list workers: Unavailable: connection error: desc = "transport: Error while dialing unable to upgrade to h2c, received 404"
buildしてみたらエラーが出たので環境変数を設定しました。
% echo $DOCKER_BUILDKIT
% export DOCKER_BUILDKIT=0
設定を反映後、build, upするとコンテナが起動しました。
検証というほどでもない感想
パフォーマンス
コンテナではNode.jsでfrourioを開発用にdevで起動、 DBとしてPostgreSQLを動かしてみました。
アクティビティモニター上でqemuのプロセスがCPUの使用率50〜200%辺りでした。
コードを修正して反映する場合もあまり変化は見られず。
dockerを使ってたときと変わったかと言われると微妙な気はします。
ちなみにfrourioだけをローカルで動作させた場合は起動直後のマイグレーションでqemuが130%ほどの使用率でしたが、その他のプロセスはほとんどが10%以下でした。
podmanの時はディスクアクセスで負荷がかかっていると判断できそうな気がします。(frourioのdevで3つのプロセスがwatchしているので)
が、podman自体は充分代替になりそうです。まぁdocker-composeで起動しただけですが。
VSCodeでコードを編集しても特に反映されるのにラグも無かったですし、Dockerのときも同じような負荷の具合だったので軽くはなってないですが。
Podman Desktop
こちらはまだ機能的には不充分だし、急にCPU使用率が300%を越えたりしていたのでグラフィカルに状況を確認したい時に使う程度にとどめていた方がよさそうです。
machineの起動とかは1clickでできますがその程度かなあと思いました。