第2章:Podmanのインストールと初期設定

対象バージョン

  • Podman: 5.0.x(2024年3月リリース)
  • 動作確認OS: RHEL 9.3、Ubuntu 22.04 LTS、CentOS Stream 9、Fedora 39
  • 前提条件: Linux Kernel 4.18+、cgroup v2対応、systemd 239+(rootless時)

2.1 自動インストールスクリプト

手動でのインストールはエラーが発生しやすく、環境によって手順が異なります。以下の自動化スクリプトを使用することで、確実にインストールと設定を完了できます。

#!/bin/bash
# install-podman.sh - Podman自動インストール・設定スクリプト
# 使用方法: curl -L https://example.com/install-podman.sh | bash

set -e  # エラー時に終了

echo "============================================"
echo "Podman 自動インストールスクリプト v1.0"
echo "============================================"

# OS検出
detect_os() {
    if [ -f /etc/os-release ]; then
        . /etc/os-release
        OS=$ID
        VER=$VERSION_ID
    elif [ -f /etc/redhat-release ]; then
        OS="rhel"
        VER=$(rpm -q --queryformat '%{VERSION}' redhat-release)
    else
        echo "エラー: サポートされていないOSです"
        exit 1
    fi
}

# インストール関数
install_podman() {
    case $OS in
        rhel|centos|fedora)
            echo "Red Hat系ディストリビューションを検出しました"
            sudo dnf install -y podman buildah skopeo
            ;;
        ubuntu|debian)
            echo "Debian系ディストリビューションを検出しました"
            sudo apt update
            sudo apt install -y podman buildah skopeo
            ;;
        *)
            echo "エラー: 未サポートのOS: $OS"
            exit 1
            ;;
    esac
}

# 基本設定
setup_podman() {
    echo "基本設定を適用中..."
    
    # システム設定ディレクトリ作成
    sudo mkdir -p /etc/containers
    
    # cgroup v2 最適化
    if [ ! -f /etc/default/grub.bak ]; then
        sudo cp /etc/default/grub /etc/default/grub.bak
        echo 'systemd.unified_cgroup_hierarchy=1' | sudo tee -a /etc/default/grub
        sudo grub2-mkconfig -o /boot/grub2/grub.cfg 2>/dev/null || true
    fi
    
    # システム移行
    podman system migrate || true
    
    # rootless用設定
    systemctl --user enable --now podman.socket || true
}

# 検証テスト
verify_installation() {
    echo "インストールの検証中..."
    
    # バージョン確認
    podman --version
    
    # hello-worldテスト
    podman run --rm hello-world
    
    if [ $? -eq 0 ]; then
        echo "✅ Podmanが正常にインストールされました!"
    else
        echo "❌ インストールに問題があります"
        exit 1
    fi
}

# メイン処理
detect_os
install_podman
setup_podman
verify_installation

echo ""
echo "インストールが完了しました!"
echo "次のコマンドでPodmanを使い始められます:"
echo "  podman run -it alpine sh"

2.2 各OSへのインストール方法(手動)

RHEL/CentOS/Fedora

# DNFを使用したインストール(Podman 5.0.x)
sudo dnf install -y podman

# 関連ツールのインストール
sudo dnf install -y buildah skopeo podman-compose

# バージョン確認と動作テスト
podman --version
# 期待される出力: podman version 5.0.x

# 基本的な動作確認
podman run --rm hello-world
# コンテナが正常に実行され、メッセージが表示されることを確認

Ubuntu/Debian

# Ubuntu 20.10以降
sudo apt update
sudo apt install -y podman

# Ubuntu 22.04/24.04でのインストール
sudo apt update
sudo apt install -y podman

# Ubuntu 20.04の場合(公式リポジトリを使用)
sudo sh -c "echo 'deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_20.04/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list"
wget -nv https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/xUbuntu_20.04/Release.key -O- | sudo apt-key add -
sudo apt update
sudo apt install -y podman

macOS

# Homebrewを使用
brew install podman

# Podman machineの初期化
podman machine init
podman machine start

# 接続確認
podman info

Windows

# WSL2が必要
# PowerShellを管理者として実行
wsl --install

# WSL2内でLinuxディストリビューションをインストール後、
# 上記のLinux用手順に従ってインストール

2.2 初期設定

設定ファイルの場所

# システム全体の設定
/etc/containers/

# ユーザー別の設定
~/.config/containers/

# 主要な設定ファイル
registries.conf  # レジストリ設定
storage.conf     # ストレージ設定
policy.json      # セキュリティポリシー

レジストリの設定

# /etc/containers/registries.conf
[registries.search]
registries = ['docker.io', 'quay.io', 'registry.fedoraproject.org']

[registries.insecure]
registries = []

[registries.block]
registries = []

# 認証情報の設定
podman login docker.io
podman login quay.io

ストレージの設定

# ~/.config/containers/storage.conf
[storage]
driver = "overlay"
runroot = "/run/user/1000/containers"
graphroot = "/home/user/.local/share/containers/storage"

[storage.options]
size = "10G"
override_kernel_check = "true"

2.3 Rootlessモードの設定

前提条件の確認

# ユーザー名前空間の確認
sysctl kernel.unprivileged_userns_clone

# subuid/subgidの確認
grep $USER /etc/subuid
grep $USER /etc/subgid

# 必要に応じて追加
sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $USER

Rootless環境の初期化

# systemdユーザーセッションの有効化
systemctl --user enable --now podman.socket

# 環境変数の設定
echo 'export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/podman/podman.sock' >> ~/.bashrc

# cgroups v2の確認
podman info | grep -i cgroup

2.4 Docker互換性の設定

Docker CLIの置き換え

# エイリアスの設定
echo 'alias docker=podman' >> ~/.bashrc
source ~/.bashrc

# Docker Composeの互換性
pip3 install podman-compose
alias docker-compose=podman-compose

Docker APIソケットの有効化

# Rootlessモード
systemctl --user enable --now podman.socket

# Rootfulモード
sudo systemctl enable --now podman.socket

# ソケットの確認
curl --unix-socket /run/user/$(id -u)/podman/podman.sock http://localhost/v1.41/info

2.5 基本動作の確認

Hello Worldコンテナの実行

# 基本的な実行
podman run hello-world

# Alpineコンテナでコマンド実行
podman run --rm alpine echo "Hello from Podman"

# インタラクティブモード
podman run -it --rm alpine /bin/sh

イメージとコンテナの管理

# イメージの一覧
podman images

# コンテナの一覧
podman ps -a

# システム情報の確認
podman info

# ディスク使用量の確認
podman system df

2.6 トラブルシューティング

よくある問題と解決方法

1. “permission denied”エラー

# SELinuxの確認
getenforce

# 一時的に無効化(テスト用)
sudo setenforce 0

# コンテキストの修正
sudo restorecon -R ~/.local/share/containers

2. ネットワーク接続の問題

# DNS設定の確認
podman run --rm alpine nslookup google.com

# ネットワークの再作成
podman network rm podman
podman network create podman

3. ストレージ容量不足

# 不要なイメージの削除
podman image prune -a

# 停止中のコンテナの削除
podman container prune

# システム全体のクリーンアップ
podman system prune -a

インストール後の検証チェックリスト

インストール完了後、以下の項目を確認してください:

#!/bin/bash
# インストール検証スクリプト

echo "✓ Podmanバージョン確認"
podman --version

echo "✓ システム情報"
podman info --format json | jq '.version, .kernel, .os'

echo "✓ cgroupバージョン"
podman info | grep -i cgroup

echo "✓ rootless動作確認"
if podman info | grep -q "rootless: true"; then
    echo "  Rootlessモードで動作中"
else
    echo "  Rootモードで動作中"
fi

echo "✓ ネットワーク接続"
podman run --rm alpine ping -c 1 google.com

echo "✓ ストレージ状態"
podman system df

echo "✓ Docker互換ソケット"
if systemctl --user is-active podman.socket >/dev/null 2>&1; then
    echo "  Podmanソケットが有効"
fi

まとめ

本章では、Podman 5.0.xのインストールから初期設定、基本的な動作確認までを解説しました。特に以下のポイントが重要です:

  • 自動化スクリプトの活用: 環境構築の再現性を確保
  • Rootlessモードの設定: セキュリティを強化
  • Docker互換性の確保: 既存資産の活用
  • 検証テストの実施: 正常動作の確認

次章では、Podmanを使った基本的なコンテナ操作について詳しく解説していきます。