
DockerDesktopを何年も使用してきましたが、非常に使いやすく、開発に多くの利便性をもたらしました。しかし、DockerDesktopにはまだいくつかの不満な点があります。
- HomebrewCaskでインストールした場合、Homebrewで自動更新できないため、更新を無視するには有料になります
- 起動が遅い
私にとっては、DockerCLIの部分だけが必要で、GUI、Docker-Composeは必要ありません。その場合、Podmanは比較的良い代替品だと思います。
インストール¶
$ brew install podman
$ podman machine init // 初始化 Podman
$ podman machine start // 启动 Podman
簡単なコマンドでマシンに Podman を設定でき、起動速度も速いです。
$ time podman machine start
INFO[0000] waiting for clients...
INFO[0000] listening tcp://0.0.0.0:7777
INFO[0000] new connection from to /var/folders/yt/h6dhsb1500098zqv1sv11knw0000gn/T/podman/qemu_podman-machine-default.sock
Waiting for VM ...
podman machine start
0.02s user 0.02s system 0% cpu 22.810 total
podman-h を使用すると、Podman が Docker コマンドの大部分を互換性があることがわかります。移行の学習コストは非常に低いです。
イメージ名¶
Dockerのデフォルトレジストリはdocker.ioなので、イメージを取得する際には、イメージ名を短縮して指定することができます。
docker pull mysql:8
しかし、Podmanはdocker.ioと関連付けられていないため、docker.ioからイメージをプルする必要がある場合は、完全なリポジトリアドレスを使用する必要があります。
podman pull docker.io/library/mysql:8
設定することで、Docker と同様に自動補完を実現できます。参考:

Container image short names in Podman
When people approach me to talk about Podman and containers, I usually ask if they are familiar with Docker. Most people are, and the conversations quick...
https://www.redhat.com/sysadmin/container-image-short-names
ポートマッピング¶
コンテナを起動する際には、コンテナポートとホストマシンのポートのマッピングを設定する必要があります。例えば、
docker run -d -p 6379:6379 docker.io/library/redis:6
DockerはTCPのポートマッピングにデフォルトで設定されます。しかし、Podmanでは、ネットワークの種類を積極的に指定する必要があります。
podman run -d -p 6379:6379/tcp docker.io/library/redis:6