Docker Desktopが有料になるのでPodmanを使ってみる

[ニフティアドベントカレンダー](https://qiita.com/advent-calendar/2021/nifty)12月2日を務めさせていただきます、**島田**です。
プロフィールにも書いてありますが、新卒3年目の22歳で最近はコンテナランタイムについて勉強しています。
好きな寿司ネタはしめ鯖、最近楽しかったことはiPadでVMを起動させる遊びです。

アドベントカレンダーは初参加ですので、温かい目で見守って頂けると幸いです。


# Docker Desktopが有料になるよ
![www.docker.com_pricing (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468436/51e7e6d4-824a-e7da-d533-09b0855a7630.png)
https://www.docker.com/pricing

Docker Desktopが有料になる、という話は今やエンジニア以外でもご存知の方は多いのではないでしょうか。
いずれ有料化されると分かっていながらも発表された時は自分も驚きました。
今や開発は当然のようにコンテナで行われ、ニフティでも多くのコンテナがプロダクション環境で動作しています。

今回有料の対象となるのは**従業員250名以上、または売上が1000万USD以上**と、ほとんどの企業が有料対象となります。
今から脱Docker Desktopを行うのはリスクが高いため、pro以上のライセンスを購入することになると思うのですが、個人的にDocker以外のコンテナランタイムに興味が出たので勉強がてら色々いじってみてます。

以前社内LTにて、macの脱Docker Desktop手段として[lima-vm]( https://github.com/lima-vm/lima )を紹介しました。
今回は**Podman**を使ってみたので、やったことと思ったことを綴っていきたいと思います。

# Podmanとは
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468436/43d9354a-2ffb-ad13-3756-f6e255f7014c.png)
https://podman.io/

PodmanはDockerのように、runcなどの低レベルランタイムとやり取りをしてくれるCLIツールです。

開発はRedHatだそうで、OSSのプロジェクトとして公開されています。
Dockerと違いルートレスであるため、問題視されがちな特権ユーザを利用してホストOSに干渉する行為を防止でき、**よりセキュア**であるといえます。

# 使ってみる
早速使ってみます。環境は以下です。

- host OS: windows10
- VM: VMware Workstation 16
- OS: debian11

まず、Podmanをインストールします。
aptでかんたんに入ります。

```bash
debian@debian:~$ sudo apt-get install podman
debian@debian:~$ podman -v
podman version 3.0.1
```

psするとコンテナ一覧が見られます。
Docker互換というだけあり、見た目がほとんど同じです。

```bash
debian@debian:~$ podman ps
CONTAINER ID  IMAGE   COMMAND  CREATED  STATUS  PORTS   NAMES
```

テンションが上がってきたのでコンテナを動かしてみます。

```bash
debian@debian:~$ podman run --rm -itd busybox sh
Error: error getting default registries to try: short-name "busybox" did not resolve to an alias and no unqualified-search registries are defined in "/etc/containers/registries.conf"
```

なんか怒られました。
podmanのコンテナレジストリにはbusyboxというのはいない、と言ってるようです。
dockerのイメージを使うには次のように指定する必要がありました。

```bash
debian@debian:~$ podman pull docker.io/busybox
Trying to pull docker.io/library/busybox:latest...
Getting image source signatures
Copying blob 3aab638df1a9 done  
Copying config d23834f29b done  
Writing manifest to image destination
Storing signatures
d23834f29b3875b6759be00a48013ba523c6a89fcbaeaa63607512118a9c4c19
debian@debian:~$ podman images
REPOSITORY                 TAG     IMAGE ID      CREATED       SIZE
docker.io/library/busybox  latest  d23834f29b38  35 hours ago  1.46 MB
```

無事busyboxが取得できたので、起動してみます。

```bash
debian@debian:~$ podman run --rm -itd --name test docker.io/busybox sh
8113583a6c61ae37002321d74d5fcbda336c0e3d498612e640cf948bf514e1c1
debian@debian:~$ podman ps
CONTAINER ID  IMAGE              COMMAND  CREATED        STATUS            PORTS   NAMES
8113583a6c61  docker.io/busybox  sh       6 seconds ago  Up 6 seconds ago          test
```

元気に動いています。
今回はbusyboxをそのままrunしていますが、`podman buid`や内部ネットワークの機能もちゃんともっているようです。

ついでに個人的にやろうと思っていたkata-fcをPodmanから使えるか試してみました。

```bash
debian@debian:~$ sudo podman run --rm -itd --name test-kata-fc --runtime=/opt/kata/bin/kata-runtime docker.io/busybox sh
Error: OCI runtime error: Could not create cgroup for machine.slice:libpod:ccaaa04deb773de192ca4b89fff44f5ee8f0d505bc861b6c3c532c1cd1452571: cgroups: cgroup mountpoint does not exist
```

だめみたいです。
Dockerでランタイムとして指定しても同じcgroupのエラーが出てしまっていたので、kata containersのインストールが悪いのかもしれません。

解決策がわかる方がいらっしゃったら是非教えて頂きたいです。

# まとめ
今回はDockerの代わりにPodmanを使ってみました。
podというだけあってk8sのマニフェストからpodを作成することも出来るみたい(そっちがメインの機能？)で、結構便利そうです。

Dockerの移行先としても優秀で、何よりapt一発で入ってちゃんと動くところに感動しました。
企業としてPodmanに移行するのは流石にリスキーですが、個人で利用する分には全く問題なさそうです。

以上で島田の記事は終了です。
[ニフティアドベントカレンダー](https://qiita.com/advent-calendar/2021/nifty)はまだまだ続きますので、明日の投稿も是非ご覧ください！