Tutoriel Linux

Podman を使用した Linux: マシン全体に root 権限を与えずにコンテナを起動する

Débutant2 min de lecture

あなたは、dockerグループにアカウントを追加することなく、テストサービス、ウェブツール、またはLinuxイメージを起動したいです。Podmanは、ユーザーセッションからコンテナを実行でき、ストレージとプロセスはあなたのUIDに関連付けられます。これはクリーンに起動するのに便利ですが、イメージ、ボリューム、公開ポートの管理を怠ってはいけません。

Tux admin lance un conteneur isolé près d'un serveur Linux avec un cadenas et des cubes de conteneur
PodmanはLinuxユーザーセッションからコンテナを実行できます。

Podmanをインストールし、rootlessモードを確認する

DebianまたはUbuntuでは、ディストリビューションのリポジトリからパッケージをインストールします。Fedoraも標準リポジトリに含まれています。

sudo apt update
sudo apt install podman
podman --version
podman info --debug

その後、podman info --debugを通常のアカウントで、sudoなしで実行します。出力にはrootlessのコンテキストが表示されるはずです。Podmanはユーザー空間と、/etc/subuidおよび/etc/subgidに定義された範囲を使用してコンテナの識別子をマッピングします。

newuidmapsubuid、またはsubgidに関するメッセージは、準備が不完全であることを示しています。エラーを回避するために直接rootに切り替えないでください。まず、次のコマンドであなたの入力を確認し、不足している場合はディストリビューションのドキュメントに記載された方法を適用します。

grep "^$USER:" /etc/subuid /etc/subgid

特権なしで初めてのコンテナを起動する

非常に小さなイメージと自動的に停止するコマンドから始めます。これにより、イメージのダウンロード、ローカルストレージ、ネットワーク上でサービスを開かずに実行されていることを確認できます。

podman run --rm docker.io/library/alpine:latest echo "Podmanは動作しています"

--rmオプションは、終了時にコンテナを削除します。イメージはキャッシュに残ります。停止しているコンテナを含め、イメージとコンテナを確認するには、次のコマンドを使用してください:

podman images
podman ps -a

常に利用可能なサービスには明示的な名前を付けてください。この例では、nginxをバックグラウンドで起動し、ポート8080をローカルマシンだけに公開します。

podman run -d --name web-test 
  -p 127.0.0.1:8080:80 
  docker.io/library/nginx:alpine

podman ps
curl -I http://127.0.0.1:8080

127.0.0.1:プレフィックスは、このテストをすべてのネットワークインターフェースに公開するのを防ぎます。-p 8080:80とだけ書くと、結果を確認するにはpodman port web-testss -ltnpを使用してください。サーバー上では、ファイアウォールとリスニングアドレスを選択した後のみ、パブリックポートを開いてください。

状態、ログを読み、サービスをクリーンに停止する

起動されたコンテナは、アプリケーションが応答していることを証明するものではありません。イメージまたは設定を変更する前に、その状態、最新のログ、およびネットワークのマッピングを確認してください。

podman inspect web-test --format '{{.State.Status}}'
podman logs --tail 50 web-test
podman port web-test
podman stop web-test
podman rm web-test

podman inspectは、実際に適用された設定を表示します。履歴からコピーしたコマンドを再確認するより信頼性があります。また、イメージの名前とタグをドキュメントに保持してください。latestタグは次回のダウンロード時に異なるバージョンを指す可能性があります。持続的に使用するためには、特定のバージョンを選択し、更新を計画してください。

rootlessの限界と避けるべき罠

  • rootlessコンテナはホストへの影響を制限しますが、信頼できないイメージ、変数に注入された機密情報、または書き込みボリュームは依然としてリスクです。
  • --privileged--network host、およびセンシティブなディレクトリのマウントを避けてください。これらのオプションは隔離を大幅に減少させます。
  • アプリケーションが変更する必要がない場合、データを読み取り専用でマウントしてください。たとえば、-v "$HOME/site:/usr/share/nginx/html:ro"
  • 1024未満のポート、一部のデバイス、およびいくつかのネットワーク制約には追加の設定が必要です。反射的に特権を追加しないでください。
  • PodmanはDockerの構文の大部分を受け入れますが、サービス、ネットワーク、およびストレージが常に同じように動作するわけではありません。移行の前に、他のフォルダーでプロジェクトをテストしてください。

dockerグループは、Dockerデーモンへの非常に広範なアクセスを提供することがよくあります。Podmanのrootlessは、あなたのアカウントから起動されたコンテナについて、この習慣を避けています。この権限の選択とDockerエンジンのインストールを比較するには、Debian上のDockerに関するガイドを再確認してください。

公式のPodmanのドキュメントではrootlessの動作について詳しく説明しており、podman runのマニュアルにはネットワーク、ボリューム、および識別子のオプションがリストされています。シンプルなイメージ、ローカルポート、読み取り専用ボリュームから始めてください。サービスを移動する前に、Podmanがあなたの使用に適しているかすぐにわかります。

sudo apt update && sudo apt upgrade