cover

MacOS上でPodmanをDockerの代わりに使用する

sorcererxw

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