Podmanの基本的な使い方ガイド 2025年版


## はじめに
Podmanを使う機会があったので調べたことをまとめました。

コンテナ技術の進化に伴い、Dockerだけでなく様々なコンテナエンジンが登場しています。その中でも「Podman（Pod Manager）」は、Red Hatが主導して開発しているオープンソースのコンテナエンジンで、デーモンレス・アーキテクチャとrootlessモードの標準サポートという特徴を持っています。

本記事では、Podmanの最新バージョンを使った基本的な使い方をまとめました。Dockerからの移行を検討している方や、新しくコンテナ技術を学び始める方に役立つと嬉しいです。

## Podmanとは？

Podmanは、Red Hatが開発したオープンソースのコンテナ管理ツールです。名前の由来は「Pod Manager」で、Kubernetesのような「Pod」の概念をサポートしています。コンテナの開発、管理、実行のためのツールとして、Docker互換のCLIを提供しながらも、以下のような特徴を持っています。

- **デーモンレス・アーキテクチャ**
　デーモンプロセスを必要としないため、セキュリティリスクの低減とシステムの単純化
- **ルートレスモード**
　標準で非特権ユーザーによるコンテナ実行をサポート
- **Kubernetesとの親和性**
　Podの概念をネイティブにサポート
- **systemdとの統合**
　コンテナをシステムサービスとして管理可能

### アーキテクチャ図

```mermaid
flowchart TB
    User([ユーザー])
    PodmanCLI[Podman CLI]
    Containers[コンテナ]
    
    User -->|コマンド実行| PodmanCLI
    PodmanCLI -->|直接制御| Containers
    
    subgraph ホストOS
    PodmanCLI
    Containers
    end
    
    style User fill:#f9f,stroke:#333,stroke-width:2px
    style PodmanCLI fill:#bbf,stroke:#333,stroke-width:2px
    style Containers fill:#bfb,stroke:#333,stroke-width:2px
```

2025年現在、Podmanは多くの企業や開発者に採用され、特にセキュリティが重視される環境や、Kubernetesを活用している環境で重宝されています。

## インストール方法

### Linux (RHEL/Fedora/CentOS系)

```bash
# RHEL, CentOS, Fedora
sudo dnf install podman
```

### Linux (Debian/Ubuntu系)

```bash
# Debian, Ubuntu
sudo apt-get update
sudo apt-get install -y podman
```

### macOS

Homebrewを使用してインストールします。

```bash
brew install podman
```

インストール後、PodmanのVMを初期化して起動します。

```bash
podman machine init
podman machine start
```

### Windows

Windows用のインストーラーが公式サイトから提供されています。または、Chocolateyパッケージマネージャーを使用することもできます。

```powershell
choco install podman
```

インストール後、同様にPodmanのVMを初期化・起動します。

```powershell
podman machine init
podman machine start
```

## Podman Desktopの利用

Podmanを直感的に使用するために、Podman Desktopというグラフィカルインターフェイスも利用できます。これは2023年6月にバージョン1.0がリリースされ、2025年現在では様々な機能が追加されています。

公式サイト(https://podman-desktop.io) からダウンロードしてインストールできます。

## 基本的なコマンド

Podmanコマンドは基本的にDockerコマンドと互換性があります。以下に基本的なコマンドをまとめました。

### イメージの取得と管理

```bash
# イメージの検索
podman search nginx

# イメージのダウンロード
podman pull nginx:latest

# ダウンロード済みイメージの一覧表示
podman images

# イメージの削除
podman rmi nginx:latest
```

### コンテナの作成と管理

```bash
# コンテナの起動 (フォアグラウンド)
podman run -it --name my-nginx nginx:latest

# コンテナの起動 (バックグラウンド)
podman run -d --name my-nginx -p 8080:80 nginx:latest

# 実行中のコンテナ一覧
podman ps

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

# コンテナの停止
podman stop my-nginx

# コンテナの開始
podman start my-nginx

# コンテナの削除
podman rm my-nginx
```

### コンテナ内でのコマンド実行

```bash
# 実行中のコンテナ内でコマンドを実行
podman exec -it my-nginx /bin/bash

# コンテナのログを表示
podman logs my-nginx

# コンテナのプロセス情報
podman top my-nginx
```

## Podの管理

Podmanの特徴の一つはKubernetesスタイルの「Pod」をサポートしていることです。Podは複数のコンテナをグループ化したものです：

```mermaid
graph TD
    subgraph "Pod"
    A[Infra Container]
    B[アプリケーション<br>コンテナ 1]
    C[アプリケーション<br>コンテナ 2]
    D[アプリケーション<br>コンテナ 3]
    end
    
    A --- B
    A --- C
    A --- D
    
    style A fill:#f5f5f5,stroke:#333
    style B fill:#d9edf7,stroke:#333
    style C fill:#d9edf7,stroke:#333
    style D fill:#d9edf7,stroke:#333
```

```bash
# Podの作成
podman pod create --name my-pod

# Podにコンテナを追加
podman run --pod my-pod -d nginx:latest

# もう一つコンテナを追加
podman run --pod my-pod -d redis:latest

# Podの一覧表示
podman pod list

# Podの詳細表示
podman pod inspect my-pod

# Podの停止
podman pod stop my-pod

# Podの開始
podman pod start my-pod

# Podの削除 (すべてのコンテナも削除)
podman pod rm my-pod
```

## ルートレスモード

Podmanの大きな特徴として、ルートレスモードがデフォルトで有効になっています。つまり、通常のユーザーがrootになったり、sudoを使用したりせずにコンテナを実行できます。

```bash
# ユーザー権限でコンテナを実行
podman run -it alpine sh
```

ルートレスモードでは、UIとGIDのマッピングを使用して、ホストとコンテナ間の権限の分離を実現しています。ルートレスモードの場合、コンテナ内のroot（UID 0）はホスト上の通常ユーザーにマッピングされます。

## systemdとの統合

Podmanの特徴の一つは、systemdとの統合が容易なことです。以下のコマンドでsystemdのユニットファイルを生成し、コンテナをシステムサービスとして管理できます。

```bash
# コンテナのsystemdサービスファイルを生成
podman generate systemd --name my-nginx --files

# システムレベルのサービスとして使用する場合
sudo mv container-my-nginx.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now container-my-nginx

# ユーザーレベルのサービスとして使用する場合
mkdir -p ~/.config/systemd/user/
mv container-my-nginx.service ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable --now container-my-nginx
```

## Docker Composeの使用

Podmanは「podman compose」コマンドを通じてDocker Compose形式のファイルもサポートしています。

```bash
# Docker Compose形式のファイルから環境を起動
podman-compose up -d

# 環境の停止
podman-compose down
```

最新のPodmanでは、Podmanのインストール時に自動的にpodman-composeも導入されるようになっています。

## Kubernetes統合

PodmanはKubernetesとの連携も強化されています。

```bash
# コンテナをKubernetes YAMLに変換
podman generate kube my-nginx > my-nginx.yaml

# Kubernetes YAMLからコンテナを起動
podman play kube my-nginx.yaml
```

この機能を使うことで、本番のKubernetes環境で実行されるコンテナをローカルでテストすることが容易になります。

## Podman Desktopの活用

最新のPodman Desktop 1.0以降では、以下の機能が提供されています。

- GUIによるコンテナとイメージの管理
- コンテナログのリアルタイム表示
- ボリュームとネットワークの可視化と管理
- Kubernetes YAMLの編集と適用
- 拡張機能によるエコシステムの拡張

Podman Desktopを使うことで、コマンドラインに慣れていないユーザーでも直感的にコンテナを管理できます。

## パフォーマンスとセキュリティ

Podmanはデーモンレス・アーキテクチャとルートレスモードの採用により、Dockerと比較して以下のようなセキュリティとパフォーマンス上の利点があります。

1. **分離されたプロセス空間**
    各コンテナが独立したプロセスツリーで実行されるため、一つのコンテナに問題が発生しても他に影響しにくい。
2. **権限の最小化**
    ルートレスモードによりホストシステムへの特権アクセスを最小限に抑制
3. **サービス障害点の排除**
    デーモンがないため、デーモンの障害でコンテナ全体が影響を受けるリスクがない。
4. **メモリ効率**
    デーモンプロセスが不要なため、特に小規模環境でのメモリ使用量が少ない。

## 2025年の最新機能

2025年の最新バージョンのPodmanでは、以下のような機能強化が行われています。

1. **コンテナ自動更新機能**
    コンテナイメージの更新を自動的に検知し、必要に応じてコンテナを再起動する機能
2. **拡張されたネットワーク機能**
    より柔軟なネットワーク設定と管理が可能に
3. **Pod クローン機能**
    `podman pod clone`コマンドにより既存のPodのコピーを作成可能
4. **セキュリティ強化**
    SELinuxとの統合改善により、より厳密なセキュリティ管理が可能
5. **Kubernetes対応の拡充**
    より複雑なKubernetes設定との互換性向上

## まとめ

Podmanは、Dockerと互換性を持ちながらも、デーモンレス・アーキテクチャとルートレスモードという特徴により、セキュリティとパフォーマンスの面で優れたコンテナ管理ツールとなっています。特に、企業環境やセキュリティが重視される場面、またはKubernetesとの連携が必要な場合に効果を発揮します。

本記事で紹介した基本的な使い方を参考に、ぜひPodmanを試してみてください。また、Podman Desktopを活用することで、GUIから直感的にコンテナを管理することも可能です。

## 参考資料

- [Podman公式サイト](https://podman.io/)
- [Podman Desktop公式サイト](https://podman-desktop.io/)
- [Podmanドキュメント](https://docs.podman.io/)
- [Red Hat: Podmanとは？](https://www.redhat.com/ja/topics/containers/what-is-podman)