ソフトウェアの開発作業を容易くし、また実行環境を構築しやすくしてくれるコンテナ技術。コンテナを実行するエンジンの定番と言えばDockerですが、Podmanというものの存在も知りました。Podmanは「Red Hat® エンジニアとオープンソース・コミュニティ」によって開発されているOSSです。
Podman が他のコンテナエンジンと異なるのは、デーモンを使用しないという点です。つまり、コンテナを実行するのに、root 権限を持つプロセスを必要としません。
私は、これまで使ってきたDocker (最近はrootless mode) とこのPodmanとの、権限に関する上記の基本思想の違いに興味惹かれました。Podmanのセキュア度合いについては、次のスライドにも詳しく説明されています。
そこで今回は、自分の趣味の範囲で使うコンテナエンジンをDockerからPodmanへ切り替えることができるのか、実験して確認してみます。実験の内容は、「docker compose向けに用意した次の拙作リポジトリを、podmanでcompose upすることができるか」です。
実験は、仮想マシンを使って次の3つのパターンでやってみました。最初に結論を言いますとすべて成功です。各実験パターンの記述は、それぞれの環境におけるPodmanインストール方法の紹介にもなっています。
なお、podmanのサブコマンドとしてcomposeが使えるようになったのは、Running Compose files | Podman Desktop > Prerequisites によると「4.7.0以上」です。したがって、バージョン的にpodman compose
できない実験ではpodman-compose
を使っています。
項目 | 内容 |
---|---|
OS | Ubuntu Desktop 24.04 LTS (x86_64) |
## パッケージの最新化と必要分をインストールする
$ sudo apt update ; sudo apt upgrade ; sudo apt dist-upgrade
$ sudo apt install vim git
## OS・環境を確認する
$ cat /etc/os-release | grep VERSION= ; uname -r -p
VERSION="24.04 LTS (Noble Numbat)"
6.8.0-40-generic x86_64
## インストールできるpodmanのバージョンを確認する
$ apt-cache show podman | grep Version
Version: 4.9.3+ds1-1ubuntu0.1
Version: 4.9.3+ds1-1build2
## podman関係をインストールする
$ sudo apt install podman podman-compose
## インストールしたpodmanとpodman-composeのバージョンを確認する
$ podman version
Client: Podman Engine
Version: 4.9.3
API Version: 4.9.3
Go Version: go1.22.2
Built: Thu Jan 1 09:00:00 1970
OS/Arch: linux/amd64
$ podman-compose version
podman-compose version: 1.0.6
['podman', '--version', '']
using podman version: 4.9.3
podman-compose version 1.0.6
podman --version
podman version 4.9.3
exit code: 0
## podmanに必要なregistries.confを用意する
$ mkdir -p ~/.config/containers/
$ vim ~/.config/containers/registries.conf
$ cat ~/.config/containers/registries.conf
unqualified-search-registries = ["docker.io"]
short-name-mode = "permissive"
## 実験用のリポジトリをcloneしてcompose upを実行する
$ mkdir -p ~/tmp/ ; cd ~/tmp/
$ git clone https://github.com/mah-jp/sphinx-docker_gen-html-pdf
$ cd sphinx-docker_gen-html-pdf
$ podman compose up # ここはpodman compose
(途中省略)
[sphinx-custom] | The HTML pages are in _build/html.
exit code: 0
## Sphinxでの生成物を確認する → 成功
$ ls -al docs/_build/html/index.html
-rw-r--r-- 1 user user 14456 Aug 8 23:51 docs/_build/html/index.html
$ ls -al docs/_build/latex/project_name.pdf
-rw-r--r-- 1 user user 300715 Aug 8 23:51 docs/_build/latex/project_name.pdf
項目 | 内容 |
---|---|
OS | Ubuntu Desktop 22.04.4 LTS (x86_64) |
## パッケージの最新化と必要分をインストールする
$ sudo apt update ; sudo apt upgrade ; sudo apt dist-upgrade
$ sudo apt install vim git curl
## OS・環境を確認する
$ cat /etc/os-release | grep VERSION= ; uname -r -p
VERSION="22.04.4 LTS (Jammy Jellyfish)"
6.5.0-45-generic x86_64
## インストールできるpodmanのバージョンを確認する
$ apt-cache show podman | grep Version
Version: 3.4.4+ds1-1ubuntu1.22.04.2
Version: 3.4.4+ds1-1ubuntu1
## podman関係をインストールする
$ sudo apt install podman python3-pip # podman-composeはpackageとしては無いので
$ pip install podman-compose # pipでpodman-composeをインストール
$ export PATH="$HOME/.local/bin:$PATH"
$ which podman-compose
/home/user/.local/bin/podman-compose
## インストールしたpodmanとpodman-composeのバージョンを確認する
$ podman version
Version: 3.4.4
API Version: 3.4.4
Go Version: go1.18.1
Built: Thu Jan 1 09:00:00 1970
OS/Arch: linux/amd64
$ podman-compose version
podman-compose version 1.2.0
podman version 3.4.4
## podmanに必要なregistries.confを用意する
$ mkdir -p ~/.config/containers/
$ vim ~/.config/containers/registries.conf
$ cat ~/.config/containers/registries.conf
unqualified-search-registries = ["docker.io"]
short-name-mode = "permissive"
## 「WARN[0000] Error validating CNI config file ...」の事前回避
## Ref: https://qiita.com/kolinz/items/6ccde7ffa87bdd4f0a6f
$ curl -O http://archive.ubuntu.com/ubuntu/pool/universe/g/golang-github-containernetworking-plugins/containernetworking-plugins_1.1.1+ds1-3build1_amd64.deb
$ sudo dpkg -i containernetworking-plugins_1.1.1+ds1-3build1_amd64.deb
## 実験用のリポジトリをcloneしてcompose upを実行する
$ mkdir -p ~/tmp/ && cd ~/tmp/
$ git clone https://github.com/mah-jp/sphinx-docker_gen-html-pdf
$ cd sphinx-docker_gen-html-pdf
$ podman-compose up # ここはpodman-compose
(途中省略)
[sphinx-custom] | The HTML pages are in _build/html.
## Sphinxでの生成物を確認する → 成功
$ ls -al docs/_build/html/index.html
-rw-r--r-- 1 user user 14456 8月 9 00:04 docs/_build/html/index.html
$ ls -al docs/_build/latex/project_name.pdf
-rw-r--r-- 1 user user 300809 8月 9 00:04 docs/_build/latex/project_name.pdf
項目 | 内容 |
---|---|
OS | Ubuntu Desktop 22.04.4 LTS (x86_64) |
ここでのインストール方法は、Twitter (現X) で提供いただいた次の情報を元に進めました。
(すみませんめっちゃ中途半端でした)
— Manabu Ori (@orimanabu) August 1, 2024
ここにUbuntu 22.04用の新し目のパッケージがありますhttps://t.co/fO2V8c0WCM
下記のステップの「podmanをインストールする」部分では、openSUSE提供のdebを一個ずつダウンロードせずに、リポジトリをまるごと登録しているところが手数を省くポイントです。
## パッケージの最新化と必要分をインストールする
$ sudo apt update ; sudo apt upgrade ; sudo apt dist-upgrade
$ sudo apt install vim git curl
## OS・環境を確認する
$ cat /etc/os-release | grep VERSION= ; uname -r -p
VERSION="22.04.4 LTS (Jammy Jellyfish)"
6.5.0-45-generic x86_64
## podmanをインストールする
## Ref: https://zenn.dev/dozo/articles/0ced3feae9ac63#podman%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB
## Ref: https://learn.microsoft.com/ja-jp/troubleshoot/azure/virtual-machines/linux/apt-common-issues-in-ubuntu
$ source /etc/os-release
$ echo deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/unstable/x${NAME}_${VERSION_ID}/ / | sudo tee -a /etc/apt/sources.list.d/devel:kubic:libcontainers:unstable.list
$ curl -fsSL https://download.opensuse.org/repositories/devel:kubic:libcontainers:unstable/x${NAME}_${VERSION_ID}/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/devel_kubic_libcontainers_unstable.gpg > /dev/null
$ sudo apt update && sudo apt -y install podman
## podman-composeをインストールする
$ sudo apt install python3-pip # podman-composeはpackageとしては無いので
$ pip install podman-compose # pipでpodman-composeをインストール
$ export PATH="$HOME/.local/bin:$PATH"
$ which podman-compose
/home/user/.local/bin/podman-compose
## インストールしたpodmanとpodman-composeのバージョンを確認する
$ podman version
Client: Podman Engine
Version: 4.6.2
API Version: 4.6.2
Go Version: go1.18.1
Built: Thu Jan 1 09:00:00 1970
OS/Arch: linux/amd64
$ podman-compose version
podman-compose version 1.2.0
podman version 4.6.2
## podmanに必要なregistries.confを用意する
$ mkdir -p ~/.config/containers/
$ vim ~/.config/containers/registries.conf
$ cat ~/.config/containers/registries.conf
unqualified-search-registries = ["docker.io"]
short-name-mode = "permissive"
## 実験用のリポジトリをcloneしてcompose upを実行する
$ mkdir -p ~/tmp/ ; cd ~/tmp/
$ git clone https://github.com/mah-jp/sphinx-docker_gen-html-pdf
$ cd sphinx-docker_gen-html-pdf
$ podman-compose up # ここはpodman-compose
(途中省略)
[sphinx-custom] | The HTML pages are in _build/html.
## Sphinxでの生成物を確認する → 成功
$ ls -al docs/_build/html/index.html
-rw-r--r-- 1 user user 14456 8月 9 00:35 docs/_build/html/index.html
$ ls -al docs/_build/latex/project_name.pdf
-rw-r--r-- 1 user user 300808 8月 9 00:35 docs/_build/latex/project_name.pdf
上記とは別のUbuntu 22.04環境でpodmanを導入して実行した際、WARN[0000] Error validating CNI config file ...
というエラーが発生しました。このエラーは「containernetworking-plugins」というパッケージを導入することで解消できました。
今回、Podmanを試してみて分かったことの一つは、Podmanのインストールは、Dockerのrootless modeの場合よりもかなり楽だと言うこと。シンプルな構成で運用できるという点は、私にとってコンテナエンジンをDockerからPodmanへ切り替える大きな理由になります。
また、Podmanの本格利用に向けて、あと少々試したいことは次の2つです。
そしてこれらでも特に問題が無ければ、私は自分のデスクトップ環境での組み合わせを、Docker+Rancher Desktopから、Podman+Podman Desktopへ、躊躇なく切り替えることでしょう。