Debian11にPodmanをインストールする方法

RedHatによって開発されたPodmanは、人気のあるDockerランタイムエンジンのドロップイン代替品として設計された、無料のオープンソースのデーモンレスコンテナエンジンです。 Dockerと同様に、コンテナーイメージとOCIコンテナーを使用してアプリケーションを簡単に構築、実行、デプロイ、共有できます(Open Container Initiative)。 Podmanはユーザーとネットワークの名前空間を使用します。Dockerと比較して、Podmanはより分離された安全であると見なされます。 DockerのほとんどのコマンドはPodmanで動作します。 したがって、Dockerコマンドの実行に精通している場合は、podmanを使用するのはとても簡単です。

このガイドでは、インストール方法を学びます podman の上 Debian 11 ブルズアイ。

Debian11にPodmanをインストールする

podmanパッケージ、ライブラリ、および依存関係は、公式のDebianリポジトリですでにホストされています。 したがって、APTパッケージマネージャーを使用してpodmanを簡単にインストールできます。

まず、パッケージリストを更新します。

$ sudo apt update

次に、次のようにpodmanコンテナエンジンをインストールします。

$ sudo apt install podman

続行するように求められたら、「Y」と入力してEnterキーを押します。

インストールされているPodmanのバージョンを確認するには、次のコマンドを実行します。

$ podman --version

podmanのバージョンを確認する

podmanコンテナエンジンの詳細を収集するには、次のコマンドを実行します。

$ sudo podman info

以下のような複雑な詳細を表示する出力が急増するはずです。

podman情報を確認するpodman情報を確認する

Podmanレジストリを構成する

レジストリファイル registry.conf は、イメージをプッシュまたはプルするときに使用するコンテナレジストリを指定する構成ファイルです。 ファイルへのフルパスは /etc/containers/registries.conf。 ドッカーハブ、Quay.io、RedHatの、および多くを含む、そこに様々なコンテナのレジストリがあります。

図のように、テキストエディタを使用してファイルを表示できます。

# sudo /etc/containers/registries.conf

Dockerでは、コンテナレジストリはDockerHubのみです。 Podmanは、ユーザーが任意のレジストリから画像を検索およびプルするためのより多くの自由を提供します。 次の行を追加することで、コンテナレジストリのリストを定義できます。

unqualified-search-registries = [ ‘registry.access.redhat.com’, ‘registry.redhat.io’, ‘docker.io’]

実行時 podman search また podman pull コマンドを実行すると、podmanはこれらのレジストリに最初のレジストリから順番に連絡します。 Save 変更してファイルを終了します。

画像を検索する

コンテナイメージをプルする前に、さまざまなレジストリでそれらの可用性を検索するのが賢明です。

にとって example

$ sudo podman search nginx

Nginxコンテナ画像を検索Nginxコンテナ画像を検索

出力には、レジストリ名、イメージ名、簡単な説明など、豊富な情報が表示されます。

レジストリにログインする

イメージのプルまたはプッシュを開始する前に、レジストリにログインする必要があります。 の中に example 以下では、Redhatアカウントにログインしています。これにより、実際にはレジストリにアクセスできます。

$ sudo podman login registry.access.redhat.com

PodmanがレジストリにログインしますPodmanがレジストリにログインします

レジストリからログアウトするには、次のコマンドを実行します。

$ sudo podman logout registry.access.redhat.com

画像を引っ張る

画像をプルするには、次の構文を使用します。

$ sudo podman pull image_name

にとって example、Nginxの公式ビルドイメージをプルするには、次のコマンドを実行します。

$ sudo podman pull docker.io/library/nginx

podmanを使用してNginx画像をプルするpodmanを使用してNginx画像をプルする

別の画像を引っ張ってみましょう。 次のように、公式のMongoDBイメージをプルします。

$ sudo podman pull docker.io/library/mongo

podmanを使用してMongo画像をプルするpodmanを使用してMongo画像をプルする

画像の一覧表示

すべての画像を一覧表示するには、コマンドを発行します。

$ sudo podman images

podmanを使用してコンテナ画像を一覧表示するpodmanを使用してコンテナ画像を一覧表示する

画像からコンテナを作成する

これで、Debianシステム上にイメージが存在するようになったので、示されている構文を使用してコンテナーを起動できます。 -dオプションは、コンテナをバックグラウンドで実行し、 --name オプションは、コンテナのカスタム名を指定します

$ sudo podman run -d --name container_name image

にとって example、nginxのイメージからバックグラウンドと呼ばれるwebserv1でコンテナを起動するには、コマンドを実行します。

$ sudo podman run -d --name webserv1 docker.io/library/nginx

同じイメージから複数のコンテナを起動できます。 同じNginxイメージからwebserv2という別のコンテナを起動してみましょう。

$ sudo podman run -d --name webserv2 docker.io/library/nginx

画像からコンテナを起動する

コンテナの一覧表示

このセクションでは、コンテナで使用できるさまざまなコマンドについて説明します。

現在実行中のコンテナを確認するには、次のコマンドを発行します。

$ sudo podman ps

出力は、コンテナーID、IMAGE名、コンテナーを実行しているコマンド、作成日、ステータスなどの情報を提供する列に表示されます。

実行を終了したコンテナを含むすべてのコンテナを一覧表示するには、次の手順に従います。

$ sudo podman ps -a

コンテナを停止する

コンテナを停止するには、構文を使用します

$ sudo podman stop CONTAINER_ID

また

$ sudo podman stop container_name

の中に example、以下では、コンテナIDを使用してリストされた最初のコンテナを停止しました

$ sudo podman stop 9daeaabdfdfc

を使用して、コンテナが停止したことを確認できます。 podman ps 指図。 画像を停止した後、実行中の画像は1つだけであることがはっきりとわかります。

ポッドマンは画像を停止しますポッドマンは画像を停止します

The podman ps -a コマンドは、停止されたばかりのコンテナーを構成する両方のコンテナーをリストします。

$ sudo podman ps -a

ポッドマンは、停止したコンテナを含むすべてのコンテナをチェックしますポッドマンは、停止したコンテナを含むすべてのコンテナをチェックします

コンテナの起動

コンテナを開始するには、次の構文を使用します。

$ sudo podman start CONTAINER_ID

また

$ sudo podman start container_name

にとって example、webserv1を開始するには、次を実行します。

$ sudo podman start webserv1

コンテナポッドマンを開始しますコンテナポッドマンを開始します

コンテナのシェルにアクセスする

コンテナのシェルへのアクセスは、オペレーティングシステムのコンテナを使用して最もよく示されます。

ここでは、Ubuntuイメージをダウンロードまたはプルします。

$ sudo podman pull docker.io/library/ubuntu

イメージから、コンテナを作成または起動し、を使用してシェルにアクセスします。 -it オプション。

$ sudo podman run --name ubuntu -it docker.io/library/ubuntu /bin/bash

podmanはコンテナのシェルと相互作用しますpodmanはコンテナのシェルと相互作用します
  • -i、–interactive接続されていない場合でもSTDINを開いたままにします
  • -t、–tty疑似TTYを割り当てます。 デフォルトはfalseです

コンテナのログを確認する

コンテナのログを確認するには、次の構文を使用します。

$ sudo podman logs container_name

にとって example:

$ sudo podman logs webserv2

podmanでコンテナログを確認するpodmanでコンテナログを確認する

コンテナ統計を表示する

実行中のすべてのコンテナーの統計を表示するには、次のコマンドを実行します。

$ sudo podman stats

コンテナ画像の統計を表示するコンテナ画像の統計を表示する

コンテナを検査する

コンテナに関する複雑な詳細を印刷するには、検査オプションを使用します。

$ sudo podman inspect webserv2

これにより、長い出力がJSON形式で出力されます。

podmanを使用して画像を検査するpodmanを使用して画像を検査する

–formatオプションを使用して、出力をフィルタリングします。 にとって example webserv2コンテナのIPアドレスを出力するには実行

$ sudo podman inspect webserv2 --format '{{.NetworkSettings.IPAddress}}'

次に、IPの追加情報を実行できます。 example を使用して curl HTTPヘッダーを取得します。

$ curl -I ip-address

podmaninspectコマンドの出力をフィルタリングしますpodmaninspectコマンドの出力をフィルタリングします

コンテナの削除

コンテナを完全に削除または削除するには、実行中の場合は最初にコンテナを停止し、最後にコンテナを削除します。 これで example、websev1コンテナを停止して削除しました。

$ sudo podman stop webserv1

次に、停止したコンテナを削除します。

$ sudo podman rm webserv1

podmanを使用してコンテナを削除しますpodmanを使用してコンテナを削除します

画像を削除する

イメージを削除するには、まず、イメージから起動されたすべてのコンテナーを停止して削除したことを確認します。 次に、 rmi 示されているオプション。

$ sudo podman rmi image_name

にとって example、ubuntuイメージを削除するには、次のコマンドを実行します。

$ sudo podman rmi docker.io/library/ubuntu

podmanを使用して画像を削除しますpodmanを使用して画像を削除します

最新のPodmanをインストールする-ソースからコンパイルする

ソースから開発バージョンをインストールすることで、Podmanの最新バージョンをテストできます。

01.依存関係の構築と実行

sudo apt-get install
btrfs-progs
git
golang-go
go-md2man
iptables
libassuan-dev
libbtrfs-dev
libc6-dev
libdevmapper-dev
libglib2.0-dev
libgpgme-dev
libgpg-error-dev
libprotobuf-dev
libprotobuf-c-dev
libseccomp-dev
libselinux1-dev
libsystemd-dev
pkg-config
runc
make
libapparmor-dev
gcc
cmake
uidmap
libostree-dev

02.Conmonをインストールします

conmonはの仕事はコンテナの主要なプロセスを監視することであることを小さなCプログラムであるコンテナモニタです。

git clone https://github.com/containers/conmon
cd conmon
make
sudo make podman
sudo cp /usr/local/libexec/podman/conmon /usr/local/bin/

03.runcをインストールします

runcの最新バージョンをインストールするには

git clone https://github.com/opencontainers/runc.git $GOPATH/src/github.com/opencontainers/runc
cd $GOPATH/src/github.com/opencontainers/runc
make BUILDTAGS="selinux seccomp"
sudo cp runc /usr/bin/runc

03. Container Network Interface(CNI)をインストールします

CNIプラグインは、ネットワークインターフェイスをコンテナネットワーク名前空間に挿入するために使用されます。

git clone https://github.com/containernetworking/plugins.git $GOPATH/src/github.com/containernetworking/plugins
cd $GOPATH/src/github.com/containernetworking/plugins
./build_linux.sh
sudo mkdir -p /usr/libexec/cni
sudo cp bin/* /usr/libexec/cni

ネットワークをセットアップする

sudo mkdir -p /etc/cni/net.d
curl -qsSL https://raw.githubusercontent.com/containers/libpod/master/cni/87-podman-bridge.conflist | sudo tee /etc/cni/net.d/99-loopback.conf

構成を追加します

sudo mkdir -p /etc/containers
sudo curl -L -o /etc/containers/registries.conf https://src.fedoraproject.org/rpms/containers-common/raw/main/f/registries.conf
sudo curl -L -o /etc/containers/policy.json https://src.fedoraproject.org/rpms/containers-common/raw/main/f/default-policy.json

04.ソースからPodmanをインストールします

git clone https://github.com/containers/podman/ $GOPATH/src/github.com/containers/podman
cd $GOPATH/src/github.com/containers/podman
make
sudo make install

$ podman --version
podman version 4.0.0-dev

結論

podmanを使用してコンテナーを作成および管理することで、より優れたプロになるための確かな基盤が提供されたことを願っています。 このガイドでは、Debian 11Busterへのpodmanのインストールについて説明しました。