お手軽になった macOS の podman に入門する

## 概要

* 過去に macOS の podman に入門を試みたところ地雷を多く踏み挫折していた
* 3.2.x から macOS でお手軽に podman の実行環境がつくれるという、ワクワクする情報を知ったのでもう一度入門してみた
* 出典： [赤帽エンジニアブログ:【podman machine】macOS上でPodmanを実行する新コマンドの紹介](https://rheb.hatenablog.com/entry/podman-machine) :pray: 感謝！！
* 出典元の記事を参考に検証したものなので、詳しく知りたい方はそちらを参照

## 検証した環境

仕事で使う端末を想定して macOS で検証する

### macOS のバージョン

```bash
$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.15.7
BuildVersion:	19H1417
```

## Podman の導入

* podman は docker 同様 linux コンテナをベースにした技術であるため実行には Linux が必須となる
* 実行する端末が Linux であれば Local の podman engine で動作させることができる
* macOS / Windows で実行する場合は遠隔の Linux に接続して engine 利用するオプションがある

## Podman コマンドのインストール

コマンドは有り難いことに brew でインストールできる

```bash
$ brew install podman
※ podmanのインストールの依存関係で QEMU も同時にインストールされる
```

podman のバージョン確認

```bash
$ podman --version
podman version 3.3.1
```

podman の依存関係パッケージ（QEMU）の確認

```bash
$ brew deps --1 podman
qemu
```

## podman コマンド動作確認

* 動作確認に `podman info` を実行してみるとエラーが出るが、これは macOS なので native の podman が動作しないため
* コマンドが叩けることは確認できた

```bash
$ podman info
Error: cannot connect to the Podman socket, please verify that Podman REST API service is running: Get "http://d/v3.3.1/libpod/_ping": dial unix ///var/folders/xs/12nb8v4d295gj67gvymq3gldq44_nd/T/podman-run--1/podman/podman.sock: connect: no such file or directory
```

remote の podman に接続エントリはなし

```bash
$ podman system connection list
```

## remote の podman engine を準備

* 古い公式の手順では、boot2podman + virtualbox で環境を作る手順だったが、現在は非推奨
* 概念的には docker-machine と同じなので、リモートホストは Fedora を導入できれば物理的に分かれていても良い
* Vagrant の box イメージが公式でサポートされているので、従来の Vagrant の資産を活用することもできる
* 最新では `podman machine` という QEMU を使うオプションが用意されているのでこの方法を使う

## podman machine による QEMU インスタンスをセットアップする

* `podman machine init` コマンドを使用して初期セットアップを行う
* podman machin で実行する Fedora CoreOS の仮想マシンイメージ(qcow2)がダウンロードされる

```bash
$ podman machine init
Downloading VM image: fedora-coreos-34.20210904.1.0-qemu.x86_64.qcow2.xz: done
Extracting compressed file
```

download されたイメージは以下のパスで管理されている

```bash
$ ls -l ~/.local/share/containers/podman/machine/qemu/
total 2212480
-rw-r--r-- 1 tigerroll  631490316  9 19 15:31 fedora-coreos-34.20210904.1.0-qemu.x86_64.qcow2.xz
-rw------- 1 tigerroll 1613824000  9 19 15:40 podman-machine-default_fedora-coreos-34.20210904.1.0-qemu.x86_64.qcow2
```

podman machine が起動していない状態では `LAST UP` 過去の時間が表示される

```bash
$ podman machine ls
NAME                     VM TYPE     CREATED        LAST UP
podman-machine-default*  qemu        2 minutes ago  2 minutes ago
```

podman machine を起動する

```bash
$ 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/xs/12nb8v4d295gj67gvymq3gldq44_nd/T/podman/qemu_podman-machine-default.sock
Waiting for VM ...
qemu-system-x86_64: warning: host doesn't support requested feature: CPUID.80000001H:ECX.svm [bit 2]
```

正常に起動していることが確認できる

```bash
$ podman machine ls
NAME                     VM TYPE     CREATED         LAST UP
podman-machine-default*  qemu        34 minutes ago  Currently running
```

## podman machine との接続設定

* podman machine への接続エントリが追加されていることが確認できた
* これらは起動時に自動で追加され、イメージを削除すると自動でエントリも削除される

```bash
$ podman system connection list
Name                         Identity                                              URI
podman-machine-default*      /Users/tigerroll/.ssh/podman-machine-default  ssh://core@localhost:62746/run/user/1000/podman/podman.sock
podman-machine-default-root  /Users/tigerroll/.ssh/podman-machine-default  ssh://root@localhost:62746/run/podman/podman.sock
```

ここまでくれば `podman info` で `podman machine` のステータスを確認できるようになっている

```bash
$ podman info
host:
  arch: amd64
  buildahVersion: 1.22.3
  cgroupControllers: []
  cgroupManager: systemd
  cgroupVersion: v2
...
```

podman machine のバージョン情報も取得できる

```bash
$ podman version
Client:
Version:      3.3.1
API Version:  3.3.1
Go Version:   go1.17
Built:        Tue Aug 31 04:15:26 2021
OS/Arch:      darwin/amd64

Server:
Version:      3.3.1
API Version:  3.3.1
Go Version:   go1.16.6
Built:        Tue Aug 31 05:46:36 2021
OS/Arch:      linux/amd64
```

## podman で container を起動する

* 動作確認はおなじみ nyancat
* nyancat が見れたら動作確認 OK（停止はCTRL-C）
* 操作は docker と大差無いので馴染みやすい

```bash
$ podman run -it --rm docker.io/supertest2014/nyan
```

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214973/f84ae991-c4df-d8b4-0cab-9a5f0c45caac.png" width=60%>

## macOS に podman machie の環境を作ってみた感想

* QEMU を使うことで手軽に podman ができるのはありがたい :pray: 感謝！！
* 端末のリソースに余裕が無い場合はリモートの Fedora を用意して接続設定を変えて podman を実行させることも出来るので、その方法も試してみたいと思う
* お手軽になったので、このバージョンから本格的に podman に乗り換える人が増えそうな予感 :star2: