容器

macOSでPodmanをDockerの代わりに使う

Docker Desktopが大規模企業に対して有料になるということで、代替を探している方も多いのではないでしょうか。macOSはLinux実行環境が標準で用意されていないこともあり対応が面倒ですが、一つの解決策としてPodmanというものがあります。
この記事ではライトユーザー向けとしてPodmanを使えるようになるための手順だけを簡潔に示します。解説記事というよりは、やってみた系の記事に近いかもしれません。
PodmanやPodman machineについての詳しい説明は公式ドキュメントや、他の方によるいくつかの解説記事があるので、そちらをお読みください。

検証環境


  • MacBook Pro(13-inch, 2020)
  • macOS Catalina 10.15.7
  • zsh

インストール

Homebrewで簡単にインストールできます。

% brew install podman

執筆時(2021年9月12日)にはv3.3.1が入りました。

% podman --version
podman version 3.3.1

Podman machineの起動


Podmanを実行する前に、Podmanを実行するためのLinux環境であるPodman machineを起動する必要があります。

まず、初期化が必要です。

# Podman machineの初期化
# VMイメージをダウンロードしてくる
% podman machine init

メモリ等の設定を変えることも可能です。参考

初期化が完了したらPodman machineを起動しましょう。Podmanを使う時には必ずPodman machineを起動する必要があります。

# Podman machineの起動
% podman machine start

私が試したところ初回実行時にはErrorが出ましたが問題なく起動できました。既にissue化されており、PRもマージされているようです。

https://github.com/containers/podman/issues/11421

起動確認は

% podman machine ls
NAME                     VM TYPE     CREATED      LAST UP
podman-machine-default*  qemu        3 hours ago  4 minutes ago

のようにできます。
停止する際にはpodman machine stopを実行してください。

Podmanの実行


公式サイト

Simply put: alias docker=podman

と書かれているように、dockerコマンドをpodmanに置き換えることでDockerと同じことができます。

% podman pull nginx
# 起動するが、v3.3.1ではポートフォワードがうまくいかない(後述)
% podman run --rm -d --name nginx -p 8080:80 nginx
% podman ps
CONTAINER ID  IMAGE                           COMMAND               CREATED        STATUS            PORTS                 NAMES
109dc70571dd  docker.io/library/nginx:latest  nginx -g daemon o...  7 seconds ago  Up 7 seconds ago  0.0.0.0:8080->80/tcp  nginx

v3.3.1では自動ポートフォワード機能周りにバグがあるらしく、runする際に--network bridgeをつけるなどの対応が必要なようです。詳しくは参考記事2をご覧ください。既にPRがマージされているので、リリースを待ってからPodmanを試した方が良いかもしれません。