LoginSignup
1
1

macOS の Podman は applehv で起動する

Last updated at Posted at 2024-03-27

概要

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 にブラウザで接続してみる

上手く表示させることができた! :star2:
image.png

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 への依存無しで起動できるのが素晴らしい :wink:
  • どこでも動く QEMU で統一していくのかと思っていたけど、そうじゃなかった。
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1