概要
Podman (pod manager の略) は、コンテナを開発、管理、実行するためのオープンソースツールです。Red Hat® エンジニアとオープンソース・コミュニティによって開発されており、libpod ライブラリを使用してコンテナエコシステム全体を管理できます。
デーモンを使用しない包括的なアーキテクチャを採用しており、使いやすくセキュリティ重視のコンテナ管理ツールとなっています。Buildah や Skopeo などの付属ツールや機能によって、コンテナ環境をニーズに合わせてカスタマイズでき、ローカル環境で Podman を使用するためのグラフィカル・ユーザー・インタフェース (GUI) である Podman Desktop も用意されています。
Podman は、Red Hat Enterprise Linux、Fedora、CentOS、Ubuntu などのさまざまな Linux® ディストリビューションで実行できます。
Pod とは
Pod は、Kubernetes Pod と同様、まとまって稼働し、同じリソースを共有するコンテナのグループです。Podman は、単純なコマンドライン・インタフェース (CLI) と libpod ライブラリ (コンテナ、Pod、コンテナイメージ、ボリュームを管理するアプリケーション・プログラミング・インタフェース (API) を提供) を介してこれらの Pod を管理します。Podman の CLI は、Open Container Initiative (OCI) コンテナを作成し、サポートします。OCI コンテナは、コンテナのランタイムと形式の業界標準を満たすように設計されています。関連プロジェクトの Buildah には、さらに高度なビルド機能が備わっています。
Pod はそれぞれ、1 つのインフラコンテナと任意の数の通常のコンテナで構成されます。インフラコンテナは Pod を継続的に稼働させます。また、ユーザーの namespace を維持してコンテナをホストから分離します。他のコンテナにはそれぞれ、プロセスを追跡し、停止したコンテナ (一部のリソースがまだ使用中であるために環境から取り除くことができない、機能していないコンテナ) を監視するためのモニターがあります。
Podman と他のコンテナエンジンの相違点
Podman が他のコンテナエンジンと異なるのは、デーモンを使用しないという点です。つまり、コンテナを実行するのに、root 権限を持つプロセスを必要としません。
デーモンとは、システムのバックグラウンドで実行されるプロセスで、これによって、ユーザー・インタフェースを使用しないでコンテナを稼働させます。ユーザーとコンテナの通信を仲介するプロセスと考えると良いでしょう。
デーモンはコンテナ環境を管理する上では便利な方法だと言えますが、セキュリティの脆弱性をもたらす可能性もあります。多くのデーモンは、root 権限で実行されます。Linux システムでは、root アカウントは管理アクセス権を持つスーパーユーザーとして、(管理者認証を行うことなく) ファイルの読み取り、プログラムのインストール、アプリケーションの編集などを行うことができます。このため、デーモンは、コンテナを制御してホストシステムに侵入しようとするハッカーにとって格好の標的になります。
Podman はデーモンを使用せず、通常のユーザーが root 権限を持つデーモンを操作することなくコンテナを実行したりルートレスコンテナを使用できるようにしたりします。ルートレスにすることで、管理者権限のあるプロセスを必要とせずにコンテナを作成、実行、管理できるため、コンテナ環境にアクセスしやすくなり、セキュリティリスクも軽減されます。さらに、Podman は Security-Enhanced Linux (SELinux) のラベルを使用して各コンテナを起動するため、管理者はコンテナプロセスに提供されるリソースと機能をより詳細に制御できます。
Podman によるコンテナの管理方法
ユーザーは、コマンドラインから Podman を起動してリポジトリからコンテナをプルし、実行することができます。Podman は構成済みのコンテナランタイムを呼び出して、実行中のコンテナを作成します。しかし、専用のデーモンを持たないので、Podman は systemd (Linux オペレーティングシステムのシステムおよびサービスマネージャー) を使用して更新を行い、コンテナを常にバックグラウンドで実行します。systemd と Podman を統合することで、コンテナの制御ユニットを生成し、systemd を自動的に有効にした状態でそれらを実行できます。
ユーザーは、システム上の自分のリポジトリまたは systemd ユニットを使用してコンテナの自動起動と管理を行えます。ユーザー自身でリソースを管理でき、root 権限なしでコンテナを実行可能なため、不要なシステム領域への書き込みアクセス権など、余計な権限を追加してしまうことがありません。また、これにより、各ユーザーが別々のコンテナとイメージのセットを持ち、互いに干渉することなく同じホストで Podman を同時に使用できるようになります。作業が完了したら、変更を共通レジストリにプッシュして、他のユーザーとイメージを共有することも可能です。
Podman は、コンテナを管理するための RESTful API (REST API) もデプロイします。REST とは Representational State Transfer の略です。REST API は、REST アーキテクチャスタイルの制約に従い、RESTful Web サービスとの対話を可能にする API です。REST API を使用すると、cURL、Postman、Google の Advanced REST client など、多くのプラットフォームから Podman を呼び出すことができます。
Podman Desktop とは
Podman Desktop は、Podman の GUI であり、ノート PC やワークステーションでコンテナを操作するための中心的なインタフェースとして機能します。これにより、ローカルの Linux、Windows、macOS 環境のすべてで一貫した GUI を使用して、イメージの構築、プッシュ、プルや、Podman リソースの管理を直接行えます。すぐにデプロイ可能なコンテナ化アプリケーションを Kubernetes 環境に提供することもできます。
Podman Desktop は、拡張パックによる機能追加に対応しています。たとえば、Podman AI Lab はローカル環境で大規模言語モデル (LLM) と連携するアプリケーションを構築するためのレシピを追加します。また、オープンソースライセンス LLM の厳選カタログも含まれています。もう 1 つの例として Podman Desktop 向け Red Hat 拡張パックがあり、Red Hat OpenShift® など特定の Red Hat テクノロジーを利用するのに役立ちます。
Podman、Buildah、および Skopeo
Podman はモジュール式のコンテナエンジンであるため、コンテナを構築したり移動したりするには、Buildah や Skopeo などのツールと一緒に使用する必要があります。Buildah を使用すると、ゼロから、またはイメージを出発点として使用してコンテナを構築できます。Skopeo は、コンテナイメージをさまざまな種類のストレージシステム間で移動することが可能です。これにより、docker.io、quay.io、内部レジストリなどのレジストリ間や、ローカルシステム上の各種ストレージ間でイメージをコピーできます。こうしたモジュール型アプローチでのコンテナ化によって、オーバーヘッドが削減され、必要な機能が分離されるため、柔軟かつ軽量な環境が実現します。コンテナを使用すると、さらに小さいモジュール型ツールを利用できます。こうしたツールは、1 つの目的に特化させたり、必要に応じた頻度で更新したりすることが可能です。
Podman、Buildah、Skopeo は、アーミーナイフに収められたツールだと考えれば良いでしょう。この 3 つを組み合わせると、ほぼすべてのコンテナユースケースに対応できます。これらのツールのうち、最も総合的な機能を備えているのは Podman です。
Podman と Buildah はコンテナを起動する際、デフォルトで OCI ランタイムの runC を使用します。runC を使用すると、イメージのビルドと実行、および Docker 形式のイメージの実行が可能です。この Go 言語ベースのツールは、ランタイム仕様を読み取り、Linux カーネルを構成し、最終的にコンテナプロセスを作成して開始します。設定を多少変更すれば、crun などその他のランタイムも使用できます。
Podman とDocker
Docker とは、Linux コンテナの作成と使用を可能にするコンテナ化テクノロジーのことです。Podman と Docker の主な違いは、Podman にはデーモンレス・アーキテクチャが採用されている点です。Podman コンテナは当初からルートレスで動作していますが、Docker でデーモン構成にルートレスモードが追加されたのはつい最近です。Docker は、コンテナの作成と管理を行うオールインワンツールです。それに対し、Podman とその関連ツール (Buildah、Skopeo など) は、コンテナ化の特定の側面に特化しているので、環境をカスタマイズする際には、必要なツールだけを使うことができます。
Podman は Docker の強力な代替手段ですが、これら 2 つを連携させることもできます。たとえば、Docker を Podman のエイリアスに指定する (alias docker=podman) またはその逆の設定を行うと、2 つを簡単に切り替えられます。さらに、podman-docker と呼ばれる rpm は、システムアプリケーションのパスに「docker」をドロップできます。これにより、「docker」コマンドが必要とされる環境で Podman が呼び出され、Docker からの移行が容易になります。Podman の CLI は Docker の CLI に似ているため、どちらか片方に慣れていれば、もう片方も使いこなせるでしょう。
開発段階では Docker を使い、ランタイム環境ではプログラムを Podman に転送するなど、Podman と Docker を組み合わせて利用している開発者もいます。
Podman は、Kubernetes や Red Hat OpenShift Container Platform を使用せずにコンテナを実行する開発者に最適です。Kubernetes によるコンテナ・オーケストレーションには、コミュニティ主導のオープンソース・コンテナ・エンジンである CRI-O を使用できます。
Podman を使用する理由
Podman は、コンテナを取り巻く環境を大きく変えました。主要なコンテナエンジンに匹敵する高性能を実現する一方で、多くの開発チームが求めている柔軟性、アクセシビリティ、セキュリティ機能を備えているからです。Podman によって次のことが可能になります。
- コンテナイメージの管理に加え、コンテナの実行、ネットワーキング、チェックポイント設定、削除を含むコンテナライフサイクル全体を管理する
- ルートレスコンテナと Pod のリソースを実行し、分離する
- OCI および Docker イメージと、Docker 互換の CLI をサポートする
- デーモンレス環境を作成し、セキュリティを向上させ、アイドル状態のリソース消費を削減する
- Podman の高度な機能をサポートする REST API をデプロイする
- Checkpoint/Restore in Userspace (CRIU) を使用して、Linux コンテナにチェックポイント設定/復元の機能を実装する。CRIU は、実行中のコンテナをフリーズさせ、そのメモリコンテンツと状態をディスクに保存できるため、コンテナ化されたワークロードをより迅速に再起動させることができます。
- コンテナを自動更新する。Podman は、更新されたコンテナの起動に失敗した場合はそれを検出し、最後に機能していたバージョンに自動的にロールバックします。これにより、アプリケーションに新たなレベルの信頼性がもたらされます。
Red Hat が提供できるサポート
Podman は Red Hat Enterprise Linux サブスクリプションに含まれているため、実績があり、サポート性と信頼性の高い Universal Base Image (UBI) を使用して構築された OCI 準拠のコンテナを実行できます。Red Hat® Enterprise Linux は、エンタープライズ環境での Linux コンテナの実行における業界標準です。コンテナを容易にスピンアップし、デプロイを管理できるほか、新規アプリケーションの開発を加速できます。Red Hat Enterprise Linux インフラストラクチャをアップグレードすることで、これらの利点を最大限に活用できるようになります。オープン・ハイブリッドクラウド環境全体で、Red Hat Enterprise Linux に可搬性の高いアプリケーションとコンテナを構築して、アジリティを維持すると同時に、新たな目標に応じて変革を常に推進できます。
Red Hat Enterprise Linux Web コンソールは、使いやすい Web インタフェースにより、システムのデプロイと日々の管理を単純化します。Podman は Web コンソールのコンポーネントとして利用でき、コンテナとイメージの管理に役立ちます。コンテナホストにアクセスし、Web コンソールのダッシュボードでシステム負荷を監視することにより、コンテナが使用している CPU とメモリーの量を監視できます。Web コンソールを使用すると、一般的なタスクだけでなく複雑な操作もシンプルになるため、コンテナ管理が効率化されます。
Red Hat Ansible® Automation Platform で Ansible Playbook を使用すると、インストールやコンテナのデプロイに加え、時間とリソースを頻繁に消費するその他のタスクなどといった Podman の機能を自動化できます。
オープンスタンダード・ベースの Podman や Podman Desktop などのコンテナツールにより、Red Hat Enterprise Linux は、プロダクショングレードのサポート、安定性、セキュリティ機能だけでなく、Kubernetes と Red Hat OpenShift への道筋を提供する強力なコンテナホストになります。