前回はWSL2にRHELをインストールする手順を紹介しました。
今回は、そのRHEL環境にPodmanをセットアップして、コンテナを使える環境を構築します。
※Podmanはrootless実行が特徴ですが、今回はrootで実行する前提でお話します。
■ Podmanとは
Podman(Pod Manager)は、コンテナを管理するためのツールです。
【特徴】
・Dockerと互換性のあるコマンド体系
・rootless(root権限なし)でコンテナを実行可能
・デーモンプロセスが不要(Dockerはdockerデーモンが必要)
・Kubernetesとの親和性が高い(Pod単位での管理)
・Red Hat公式のコンテナエンジン
特にセキュリティ面で優れており、エンタープライズ環境でも広く採用されています。
■ DockerとPodmanの違い
【アーキテクチャの違い】
Docker:
・dockerデーモン(常駐プロセス)が必要
・すべてのコンテナをデーモンが管理
・デーモンがroot権限で動作
Podman:
・デーモンレスアーキテクチャ
・各コンテナが独立したプロセスとして動作
・rootless実行をサポート
【コマンドの互換性】
PodmanはDockerとコマンドレベルで互換性があるため、ほとんどの場合 docker コマンドを podman に置き換えるだけで動作します。
例:
docker run → podman run
docker build → podman build
docker ps → podman ps
■ 前提条件
・WSL2上にRHELがインストール済み(前回の記事を参照)
・Red Hat Developer Subscriptionが登録済み
・dnfコマンドが使用可能
■ Podmanのインストール
【1. パッケージの更新】
dnf update -y
【2. Podmanのインストール】
dnf install -y podman
RHELではPodmanが標準リポジトリに含まれているため、シンプルにインストールできます。
【3. インストールの確認】
podman –version
出力例:
podman version 5.x.x
バージョン情報が表示されれば、インストール成功です。
■ Podmanの基本的な使い方
【イメージの取得(pull)】
# Docker Hubから取得
podman pull docker.io/library/httpd
# Red Hatの公式イメージを取得
podman pull registry.access.redhat.com/ubi10/ubi
【イメージの一覧表示】
podman images
【コンテナの起動】
# バックグラウンドで起動
podman run -d –name my-httpd -p 8080:80 docker.io/library/httpd
コマンドの説明:
・-d: バックグラウンドで実行(デタッチモード)
・–name my-httpd: コンテナに名前を付ける
・-p 8080:80: ホストの8080ポートをコンテナの80ポートにマッピング
Windowsのブラウザから http://localhost:8080 にアクセスして確認できます。
【起動中のコンテナ確認】
podman ps
【コンテナの停止】
podman stop my-httpd
【コンテナの削除】
podman rm my-httpd
【イメージの削除】
podman rmi docker.io/library/httpd
■ ファイルマウント
WSL2のファイルシステムをコンテナにマウントできます。
# WSL2のファイルをマウント
podman run -d –name web -p 8080:80 -v /home/user/html:/usr/local/apache2/htdocs:z httpd
※ :z オプションはSELinuxのラベリングを適用します。WSL2のデフォルトではSELinuxは無効ですが、RHEL環境のベストプラクティスとして :z を付与する習慣をつけておくと良いかなと思います。
■ 便利なPodmanコマンド
【すべてのコンテナを表示(停止中も含む)】
podman ps -a
【コンテナのログを表示】
podman logs my-httpd
# リアルタイムでログを追跡
podman logs -f my-httpd
【コンテナ内でコマンドを実行】
podman exec -it my-httpd bash
【すべての停止コンテナを削除】
podman container prune
【使用していないイメージを削除】
podman image prune
■ トラブルシューティング
【エラー: could not find “slirp4netns” または “pasta”】
→ rootlessネットワークに必要なパッケージをインストール:
Podman 5.0以降(RHEL 10など):
dnf install -y passt
Podman 4.x系以前:
dnf install -y slirp4netns
環境によっては両方必要な場合もあります:
dnf install -y passt slirp4netns
【ポートにアクセスできない】
→ Windowsのファイアウォール設定を確認
→ podman ps でポートマッピングが正しいか確認
■ 実用例
【Nginxコンテナの起動】
# Nginxイメージを取得
podman pull docker.io/library/nginx
# カスタムHTMLファイルを配置
mkdir -p ~/html
echo “<h1>Hello from Podman on WSL2 RHEL!</h1>” > ~/html/index.html
# コンテナ起動
podman run -d –name my-nginx -p 8080:80 -v ~/html:/usr/share/nginx/html:z nginx
# ブラウザで http://localhost:8080 にアクセス
■ まとめ
・PodmanはDockerと互換性のあるコマンド体系を持つコンテナエンジン
・RHELでは標準リポジトリから簡単にインストール可能
・Podman 4.0以降はNetavarkがデフォルトのネットワークスタック
・Podman 5.0以降はpastaがrootlessネットワークのデフォルト
・デーモンレスアーキテクチャで軽量・安全
・WSL2環境でも問題なく動作し、Windowsとのファイル共有も可能
今回はここまで。