コンテナは現代のコンピューティングの重要な部分であり、コンテナを取り巻くインフラストラクチャが進化するにつれて、新しくより優れたツールが登場し始めています。以前はLXCだけでコンテナーを実行できるようになり、Dockerが人気を博し、事態はさらに複雑になり始めました。最終的に、Podmanにふさわしいコンテナ管理システムを手に入れました。これは、コンテナとポッドの構築、実行、管理を容易にするデーモンレスのコンテナエンジンです。
コンテナーは、cgroupや名前空間などのLinuxカーネル機能と直接インターフェースし、それらの名前空間内に多くの新しいプロセスを生成します。つまり、コンテナを実行すると、文字通りLinuxシステムが内部で実行されます。 Linuxシステム。オペレーティングシステムの観点からは、管理および特権アクティビティに非常によく似ています。通常のユーザーは通常、コンテナが要求する方法でシステムリソースを自由に管理することはできません。そのため、デフォルトでは、rootまたはsudo
Podmanを実行するには権限が必要です。ただし、これはデフォルト設定にすぎず、使用可能な設定または意図された設定だけではありません。この記事では、通常のユーザーがsudo
を使用せずにPodmanを実行できるようにLinuxシステムを構成する方法を示します。 (「ルートレス」)。
名前空間のユーザーID
Linuxコンテナ
- Linuxコンテナとは何ですか?
- コンテナ用語の概要
- ダウンロード:Containers Primer
- Kubernetesオペレーター:コンテナオーケストレーションプラットフォームの自動化
- eBook:クラウドネイティブアプリを設計するためのKubernetesパターン
- Kubernetesとは何ですか?
カーネル名前空間は、基本的に、Linuxがどのプロセスが一緒に属しているかを追跡するのに役立つ架空の構造です。これは、Linuxの赤いキューロープです。実際には、あるキュー内のプロセスと別のキュー内のプロセスに違いはありませんが、プロセスを相互に封鎖することは役に立ちます。それらを分離しておくことは、プロセスの1つのグループを「コンテナ」として宣言し、プロセスのもう1つのグループをOSで宣言するための鍵です。
Linuxは、ユーザーID(UID)とグループID(GID)によって、各プロセスを所有しているユーザーまたはグループを追跡します。通常、ユーザーは、名前空間内の子プロセスに割り当てるために、1,000程度の従属UIDにアクセスできます。 Podmanは、コンテナを起動したユーザーに割り当てられた従属オペレーティングシステム全体を実行するため、subuidsとsubgidsのデフォルトの割り当てよりもはるかに多くのものが必要です。
usermod
を使用すると、ユーザーにさらに多くのsubuidsとsubgidsを付与できます。 指図。たとえば、より多くのsubuidsとsubgidsをユーザーに付与するにはtux
、ユーザーが割り当てられていない適切な高さのUID(200,000など)を選択し、数千ずつインクリメントします。
$ sudo usermod \
--add-subuids 200000-265536 \
--add-subgids 200000-265536 \
tux
名前空間へのアクセス
名前空間にも制限があります。これは通常非常に高く設定されますが、systctl
を使用して名前空間のユーザー割り当てを確認できます。 、カーネルパラメータツール:
$ sysctl --all --pattern user_namespaces
user.max_user_namespaces = 28633
これはたくさんの名前空間であり、おそらくディストリビューションがデフォルトで設定しているものです。ディストリビューションにそのプロパティがないか、非常に低く設定されている場合は、このテキストをファイル/etc/sysctl.d/userns.conf
に入力して作成できます。 :
user.max_user_namespaces=28633
その設定をロードします:
$ sudo sysctl -p /etc/sysctl.d/userns.conf
ルートなしでコンテナを実行する
構成を設定したら、コンピューターを再起動して、ユーザーとカーネルのパラメーターへの変更が読み込まれ、アクティブになっていることを確認します。
再起動したら、コンテナイメージを実行してみてください:
$ podman run -it busybox echo "hello"
hello
コマンドのようなコンテナ
コンテナを初めて使用する場合、コンテナは不思議に感じるかもしれませんが、実際には、既存のLinuxシステムと同じです。これらは文字通りシステム上で実行されるプロセスであり、エミュレートされた環境や仮想マシンのコストや障壁はありません。コンテナをOSから分離するのはカーネルの名前空間だけなので、実際には、異なるラベルが付いたネイティブプロセスにすぎません。 Podmanはこれをこれまで以上に明確にし、Podmanをルートレスコマンドとして構成すると、コンテナーは仮想環境というよりもコマンドのように感じられます。 Podmanを使用すると、コンテナやポッドが簡単になります。ぜひお試しください。