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もマージされているようです。
起動確認は
% 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を試した方が良いかもしれません。
(おまけ)従来のdockerコマンドを使う
詳細
以下の手順でdocker
コマンドが使えます。ただし、使えない機能もあります。例えば、docker-compose
やdocker compose
は使えないと思います(よくわかってません)。
前提条件として、caskでない方のdockerが入っているとします。
% brew uninstall --cask docker
% brew install docker
まず、podman system connection list
コマンドで出てきた情報をもとに~/.ssh/config
を編集します。
% podman system connection list
Name Identity URI
podman-machine-default* /Users/takumiishikawa/.ssh/podman-machine-default ssh://core@localhost:57271/run/user/1000/podman/podman.sock
podman-machine-default-root /Users/takumiishikawa/.ssh/podman-machine-default ssh://root@localhost:57271/run/podman/podman.sock
~%
Host podman
HostName localhost
Port 57271
User root
IdentityFile /Users/takumiishikawa/.ssh/podman-machine-default
sshでPodman machineに入れることを確認しましょう。私は一度この手順を踏まないとdockerコマンドが使えませんでした。
% ssh podman
# (省略)Are you sure you want to continue connecting (yes/no/[fingerprint])?などが出る
Fedora CoreOS 34.20210904.1.0
Tracker: https://github.com/coreos/fedora-coreos-tracker
Discuss: https://discussion.fedoraproject.org/c/server/coreos/
最後に、環境変数DOCKER_HOST
を設定します。
% export DOCKER_HOST=ssh://podman
するとdocker images
やdocker pull
などのコマンドが使えると思います。
docker-compse
もpipでinstallすれば使えそうな気がしますが、ssh: connect to host localhost port 22: Connection refused
というメッセージが出てきて使えず、これ以上は調べられていません。
ただし、私は試していませんが、Podman APIソケットというものを使うとdocker-composeコマンドが使えるようになるようです。詳しくは参考記事3をご覧ください。
参考記事・サイト
-
https://podman.io
公式サイト。ドキュメント等もこちらから飛べます。 -
https://rheb.hatenablog.com/entry/podman-machine
PodmanとPodman machineに関して日本語でわかりやすく書かれています。この方の他の記事もおすすめです。 -
https://rheb.hatenablog.com/entry/podman3_docker_compose
2と同じブログです。Podmanを使ったdocker-composeの利用方法について書かれています。 -
https://medium.com/nttlabs/docker-podman-28ced4f7cb90
DockerとPodmanの性能を比較しています。Podman v3.0.0での比較なので今は違う結果かもしれません。
Discussion