Podmanは、OCIContainers仕様と互換性のあるコンテナエンジンです。 PodmanはRedHatLinuxの一部ですが、他のディストリビューションにもインストールできます。
OCIに準拠しているため、Podmanは、よく知られているDockerランタイムのドロップイン代替品として使用できます。ほとんどのDockerコマンドは、Podmanコマンドに直接変換できます。
2つのランタイムがどのように積み重なるかを見てみましょう。
ランタイムとは何ですか?
多くの人にとって、「コンテナ」は依然として「Dockerコンテナ」です。これは、現在のコンテナエコシステムを正確に表したものではありません。 Dockerは、他の互換性のあるランタイムで使用できるOCIコンテナーイメージを生成します。 Kubernetesはその一例であり、Podmanは別の例です。
結果として、PodmanとDockerのコア機能は重複しています。どちらも、もう一方がコンテナの実行に使用できるイメージを生成します。次に、2つのランタイムは、基本のコンテナー化機能に加えて、独自の特殊性を追加します。
RedHat Linuxを使用している場合、Podmanはextras
にあります リポジトリ。 subscription-manager
を使用します リポジトリを追加します。その後、yum
を使用できるようになります Podmanをインストールします。
su - subscription-manager repos --enable rhel-7-server-extras-beta-rpms yum -y install podman
他のほとんどの人気のあるLinuxディストリビューションでも、デフォルトのリポジトリにPodmanが含まれています。 apt install podman
ができます 、dnf install podman
またはpacman -S podman
インストールします。
PodmanのCLIは、DockerのCLIと意図的に連携しています。つまり、使い慣れたDockerコマンドを使用してPodmanコンテナを操作できます。
podman pull my-image:latest podman run my-image:latest --name my-container podman ps podman rm my-container
Podmanは、Dockerユーザーにすぐに馴染みがあるはずです。 docker
のエイリアスを作成できます podman
へ 日常の使用法の違いに気付かないでください。もちろん、すべての機能が利用できるわけではありません。PodmanにはSwarmに相当するものがないため、DockerSwarmコマンドを使用しようとするとエラーがスローされます。
Podmanの違いは何ですか?
Dockerに似ているように感じますが、Podmanにはいくつかの際立った違いがあります。まず、間違いなく最も重要なのは、そのアーキテクチャです。ポッドマンはデーモンレスです —コンテナを管理するための長期的なプロセスはありません。
podman
を実行する場合 コマンドを使用すると、コンテナを起動して画像を取得するプロセスと直接やり取りします。 DockerのCLIは、Dockerデーモンへの接続に依存しています。 CLIはコマンドをデーモンに送信し、デーモンはそれらに基づいてコンテナーを作成します。
Podmanのモデルは、Dockerのセキュリティに関するいくつかの懸念に対処するのに役立ちます。デーモンがないため、コンテナの攻撃対象領域が大幅に減少します。リモートアクセスが必要な場合、Podmanはサポートされているすべてのリソースタイプとやり取りできるRESTAPIを公開しています。
Podmanには、Dockerにはまったく欠けている独自の機能が付属しています。 Podmanでは、コンテナは一緒に動作する「ポッド」を形成できます。これは、Kubernetesポッドの概念に似ています。
ポッドを作成するには、pod create
を使用します コマンド:
podman pod create --name my-pod
コンテナは、--pod
を含めることでポッドに追加されます podman run
のフラグ :
podman run --pod my-pod --name image-1 my-image:latest podman run --pod my-pod --name image-2 another-image:latest
ポッド内のコンテナは、podman pod
を使用してまとめて管理できます コマンド:
podman kill my-pod # Kill all containers podman restart my-pod # Restart all containers podman stop my-pod # Stop all containers
ポッドの概念は、複数のコンテナーをまとめて管理できるため、強力です。フロントエンド、バックエンド、データベースなどのアプリコンテナを作成し、それらをポッドに追加して、まとめて管理することができます。
これに最も近いDockerは、Composeを使用します。 Composeを使用するには、docker-compose.yml
を作成する必要があります ファイルを作成し、別のdocker-compose
を使用します バイナリ。 Podmanを使用すると、ターミナルを離れることなく、1つのコマンドを使用してポッドを作成できます。
ポッドの定義をエクスポートする必要がある場合、PodmanはKubernetes互換のYAMLマニフェストを生成します。マニフェストを取得して、Kubernetesクラスターに直接適用できます。これにより、開発中のコンテナの実行と本番インフラストラクチャへの起動の間のギャップが狭まります。
podman generate kube
Podmanはルートレスコンテナをサポートしています。これにより、コンテナがホストのroot
として実行されないようにすることで、セキュリティをロックダウンできます。 ユーザー。 Dockerは、デーモン構成オプションとしてルートレスモードをサポートするようになりました。 PodmanはDockerの前に根がなく、その使用に重点を置いています。
まず、slirp4netns
をインストールします :
yum install slirp4netns
次に、ユーザースコープのネットワーク名前空間の数を構成します。
echo "user.max_user_namespaces=28633" > /etc/sysctl.d/userns.conf sysctl -p /etc/sysctl.d/userns.conf
このコマンドは、root
でなくてもネットワーク名前空間を使用できるようにします 。
これで、ルートレスコンテナを実行する準備が整いました。通常のユーザーとしてサーバーに接続します。 podman run
で新しいコンテナを起動します 。 root
ではなく、ユーザーアカウントのUIDを使用して作成されます 。
完全にルートレスの名前空間に加えて、podman
デフォルトでは、現在のユーザーを対象としています。画像とコンテナはユーザーの$HOME
に保存されます フォルダ。 podman ps
を実行すると またはpodman images
、あなたののみが表示されます システム上のすべてのリソースではなくコンテンツ。
Podmanは、デーモンなしで動作するOCI準拠のコンテナランタイムです。 CLIは、すべてのコアDockerコマンドを実装します。 Podmanに簡単に移行したり、既存のDockerインストールと一緒に使用したりできます。
Dockerとは異なり、Podmanは複数のコンテナーを管理するためのファーストクラスのサポートを備えています。ポッドモデルを使用すると、サービスのスタックを簡単に操作できます。ポッドレベルのコマンドを使用して、関連するすべてのコンテナを停止、再起動、および削除できます。
Podmanは、コンテナオーケストレーションサービスへのジャンプを支援する準備もできています。 Kubernetes互換のYAMLをエクスポートする機能により、Podmanは多くのコンテナー化された実稼働環境により近くなります。開発者とオペレーターは同じツールを使用してコンテナーを管理できるため、コラボレーションと柔軟性が向上します。