概要
podman5.0 系から公式に applehv がサポートされたので検証した。
applehv は、macOS 独自の軽量なハイパーバイザーとした VM 基盤
以下のことを確認する
- nginx を起動して画面を見るというシンプルな確認をする。
- podman compose で macOS で編集したものを表示してみる。
結論
- セットアップするだけで本当に applehv で起動される。
検証した環境
❯ sw_vers
ProductName: macOS
ProductVersion: 14.4
BuildVersion: 23G214
❯ podman version
Client: Podman Engine
Version: 5.0.0
API Version: 5.0.0
Go Version: go1.22.1
Git Commit: e71ec6f1d94d2d97fb3afe08aae0d8adaf8bddf0
Built: Thu Mar 19 18:47:46 2024
OS/Arch: darwin/arm64
Server: Podman Engine
Version: 5.0.0-dev-8a643c243
API Version: 5.0.0-dev-8a643c243
Go Version: go1.21.8
Built: Mon Mar 18 09:00:00 2024
OS/Arch: linux/arm64
podman / podman-desktop の導入
❯ brew install podman
❯ brew install podman-desktop
※ mac の Launchpad をみると追加されてるのが確認できる
podman のバージョン確認
❯ podman --version
podman version 5.0.0
podman の依存関係パッケージの確認
❯ brew deps --1 podman
※ 依存がなくなった。
❯ brew deps --1 podman-desktop
※ 依存がなくなった。
podman-mac-helper
導入で compose でいい感じにディレクトリをマウントできる様になる。
❯ sudo /opt/homebrew/opt/podman/bin/podman-mac-helper install
docker-compose も事前に入れておく
podman compose と言いつつ実態は external compose provider の指定によるものなので相変わらず docker-compose
が必要。
しかし、ここは将来的に他の compose provider を指定できる様になるのかもしれない(期待)
brew でインストールできる docker-compose は 2系になってるのでそれを使う。
❯ docker-compose -v
Docker Compose version 2.25.0
❯ type docker-compose
docker-compose is /opt/homebrew/bin/docker-compose
podman machine にて VMインスタンスをセットアップ
-
podman machine init
コマンドを使用して初期セットアップを行う。 - 実行すると Fedora CoreOS の仮想マシン RAW イメージ(applehv)がダウンロードされる。
-
--cpus
や--memory
--disk-size
は任意のサイズを割り当て可能。 -
-v /Users:/Users
で Mac のディレクトリを Bind Mount しやすくなる。 -
podman machine set --rootful
で特権 port を利用することができる。 -
podman machine ssh rpm-ostree -y install buildah
で buildah をインストールできる。
❯ podman machine init \
--cpus 2 \
--memory 8192 \
-v /Users:/Users && \
podman machine set --rootful && \
podman machine start && \
podman machine ssh rpm-ostree -y install buildah && \
podman machine stop && \
podman machine start
検証用ディレクトリの構成
※ ファイルについては後述する。
$ tree $(pwd)
/path/to/macOS
├── compose.yaml
└── html
└── index.html
1 directory, 3 files
compose サブコマンドで container を起動する
compose の設定ファイルを用意する
- nginx のコンテンツが編集できることを確認するので、volume をバインドマウントする。
- rootful なので hostPort[80] を LISTEN させて、転送先の containerPort[80] を指定する。
❯ cat <<'EOF'> compose.yaml
services:
web:
image: nginx:latest
ports:
- 80:80
volumes:
- type: bind
source: ./html
target: /usr/share/nginx/html
EOF
podman compose でコンテナを起動する
Executing external compose provider が呼び出されて compose が起動される。
❯ podman compose up -d
>>>> Executing external compose provider "/opt/homebrew/bin/docker-compose". Please refer to the documentation for details. <<<<
[+] Running 9/8
✔ web 8 layers [⣿⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled
✔ 59f5764b1f6d Download complete 10.0s
✔ 059f9f6918db Download complete 5.7s
✔ e75b854d63f1 Download complete 0.0s
✔ 2df415630b2f Download complete 0.0s
✔ f7bd43626fa7 Download complete 0.0s
✔ df91ff398a83 Download complete 3.8s
✔ 4d88df8a13cd Download complete 0.0s
✔ 070027a3cbe0 Download complete 0.0s
[+] Running 1/1
⣿ Network projects_default Created 0.0s
✔ Container projects-web-1 Started 0.3s
hostPort で指定した Port が LISTEN 状態になっていることが確認できる。
❯ lsof -n -P -iTCP -sTCP:LISTEN|grep :80
gvproxy 1510 tigerroll 22u IPv6 0xf917929b32ae7165 0t0 TCP *:80 (LISTEN)
以上で compose の起動は完了
nginx で読み込む index.html を準備する
cat <<'EOF'> html/index.html
<h1>Hello Podman bind mount contents !</h1>
EOF
nginx にブラウザで接続してみる
VM に ssh ログインしてみる
せっかく applehv の環境に VM を起動したので SSH で中にはいってみる。
Users ディレクトリがマウントされてる。
❯ podman machine ssh
Connecting to vm podman-machine-default. To close connecting, use `~.` or `exit` Fedora CoreOS 39.20240309.2.0
Tracker: https://github.com/coreos/federoa-coreos-tracker
Discuss: https://discussion.fedoraproject.org/tag/coreos
Last login: Thu Mar 21 21:39:42 2024 from 192.168.127.1
root@localhost:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda4 100G 3.3G 97G 4% /sysroot
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 3.9G 200K 3.9G 1% /dev/shm
efivarfs 56K 1.2K 56K 3% /sys/firware/efi/efivars
tmpfs 1.6G 8.6M 1.6G 1% /run
tmpfs 3.9G 0 3.9G 0% /tmp
Users 461G 108G 354G 24% /Users
/dev/vda3 350M 127M 201M 39% /boot
tmpfs 792M 12K 792M 1% /run/user/502
tmpfs 792M 4.0K 792M 1% /run/user/0
root@localhot:~#
Compose を停止する
※ VM からは抜けてる前提
❯ podman compose stop
>>>> Executing external compose provider "/opt/homebrew/bin/docker-compose". Please refer to the documentation for details. <<<<
[+] Stopping 1/1
✔ Container podman-web-1 Stopped 0.2s
Compose を削除する
❯ podman compose rm
>>>> Executing external compose provider "/opt/homebrew/bin/docker-compose". Please refer to the documentation for details. <<<<
? Going to remove podman-web-1 Yes
[+] Removing 1/0
✔ Container podman-web-1 Removed
VM の停止
❯ podman macihne stop
Machine "podman-machine-default" stopped successfully
停止されてることが確認できる
❯ podman machine ls
NAME VM TYPE CREATED LAST UP CPUS MEMORY DISK SIZE
podman-machine-default applehv 10 minutes ago 11 seconds ago 2 8GiB 100GiB
VM の削除
❯ podman machine rm
The following files will be deleted:
/Users/tigerroll/.config/containers/podman/machine/applehv/podman-macihne-default.json
/var/folders/db/rb1m1bcn4nz68wlzdp_hf0800000gp/T/podman/podman-machine-default.sock
/var/folders/db/rb1m1bcn4nz68wlzdp_hf0800000gp/T/podman/podman-machine-gvproxy.sock
/var/folders/db/rb1m1bcn4nz68wlzdp_hf0800000gp/T/podman/podman-machine-default-api.sock
/var/folders/db/rb1m1bcn4nz68wlzdp_hf0800000gp/T/podman/podman-machine-default.log
Are you sure you want to continue? [y/N] y
削除されてることが確認できる
❯ podman machine ls
NAME VM TYPE CREATED LAST UP CPUS MEMORY DISK SIZE
applehv で起動してみた感想
- VM が applehv に変わり、QEMU への依存無しで起動できるのが素晴らしい
- どこでも動く QEMU で統一していくのかと思っていたけど、そうじゃなかった。