Docker を使用したものの、システムのリソースを大量に消費することに気付いたことがありますか?その場合は、Docker の代替を提供する Red Hat の新しいツールである Podman をチェックしてみてください。
Podman は、コンテナーの作成と管理をシームレスにするために設計されたツールです。このチュートリアルでは、Podman をインストールし、いくつかの基本的な使用シナリオを学習します。最終的に、Podman が適切なツールであるかどうかを判断する必要があります。
準備?読み進めて、コンテナの管理を新たに開始してください!
前提条件
このチュートリアルは実践的なデモンストレーションです。フォローしたい場合は、次のものがあることを確認してください。
- Linux マシン – このデモでは Ubuntu 20.04 LTS を使用していますが、どの Linux ディストリビューションでも動作します。
- sudo 権限を持つ root 以外のユーザー
Ubuntu への Podman のインストール
Podman でコンテナーを管理する前に、Podman をマシンにインストールする必要があります。Podman は Linux ディストリビューションにプリインストールされていないためです。
Podman を Ubuntu にインストールするには、まず APT パッケージ マネージャーを更新し、Podman パッケージ リポジトリを追加します。
1. ターミナルを開き、apt update
を実行します 以下のコマンドを実行して、最新の更新プログラムを確実にインストールしてください。このコマンドにより、マシンとパッケージ リポジトリの間でパッケージの不一致がなくなります。
sudo apt update -y
2. パッケージ インデックスを更新したら、source
を実行します。 以下のコマンドで /etc/os-release
を実行します スクリプトとしてファイルします。このコマンドは、使用している Ubuntu のバージョンをマシンが認識できるようにします。
os-release ファイルには、名前やコードネームなどのオペレーティング システム情報が含まれています。このファイルには、さまざまなコンポーネント (カーネル、X サーバーなど) のバージョン番号などのその他の詳細も含まれる場合があります。
source /etc/os-release
3. sh -c echo
を実行します 以下のコマンドで kubic
を追加します APT への deb パッケージ リポジトリ。 Podman は Ubuntu のデフォルト リポジトリでは利用できないため、インストールする前に Podman リポジトリを追加する必要があります。
以下のコマンドは以下を実行します:
- 新しいファイルを作成します (
sh -c
)/etc/apt/sources.list.d/
で ディレクトリ。このディレクトリは、APT がマシンにインストールする deb パッケージをダウンロードする場所です。
- 特定のバージョンの Ubuntu (
{VERSION_ID}
) を使用していることを確認します )、これは以前source
から取得したバージョンです 上記の手順 2 のコマンド
- 出力をリダイレクトします (
>
) ファイルの最後に書き込み、入力がファイルに正しく書き込まれるようにします (sources.list.d/devel:kubic:libcontainers:stable.list
).
sudo sh -c "echo 'deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list"
4. wget
を実行します。 以下のコマンドを実行して、APT の信頼できるキーのリストにリポジトリ キーを追加します。
Red Hat はキーをホストし、公開キーを持っている他の人に対してのみ検証する秘密キーで署名します。このキーにより、ダウンロードしてインストールしたパッケージが他の誰かではなく Red Hat によってリリースされることが保証されます。
wget -nv https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/xUbuntu_${VERSION_ID}/Release.key -O- | sudo apt-key add -
5. apt update
を再実行します コマンドを実行して、APT のパッケージ リストが最新であることを確認します。
sudo apt update -y
6. 次に、apt install
を実行します。 以下のコマンドで podman
をインストールします .
sudo apt install podman -y
7. 最後に、以下のコマンドを実行して Podman のインストール済み --version
を確認します。 .
podman --version
以下に示すように、インストールされている Podman のバージョンは、執筆時点での最新バージョンである 3.4.2 であり、実際のバージョンとは異なる場合があります。
以下の podman inf コマンドを実行して、Podman のインストールに関する詳細情報を表示することもできます。
podman info
OCI レジストリの有効化
Podman を使用してコンテナを作成する前に、Podman が OCI レジストリと通信できることを確認してください。 Podman は複数の OCI レジストリを同時にサポートするため、異なるリポジトリを使用してコンテナを作成できます。
/etc/containers/registries.conf
を開く 任意のテキスト エディターでファイルします。このファイルは、Podman が通信できるすべてのレジストリを定義します。 Podman はこのファイルを参照して、接続する必要があるレジストリを見つけます。
sudo nano /etc/containers/registries.conf
次に、registries.conf に入力します 次の行を含むファイルを作成し、変更を保存してエディターを閉じます。
これらの行は、Docker Hub (docker.io, registry.access.redhat.com) でパブリック レジストリを使用するように Podman を構成します。 ) とプライベート レジストリ (quay.io) )、推奨されます。
[[registry]]
prefix="[quay.io]( )"
location="internal.registry.mirror/quay"
[[registry]]
prefix="[docker.io]( )"
location="internal.registry.mirror/docker"
[[registry]]
prefix="[registry.access.redhat.com]( )"
location="internal.registry.mirror/redhat"
Podman コンテナの実行 Podman 特権付き
Podman をインストールしてレジストリを構成したので、Podman 権限で Podman コンテナーの実行を開始できます。 Linux カーネルは、機能などのシステム コールで幅広い権限チェックをサポートしています。
Podman コンテナーの場合、機能はユーザー名前空間内のルートのデフォルトの動作を制御します。 --privileged
を使用できます コンテナーを実行するときのフラグで、コンテナーにまだ存在しないすべての機能を追加します。
1. podman run
を実行します 以下のコマンドで fedora
を作成します 機能のないコンテナー。
podman run -d fedora sleep 100
2. 次に、以下の podman top
を実行します すべての機能を一覧表示するコマンド。
podman top -l capeff
以下に示すように、通常のルートレス コンテナの機能は限られています。
3. podman run
を実行します 以下のコマンドを実行して、すべての機能を備えたコンテナーを作成します (--privileged
)。
podman run --privileged -d fedora sleep 100
4. 最後に、podman top
を再実行します。 コマンドで機能の違いを確認します。
podman top -l capeff
以下に示すように、–privileged フラグにより、このコンテナーですべての機能を使用できることがわかります。
示されているように、–privileged フラグにより、このコンテナーですべての機能が使用可能であることがわかります。このフラグは、コンテナーのユーザー名前空間をホストの名前空間にマップし、システムで実行されているプロセスのすべての機能を与えるため、重要です。
コンテナの起動時に –privileged フラグを設定しないと、コンテナの機能セットが制限されます。独自のユーザー名前空間を使用するコンテナの場合、すべての機能を明示的に付与する必要があります。
Podman イメージとコンテナーの操作
コンテナーに OCI レジストリーと機能を追加する方法を学習したので、Podman イメージとコンテナーを操作できます。このデモでは、イメージに NGINX を使用してコンテナーを作成します。
1. podman search
を実行します 以下のコマンドを使用して、nginx
で使用可能なすべての Podman イメージを一覧表示します
podman search nginx
以下では、NGINX で利用可能なすべてのタグ付きイメージを docker.io から取得していることがわかります。 、quay.io 、および redhat.com 前の「OCI レジストリの有効化」セクションで追加したリポジトリ:
- INDEX 列には、画像が配置されている場所が表示されます。
- 公式 OK のある列 ステータスは、その行の画像が公式の会社によって作成およびサポートされていることを示します。たとえば、NGINX OK の画像 status は、その会社である NGINX によって作成およびサポートされています。これらのイメージは、セキュリティの脆弱性とパッチの更新が公開されるとすぐに更新されます。
- 自動 OK のある列 status は、イメージが自動ビルドであることを意味します。これらのイメージは、セキュリティの脆弱性とパッチの更新が公開されるとすぐに更新されます。
2. 使用する NGINX イメージを選択したら、podman
を実行します。 以下のコマンドでダウンロードします (pull
) イメージをローカル マシンに転送します。
このデモでは nginx:alpine を使用します。これは最小のイメージであり、メモリ上でのみ実行できるため、後のビルド手順で時間を節約できます。
podman pull nginx:alpine
この時点で、コンテナを作成するために使用したり、他のコンテナのベース イメージとして使用したりできる新しいイメージができました。
3. podman images
を実行します 新しい画像の情報を表示するコマンド
podman images
4. podman run
を実行します。 イメージからコンテナーを作成する以下のコマンド (nginx:alpine
) そして nginx
を実行します そのイメージ上のサーバー。
このコマンドは以下を実行します:
- コンテナーをインタラクティブに開始します (
-it
)、端末を接続できるようにします。
- 削除 (
--rm
) 終了/停止後のコンテナ
- コンテナーをバックグラウンドで実行します (
--d
) およびパブリッシュ (-p
) ポート80
ポート8080
へのすべてのインターフェース
- コンテナの名前を指定します (
--name web
).
podman run -it --rm -d -p 8080:80 --name web nginx:alpine
以下に示すように、コンテナーの監視/開始/停止/削除に使用できるランダムなコンテナー ID を取得します。ログを確認したり、特定のコンテナを停止したりするときに便利なので、コンテナ ID を書き留めておいてください。
5. 以下の podman ps
を実行します コマンド (引数なし) を使用して、コンテナーが実行されているかどうかを確認します。
podman ps
Web コンテナが稼働していて、ホスト マシンのポート 8080/TCP を使用してそのリソースを公開していることがわかります。
6. 再確認のため、ウェブ ブラウザを開き、localhost:8080 に移動します。 または your-server-ip:8080 、ここで your-server-ip サーバーのIPアドレスです。
コンテナーが機能する場合、以下に示すように、デフォルトの NGINX ウェルカム画面が表示されます。
コンテナーのセットアップ方法がわからない場合、またはエラーがある場合は、以下の podman logs コマンドを実行して、コンテナーのログ ファイルを取得します。 mycontainer をターゲット コンテナー ID に置き換えます。
podman logs mycontainer
7. podman stop
のいずれかを実行します 以下のコマンドでコンテナを停止します。 mycontainer
を置き換えます ターゲット コンテナ ID に置き換えるか、web
を置き換えます 実際のコンテナ名で。
ステップ 4 で –rm フラグを使用したため、Podman はコンテナーを停止するとすぐにコンテナーを削除します。このセットアップは、ワークスペースを整理整頓するのに役立ちます。
# Stops the container by Container ID
podman stop mycontainer
# Stops the container by Container Name
podman stop web
8. 最後に、podman ps
を実行します。 コマンドを実行して、停止中のコンテナーを含むすべてのコンテナーを一覧表示します。
podman ps -a
以前にコンテナを停止したときにコンテナが削除されたため、以下に示すように、リストには何も表示されません。
結論
この記事を通して、Podman をインストールする方法と、デプロイ用のイメージとコンテナーを操作する方法を学習しました。この時点で、docker.io の OCI 対応イメージを使用できるようになりました。 、quay.io 、および redhat.com 独自のコンテナを作成するためのリポジトリ
この新たに発見された知識を利用して、Podman play kube で Kubernetes ポッドを構築したり、Ansible を使用して Podman コンテナーを自動化したりしませんか?