Red Hat Forum APAC 2021でPodmanのセッションがあって、Podman machineを使うと、macOSのVM上でPodmanが利用できることを知りました。各セッションはオンデマンド視聴がまだサイトから可能です。
今年の9月時点ではM1 Macでは動かなかったようですが、現在利用できるバージョンでは動く模様です。 早速試してみようと思いました。
インストール
macOSに事前にHomebrewのセットアップをしておきます。 Homebrewのセットアップができたら、次にHomebrewを使ってPodmanをインストールします。
% brew install podman
インストールが終わったら一度シェルに入り直すか、端末を開き直して...
% zsh
Podmanの初期化を実行します。 Fedora CoreOSのQEMUイメージがダウンロードされて動くようです。
% podman machine init Downloading VM image: fedora-coreos-35.20211029.2.0-qemu.aarch64.qcow2.xz: done Extracting compressed file
初期化が終わったらリストを出してみます。
% podman machine list NAME VM TYPE CREATED LAST UP CPUS MEMORY DISK SIZE podman-machine-default* qemu 31 seconds ago 31 seconds ago 1 2.147GB 10.74GB
これでインストールは終わりです。
「Podman VM」を動かす
Linuxの場合はPodmanはネイティブに動作しますが、macOSやWindows環境ではリモートのLinuxマシンに接続して利用する方法かpodman machine
コマンドで Fedora CoreOS VMを動かして、その環境でPodmanを動かす構成を取ります。今回の例は後者の方法です。
$ 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/mq/961qzxqx47931tnnpblf6wfr0000gn/T/podman/qemu_podman-machine-default.sock Waiting for VM ... Machine "podman-machine-default" started successfully
VMが起動したあとは、普通にpodmanコマンドでコンテナの作成、操作ができるようです。
このVMの実体はps aux|grep podman
を実行するとわかると思います。QEMUで動いていることがわかります。
「Podman VM」上のPodmanをmacOSから操作する
コンテナーを動かしてみます。
% podman run --rm -it busybox echo -e '\n hello world!' Resolved "busybox" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf) Trying to pull docker.io/library/busybox:latest... Getting image source signatures Copying blob sha256:00fa7918e1c4a657af04fed3a8121dd47630905832e9de65088d577ca325a6de Copying blob sha256:00fa7918e1c4a657af04fed3a8121dd47630905832e9de65088d577ca325a6de Copying config sha256:55d288799e596cdb89f7933104b2092b95680dc34c094a06571ea5a8001e2391 Writing manifest to image destination Storing signatures hello world!
busybox
イメージがダウンロードされて、「hello world!」と表示されました。コンテナーの実行は問題なかったようです。
次に、NGINX Webサーバーを起動してみます。アクセスするためにポート指定をしています。これはDockerと同じような感じです。
% podman run --name=cont1 -d -p 8080:80 -it nginx:alpine % podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 152d5095790e docker.io/library/nginx:alpine nginx -g daemon o... 8 seconds ago Up 8 seconds ago 0.0.0.0:8080->80/tcp cont1 % curl http://127.0.0.1:8080 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> ...
Podmanでイメージのビルド
Podmanでイメージビルドを試してみます。
ディレクトリーを作って、その中にDockerfile
とindex.html
を作成しておきます。
% cat Dockerfile FROM docker.io/nginx:alpine ADD index.html /usr/share/nginx/html/ % cat index.html Welcome to My site!
イメージを作成してみます。
% podman build --compress -t mynginx:latest -f Dockerfile . STEP 1/2: FROM docker.io/nginx:alpine STEP 2/2: ADD index.html /usr/share/nginx/html/ COMMIT mynginx:latest --> b723b34aa0a Successfully tagged localhost/mynginx:latest b723b34aa0ae391de87177d5525d8b9d909e13673f3d7431684e9276a542b114
作成したイメージでコンテナーを起動してみます。
% podman run --name=cont1 -d -p 8080:80 -it mynginx:latest
コンテナーアプリケーションにアクセスしてみます。
% curl http://127.0.0.1:8080 Welcome to My site!
Podmanのイメージビルドも、ネイティブでPodmanを動かしている時と同じように利用できることがわかりました。 かなり大きいイメージのビルドはおそらくネイティブで実行した方が良いでしょうが、一般的な用途であれば十分そうです。
Podmanコンテナーの削除と終了
コンテナーを削除します。
% podman stop cont1 && podman rm cont1
Podman machineを停止する場合は
% podman machine stop
Podman machineを再開する場合は
% podman machine start
Podman machineを削除する場合は
% podman machine rm ... Are you sure you want to continue? [y/N] (yを入力で消去)
podman machine rm
を実行したあとは、podman machine init
の再実行が必要のようです。
まとめ
というわけで、Docker Desktopとほぼ同等のことが「Podman machine」の利用でできるようになりました。
Intel CPU版のMacでも、Apple Silicon版のMacでも利用できたので安心です。
必要になったらpodman machine start
を実行して、いらなくなったら停止するなり削除するなりで利用できるので、
Docker Desktopから乗り換えても良いかなと思いました。
ちなみにRed Hat Forum 2021でPodmanのセッションの情報によると、Podman Desktopのようなプロダクトを考えているようです。これも楽しみですね。