GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

Podmanとは何ですか?Dockerとどのように異なりますか?

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は多くのコンテナー化された実稼働環境により近くなります。開発者とオペレーターは同じツールを使用してコンテナーを管理できるため、コラボレーションと柔軟性が向上します。


Docker
  1. Podmanとは何ですか?LinuxにPodmanをインストールする方法

  2. Dockerコンテナをエクスポートおよびインポートする方法

  3. Docker(およびLinuxコンテナー)とは何ですか?

  1. $ {1 +“ [email protected]”}はシェルスクリプトで何を意味し、「[emailprotected]」とはどのように異なりますか?

  2. コンテナ化とは何ですか?DockerとKubernetesとはどのように関連していますか?

  3. UbuntuでDockerをインストールしてDockerコンテナを実行する方法

  1. Makefileとは何ですか?どのように機能しますか?

  2. Webサーバーとは何ですか?Webサーバーはどのように機能しますか?

  3. コンテナと Dockerfile から Docker イメージを作成する方法