Red Hat Enterprise Linux 9では、デフォルトでDockerが削除され、Podmanコマンドがデフォルトで使えるようになっています。
この記事では、Podmanの概要をまとめて紹介します。
Podmanとは
Podmanはpod managerの略でコンテナを開発、管理、実行するオープンソースのツールです。詳細は以下のRed Hat公式記事で確認できます。
Podman (pod manager の略) は、コンテナを開発、管理、実行するためのオープンソースツールです。Red Hat® エンジニアとオープンソース・コミュニティによって開発されており、libpod ライブラリを使用してコンテナエコシステム全体を管理できます。

上記の引用内容からもわかるように、PodmanはRed Hatが主に管理しています。
「Pod」はコンテナのグループのことです。
Pod は、Kubernetes Pod と同様、まとまって稼働し、同じリソースを共有するコンテナのグループです。Podman は、単純なコマンドライン・インタフェース (CLI) と libpod ライブラリ (コンテナ、Pod、コンテナイメージ、ボリュームを管理するアプリケーション・プログラミング・インタフェース (API) を提供) を介してこれらの Pod を管理します。

Dockerとは
DockerはPodmanと同じくオープンソースのコンテナエンジンで、コンテナ仮想化技術を提供するツールです。
コンテナ型仮想化技術とは
コンテナ型仮想化技術は、以下の図のようにRed Hat Enterprise LinuxなどのOS上にDockerやPodmanなどのコンテナエンジンをインストールすることでアプリケーションの実行環境を複数作成することができる技術です。

PodmanとDockerの違い
PodmanとDockerにはいくつかの違いがあります。箇条書きでまとめるとPodmanとDockerは主に以下の点で異なります。
- Podmanはデーモンレス(デーモンなし、つまり、常駐プログラムなし)のアーキテクチャ(構造)になっている
- Podmanはルートレス(rootless、ルートユーザーを使わないということ)で動作する
- Podmanは必要なツールを都度追加する形で使える(Dockerはすべて(ほとんど)の機能が搭載された状態で都度追加する構造ではない)
- Podmanはrootユーザーを使用せずに動作することやSELinuxのラベルを使用して各コンテナを起動することから、Dockerよりもセキュリティ面で優れている
上記の箇条書きを作成するのに参考にした文章をRed Hat 公式サイトから引用します。
Podman とDocker
Docker とは、Linux コンテナの作成と使用を可能にするコンテナ化テクノロジーのことです。Podman と Docker の主な違いは、Podman にはデーモンレス・アーキテクチャが採用されている点です。Podman コンテナは当初からルートレスで動作していますが、Docker でデーモン構成にルートレスモードが追加されたのはつい最近です。Docker は、コンテナの作成と管理を行うオールインワンツールです。それに対し、Podman とその関連ツール (Buildah、Skopeo など) は、コンテナ化の特定の側面に特化しているので、環境をカスタマイズする際には、必要なツールだけを使うことができます。
Podman はデーモンを使用せず、通常のユーザーが root 権限を持つデーモンを操作することなくコンテナを実行したりルートレスコンテナを使用できるようにしたりします。ルートレスにすることで、管理者権限のあるプロセスを必要とせずにコンテナを作成、実行、管理できるため、コンテナ環境にアクセスしやすくなり、セキュリティリスクも軽減されます。さらに、Podman は Security-Enhanced Linux (SELinux) のラベルを使用して各コンテナを起動するため、管理者はコンテナプロセスに提供されるリソースと機能をより詳細に制御できます。

DockerからPodmanへの移行に当たるコマンドの利用の変化
DockerからPodmanに移行するにあたってPodmanコマンドはDockerコマンドと同じように使用することができます。
Dockerの代わりにPodmanをインストールします。Dockerデーモンのようなデーモンプロセスを起動したり管理したりする必要はありません。
Docker で使い慣れているコマンドは Podman でも同じように機能します。
Podman はコンテナとイメージを Docker とは異なる場所に保存します。
Podman と Docker イメージは互換性があります。
Podman は、 Kubernetes環境向けの Docker 以上の機能を提供します。(Google Chromeによる翻訳)
Podman、Skopeo、Buildah ツールの主な利点
DockerからPodmanに移行するにあたって、Podman、Skopeo、Buildahツールが開発されています。
Docker コマンド機能に代わる、Podman、Skopeo、Buildah ツールが開発されました。このシナリオの各ツールはより軽量になり、機能のサブセットに焦点を当てています。
Podman、Skopeo、Buildah ツールの主な利点は以下です。
- ルートレスモードでの実行 – ルートレスコンテナーは、特権を追加しなくても実行されるため、はるかに安全です。
- デーモンの必要なし – コンテナーが実行されていない場合、Podman は実行されないので、これらのツールではアイドル時のリソース要件がはるかに少なくなります。Docker は逆に、デーモンが常に実行しています。
- ネイティブ
systemd統合 – Podman ではsystemdユニットファイルを作成し、コンテナーをシステムサービスとして実行できます。
Podmanの保存場所
以下の引用の通り、 /var/lib/containersがデータの保存場所になります。
Podman、Buildah、および CRI-O のコンテナーエンジンはすべて、Docker の保存場所
/var/lib/dockerをデフォルトで使用する代わりに、同じバックエンドストアディレクトリー/var/lib/containersを使用します。
参考資料
本記事の作成に使用した参考資料を掲載します。


