一般社団法人 全国個人事業主支援協会

COLUMN コラム

  • WSL2のRHEL環境にPodmanをセットアップする

前回は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とのファイル共有も可能

今回はここまで。

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア