セクションを選択

Podman とは

URL をコピー

 

2024 年版 世界のテクノロジートレンド

テクノロジーの世界ではデジタル・トランスフォーメーションが急速に進み、企業の重要なビジネス領域の優先順位に変化が生じています。業界に関する知見を共有して 10 年目を迎える 2024 年版 世界のテクノロジートレンドレポートでは、IT と IT 以外における予算配分の 6 つの優先項目と、進歩を妨げる 3 つの障壁を明らかにします。

 

Podman (POD マネージャー) は、Linux® システム上でコンテナを開発、管理、実行するための オープンソースツールです。Red Hat® のエンジニアがオープンソース・コミュニティと共に開発した Podman は、libpod ライブラリを使用してコンテナエコシステム全体を管理します。 

アーキテクチャがデーモンレスで包括的であることから、Podman はコンテナ管理の選択肢として、より安全で利用しやすいものとなっています。また、開発者は BuildahSkopeo などの付属のツールと機能を使用して、コンテナ環境をニーズに合わせてカスタマイズすることができます。 

Pod は、Kubernetes Pod と同様、まとまって稼働し、同じリソースを共有するコンテナのグループです。Podman は、単純なコマンドライン・インタフェース (CLI) と libpod ライブラリ (コンテナ、Pod、コンテナイメージ、ボリュームを管理する API を提供) を介してこれらの Pod を管理します。Podman の CLI は、Open Container Initiative (OCI) コンテナを作成し、サポートします。OCI コンテナは、コンテナのランタイムと形式の業界標準を満たすように設計されていますが、より高度な構築機能は、補完的なプロジェクトである Buildah で利用できます。ユーザーは、Red Hat Enterprise LinuxFedoraCentOsUbuntu などのさまざまな Linux ディストリビューションで Podman を実行できます。 

Pod はそれぞれ、1 つのインフラコンテナと任意の数の通常のコンテナで構成されます。インフラコンテナは、Pod の実行を継続し、コンテナをホストから分離するユーザー名前空間を維持します。他のコンテナにはそれぞれ、プロセスを追跡し、停止したコンテナ (一部のリソースがまだ使用中であるために環境から取り除くことができない、機能していないコンテナ) を監視するためのモニターがあります。

Podman は、デーモンレスであるという点で他のコンテナエンジンとは一線を画しています。デーモンは、実行中のコンテナの面倒な作業を処理するために、ユーザー・インタフェースを使用せずにシステムのバックグラウンドで実行されるプロセスです。デーモンは、ユーザーとコンテナそのものの間の通信を仲介するものと考えてください。 

デーモンはコンテナ環境を管理する上では便利な方法だと言えますが、セキュリティの脆弱性をもたらす可能性もあります。多くのデーモンは、root 権限で実行されます。Linux システムでは、root アカウントは管理アクセス権を持つスーパーユーザーとして、ファイルの読み取り、プログラムのインストール、アプリケーションの編集などを行うことができます (同時に、管理者認証の必要性も回避されます)。このため、デーモンは、コンテナを制御してホストシステムに侵入しようとするハッカーにとって格好の標的になります。 

Podman はデーモンを切り離し、通常のユーザーが root 所有のデーモンと対話せずにコンテナを実行できるようにするか、ルートレスコンテナを使用できるようにします。ルートレスになることで、ユーザーは管理者権限を持つプロセスを必要とせずにコンテナを作成、実行、管理できるため、コンテナ環境にアクセスしやすくなり、セキュリティリスクも軽減できます。さらに、Podman はセキュリティ強化された Linux (SELinux) のラベルを使用して各コンテナを起動するため、管理者はコンテナプロセスに提供されるリソースと機能をより詳細に制御できます。

ユーザーは、コマンドラインから Podman を起動してリポジトリからコンテナをプルし、実行することができます。Podman は構成済みのコンテナランタイムを呼び出して、実行中のコンテナを作成します。  しかし、専用のデーモンがない場合、Podman は systemd (Linux オペレーティングシステムのシステムおよびサービスマネージャー) を使用して更新を行い、コンテナをバックグラウンドで実行し続けます。systemd と Podman を統合することで、コンテナの制御ユニットを生成し、systemd を自動的に有効にした状態でそれらを実行できます。

ユーザーは、システム上の自分のリポジトリのほか、自分のコンテナの自動起動および管理を制御する systemd ユニットを管理できます。ユーザーが自分のリソースとルートレスで実行されているコンテナを管理できるようにすることで、/var/lib/containers を誰でも書き込み可能にするなどのお粗末な慣例や、アプリケーションをさらなるセキュリティ上の問題にさらすようなシステム管理方法を阻止することができます。これにより、各ユーザーが別々のコンテナとイメージのセットを持ち、互いに干渉することなく同じホストで Podman を同時に使用できるようになります。ユーザーが作業を終了したら、共通のレジストリに変更をプッシュして、他のユーザーとイメージを共有できます。

Podman は、コンテナを管理するための RESTful API (REST API) もデプロイします。REST とは REpresentational State Transfer の略です。REST API は、REST アーキテクチャスタイルの制約に従い、RESTful Web サービスとの対話を可能にするアプリケーション・プログラミング・インタフェースです。REST API を使用すると、cURL、Postman、Google の Advanced REST client など、多くのプラットフォームから Podman を呼び出すことができます。

Podman はモジュール式のコンテナエンジンであるため、コンテナを構築したり移動したりするには、Buildah や Skopeo などのツールと一緒に使用する必要があります。Buildah を使用すると、ゼロから、またはイメージを出発点として使用してコンテナを構築できます。Skopeo は、さまざまな種類のストレージシステム間でコンテナイメージを移動し、docker.io、quay.io などのレジストリと組織内のレジストリの間、またはローカルシステム上のさまざまな種類のストレージの間でイメージをコピーできるようにします。このコンテナ化に対するモジュール式のアプローチにより、オーバーヘッドが削減され、目標の達成に必要な機能が分離されるため、柔軟で軽量な環境がもたらされます。また、より小型でモジュール化されたツールは迅速に進化することができ、各ツールは単一の目的に集中できます。 

Podman、Buildah、Skopeo は、特殊なナイフを一つにまとめたスイスアーミーナイフだと考えてください。これらを組み合わせて使用すると、ほぼすべてのコンテナのユースケースに対応できます。Podman は、これらのナイフの中で最も大きいものです。 

Podman と Buildah はコンテナを起動する際、デフォルトで OCI ランタイムの runC を使用します。ユーザーは、イメージをビルドして実行するか、runC を使用して Docker 形式のイメージを実行できます。この Go 言語ベースのツールは、ランタイム仕様を読み取り、Linux カーネルを構成し、最終的にコンテナプロセスを作成して開始します。一部の構成変更により、Podman を crun のようなフットプリントで使用することもできます。

Docker とは、Linux コンテナの作成と使用を可能にするコンテナ化テクノロジーのことです。Podman と Docker の主な違いは、Podman のデーモンレス・アーキテクチャです。Podman コンテナは常にルートレスでしたが、Docker は最近、デーモン構成にルートレスモードを追加しました。Docker はコンテナ作成および管理のためのオールインワンツールですが、Podman とそれに関連する Buildah や Skopeo などのツールは、コンテナ化の特定の側面により特化しており、クラウドネイティブ・アプリケーションで必要なものに応じてカスタマイズできます。 

Podman は Docker の強力な代替手段ですが、これら 2 つを連携させることもできます。ユーザーは、Docker を Podman のエイリアスとする (alias docker=podman)、またはその逆とすることで、簡単に切り替えることができます。さらに、podman-docker と呼ばれる rpm は、システムアプリケーション PATH に「docker」をドロップできます。これにより、「docker」コマンドが必要とされる環境で Podman が呼び出され、Docker からの移行が容易になります。Podman の CLI は Docker Container Engine に類似しており、ユーザーが一方に精通していれば、おそらくもう一方も使いこなせるでしょう。 

一部の開発者は、開発段階では Docker を使用して、ランタイム環境でセキュリティに強い Podman にプログラムを転送するという方法で Podman と Docker を併用し、セキュリティを強化しています。 

Podman は、Kubernetes や OpenShift Container Platform を使用せずにコンテナを実行する開発者に最適です。CRI-O は、Red Hat OpenShift® Container Platform のような Kubernetes コンテナ・オーケストレーション向けの、オープンソースのコミュニティ主導型コンテナエンジンです。

Podmanは、主要なコンテナエンジンと同等の高性能でありながら、現在多くの開発チームが求めている柔軟性、アクセス性、強化されたセキュリティを提供することで、コンテナの展望を変えました。Podman によって次のことが可能になります。

  • コンテナイメージのほか、実行、ネットワーキング、チェックポイント、削除など、コンテナのライフサイクル全体を管理する。
  • ルートレスコンテナと Pod のリソースを実行し、分離する。
  • OCI および Docker イメージと、Docker 互換の CLI をサポートする。
  • デーモンレス環境を作成し、セキュリティを向上させ、アイドル状態のリソース消費を削減する。 
  • Podman の高度な機能をサポートする REST API をデプロイする。
  • checkpoint/restore in userspace (CRIU) によって Linux コンテナ向けにチェックポイント/リストア機能を実装する。CRIU は、実行中のコンテナをフリーズさせ、そのメモリコンテンツと状態をディスクに保存できるため、コンテナ化されたワークロードをより迅速に再起動させることができます。
  • コンテナを自動更新する。Podman は、更新されたコンテナの起動に失敗した場合はそれを検出し、最後に機能していたバージョンに自動的にロールバックします。これにより、アプリケーションに新たなレベルの信頼性がもたらされます。 

Podman は Red Hat Enterprise Linux サブスクリプションに含まれているため、信頼性、サポート性、確実性の高い Universal Base Image (UBI) を使用して構築された OCI 準拠のコンテナを実行できます。Red Hat Enterprise Linux は、エンタープライズ環境で Linux コンテナを実行するための標準であり、開発者はコンテナのスピンアップ、デプロイの管理、新しいアプリケーションの開発スピードの向上を容易に実現できます。オープン・ハイブリッドクラウド全体で Red Hat Enterprise Linux 上に構築された可搬性のあるアプリケーションとコンテナを使用すると、アジリティを維持し、進化する変革の目標に対応できます。

Red Hat Enterprise Linux Web コンソールは、使いやすい Web インタフェースにより、システムのデプロイと日々の管理を単純化します。Podman は Web コンソールのコンポーネントとして利用でき、コンテナとイメージの管理に役立ちます。コンテナホストにアクセスし、Web コンソールのダッシュボードでシステム負荷を監視することにより、コンテナが使用している CPU とメモリーの量を監視できます。Web コンソールを使用すると、一般的なタスクだけでなく複雑な操作もシンプルになるため、コンテナ管理が効率化されます。

Ansible Playbook を使用することで、Red Hat Ansible® Automation Platform では、インストール、コンテナのデプロイ、時間とリソースを頻繁に消費するタスクなどの Podman 機能を自動化できます。 

Podman やオープンスタンダードをベースとする他のコンテナツールにより、Red Hat Enterprise Linux は、プロダクショングレードのサポート、安定性、セキュリティ機能だけでなく、Kubernetes と Red Hat OpenShift への道筋を提供する強力なコンテナホストになります。

関連資料

記事

コンテナと VM

Linux コンテナと仮想マシン (VM) は、さまざまな IT コンポーネントが組み合わさってシステムの他の部分から分離している、パッケージ化されたコンピューティング環境です。

記事

コンテナ・オーケストレーションとは

コンテナ・オーケストレーションは、コンテナのデプロイメント、管理、スケーリング、ネットワーキングを自動化します。

記事

Linux コンテナとは

Linux コンテナとは、システムから分離された一連のプロセスであり、そのプロセスのサポートに必要なすべてのファイルを提供する個別のイメージから実行されます。

Red Hat Enterprise Linux の詳細はこちら