GNU/Linux >> Linux の 問題 >  >> Ubuntu

Podman vs Docker:知っておくべきことすべて

はじめに

コンテナ化は、開発者に合理化された方法でアプリケーションをテスト、構築、およびデプロイする方法を提供します。コンテナの利点には、移植性、一貫性、効率性、および従来のVMと比較したオーバーヘッドの削減が含まれます。

長い間、Dockerは市場で最も人気のあるコンテナ管理エンジンでした。しかし、コンテナ化がDevOpsの世界で標準になるにつれて、Podmanのような競合他社が出現しました。

この記事では、2つのコンテナー管理エンジン(DockerとPodman)を比較します。また、ニーズに合ったエンジンを選択するのにも役立ちます。

PodmanとDocker:定義

Dockerとは何ですか?

Dockerは、コンテナーを作成、デプロイ、および管理するための一般的なプラットフォームです。 Dockerコンテナーを使用すると、開発者はシステムに依存しないアプローチをソフトウェアのデプロイに適用できます。 DockerはどのOSでも同じDockerコンテナーを実行するため、コンテナー化されたアプリケーションはクロスプラットフォームです。

Podmanとは何ですか?

Podmanは、RedHatによって開発されたデーモンレス、ルートレスのコンテナーエンジンであり、Dockerの代替として設計されています。モジュラー設計により、Podmanは必要な場合にのみ個々のシステムコンポーネントを使用できます。コンテナ管理へのルートレスアプローチにより、root以外のユーザーがコンテナを実行できます。

Podman Vs. Docker:比較

次のセクションでは、PodmanとDockerの類似点と相違点について詳しく説明します。

ドッカー ポッドマン
デーモン Dockerデーモンを使用します デーモンレスアーキテクチャ
ルート コンテナをルートとしてのみ実行します コンテナをルートおよび非ルートとして実行します
画像 コンテナイメージを作成できます Buildahを使用してコンテナイメージを構築します
モノリシックプラットフォーム はい いいえ
Docker-swarm サポートされています サポートされていません
Docker-作成 サポートされています サポートされています
ネイティブで実行 Linux、macOS、Windows Linux、macOS、Windows(WSL付き)

アーキテクチャ

Docker クライアントサーバーアーキテクチャを利用します。 Dockerデーモンは、コンテナーを管理し、クライアントとサーバー間の通信を維持する永続的なバックグラウンドプロセスです。 docker versionの出力 コマンドは、クライアントとサーバーのバージョンごとに別々のセクションを表示します。

ポッドマン fork-execモデルを使用してコンテナを管理します。 Podmanはプロセスであり、クライアントサーバーパラダイムを使用しないため、デーモンを実行する必要はありません。ポッドマンコンテナは、メインのポッドマンプロセスの子プロセスです。 podman versionを使用する コマンドは、Podmanが1つのバージョン番号のみをリストすることを示しています。

Podmanアーキテクチャのメインユニットはコンテナです。ただし、Podmanはポッドの概念も導入しています。 Kubernetesポッドと同様に、Podmanポッドは、同じシステムリソースを共有する1つ以上のコンテナのグループです。ポッドは、メインコンテナとそれをサポートするサイドカーコンテナで構成されています。

使いやすさ

Docker わかりやすく直感的なコマンドの包括的なセットを備えています。 Dockerを使用すると、開発者はコンテナ化されたアプリケーションを簡単に作成、デプロイ、管理できます。

ポッドマン ソフトウェア開発ワークフローでDockerをシームレスに置き換えるために構築されたため、そのコマンドはDockerのコマンドとほとんど同じです。たとえば、docker pull コマンドはpodman pullになります

PodmanがDockerの使いやすさを継承していることを除けば、2つのツールの類似性は、DockerからPodmanへの移行にほとんど労力がかからないことも意味します。

ルート権限

Docker デーモンは常にrootユーザーとして実行されるため、デーモンと通信するにはroot権限が必要です。ユーザーがdockerのメンバーでない場合 Unixグループでは、sudoコマンドを使用してDockerコマンドを実行する必要があります。 Dockerをルートレスモードで実行することは可能ですが、追加のパッケージと特定のストレージドライバーをインストールする必要があります。

ポッドマン 設計上ルートレスです。そのモジュラーアーキテクチャのおかげで、さまざまなユーザーにさまざまな特権を付与することが可能です。

イメージの構築

Docker docker buildを使用します dockerfileとビルドコンテキストからコンテナイメージをビルドするコマンド。ビルドコンテキストは、コンテナの作成に使用されるdockerfileで指定されたファイルのセットです。

ポッドマン podman buildを備えています docker buildと同様の構文を使用して機能するコマンド

ただし、Podmanは Buildahを使用します 、別のオープンソースツールで、構築プロセスを実行します。 podman buildの場合 実行されると、 buildah bud (build-using-dockerfile)コマンドは、 docker buildをエミュレートするために呼び出されます コマンド。

実行中のコンテナ

Dockerの場合 docker runコマンドを受け取り、複数のアクションを実行します:

  1. ユーザーが指定した画像がローカルに存在するかどうかを確認します。そうでない場合は、構成されたレジストリからイメージをプルします。
  2. 画像の上に書き込み可能なコンテナレイヤーを作成します。
  3. コンテナを起動します。

Podmanでコンテナを実行する podman runを使用して実行されます コマンド。docker runと同じように機能します。 。 Dockerと比較したPodmanの主な利点の1つは、Podmanが systemdと完全に統合されることです。 デフォルトでは。これにより、Podmanはコンテナ内でsystemdをすぐに実行できるようになります。

DockerSwarmとDockerCompose

Docker Swarm Dockerコンテナを管理するために使用されるコンテナオーケストレーションプラットフォームです。これにより、開発者はDockerノードのクラスターを実行し、他の依存関係を必要とせずにスケーラブルなアプリケーションをデプロイできます。

ポッドマン DockerSwarmをサポートしていません。ただし、Podmanユーザーは、Podmanドライバーに付属しているNomadなどのツールを使用できます。

Docker Composeは、マルチコンテナーアプリケーション環境を管理するためのツールです。コンテナの開始と管理を自動化するため、ソフトウェア開発ライフサイクル(SDLC)の一部として役立ちます。

バージョン3.0以降、 Podman DockerComposeをサポートします。以前のバージョンのPodmanには、Docker Composeが機能するために必要なDockerデーモンをシミュレートする方法がなかったため、PodmanComposeのようなユーザーフレンドリーではない代替手段を使用していました。ただし、Podman3.0ではpodman.socketが導入されています 、Dockerデーモンを置き換えるUNIXソケット。

セキュリティ

Docker 設計上、特にプロセスが非特権ユーザーによって実行される場合は、安全なツールと見なされます。セキュリティの観点から、特権モードでコンテナを実行することはお勧めしません。

他のツールと同様に、ユーザーがセキュリティのベストプラクティスを適用すると、Dockerはさらに安全になります。 AppArmor、SELinux、GRSECを有効にすることで、Dockerのセキュリティをさらに強化できます。

ポッドマン のfork-execアーキテクチャにより、Dockerよりもさらに安全なソリューションになります。 fork-execモデルを使用すると、システムはシステムファイルを変更するユーザーを正しく記録できますが、Dockerで使用されるクライアントサーバーアプローチでは記録できません。したがって、Podmanではより詳細な監査ログが可能になります。

ルートレスコンテナは、システムの全体的なセキュリティを向上させるもう1つのPodman機能です。特定のユーザーに特定の特権を割り当てることができるため、管理者は重要なサーバーコンポーネントへのアクセス制御を向上させることができます。

PodmanとDocker:選択方法

次の場合にDockerを選択します:

  • 十分に文書化されたツールを好む 。ポッドマンに対するDockerの主な利点は、広く使用されていることです。オンラインで利用できるDocker関連のサポートが大量にあるということは、インターネットを検索することで多くの潜在的な問題を解決できることを意味します。
  • コンテナオーケストレーションのサポートが必要です 。 Docker Swarmのサポートは、Dockerのもう1つの重要な利点です。 Podmanコンテナをオーケストレーションしたいユーザーは、Docker Swarmほど機能が豊富ではない代替手段に頼るか、学習曲線が急で、単純なプロジェクトには複雑すぎることが判明する可能性のあるKubernetesに飛び込む必要があります。

次の場合にPodmanを選択します:

  • セキュリティを重視します 。 Podmanのアーキテクチャは、Dockerのアーキテクチャよりも本質的に安全です。
  • 今後Kubernetesに移動する予定です 。 Podmanはポッドの概念を導入しており、Kubernetesの出発点として適しています。

DockerとPodmanはどちらもOCIに準拠しているため、これらを並べて使用することもできます。たとえば、Dockerの堅牢性は開発マシンで採用できますが、dev、int、およびprod環境は、Podmanのセキュリティ強化の恩恵を受けることができます。


Ubuntu
  1. Ubuntu13.04について知っておくべきことすべて

  2. CentOSストリームについて知っておくべきことすべて

  3. Ubuntu Server 知っておくべきこと

  1. Fedora 30がリリースされました、ここにあなたが知る必要があるすべてがあります

  2. Linux tmpディレクトリ:知っておくべきことすべて

  3. Linuxファイル圧縮:知っておくべきことすべて

  1. Linuxファイルのパーミッション:知っておくべきことすべて

  2. LinuxのSwappiness:知っておくべきことすべて

  3. UbuntuとLubuntu:知っておくべきことすべて