そんな悩みを抱えるサーバー管理者は多い。
RedHat Enterprise Linux 8以降、Dockerはデフォルトリポジトリから削除され、代わりにPodmanが標準のコンテナランタイムとして採用された。
RHEL9・Rocky Linux 9・AlmaLinux 9を使う現場では、Podmanの習得はもはや必須スキルになっている。
この記事では、podmanコマンドの基本的な使い方から、Dockerとの違い、移行手順、rootlessコンテナの設定まで実践的に解説する。
動作確認環境:RHEL 9.4 / Rocky Linux 9.4 / Ubuntu 24.04 LTS
この記事のポイント
・podmanコマンドはDockerと同じ構文で使えるため移行コストが低い
・rootlessモードでデーモンレス動作するためセキュリティリスクが小さい
・docker→podmanのエイリアス設定でスクリプト移行を最小化できる
・podman-composeでdocker-compose.ymlをそのまま流用できる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
podmanとは|Dockerとの根本的な違い
podmanは、Red Hatが開発したデーモンレスのコンテナ管理ツールだ。Dockerと大きく異なる点は2つある。
・デーモンレス:Dockerは常駐プロセス(dockerd)が必要だが、podmanはデーモン不要
・rootless対応:一般ユーザー権限でコンテナを実行できる
Dockerは
dockerd というデーモンプロセスが常時起動し、すべてのコンテナ操作はこのデーモン経由で行われる。デーモンがrootで動くため、コンテナ経由のホストへの権限昇格リスクが存在する。
podmanはこの設計を根本から変え、コンテナプロセスを直接forkする方式を採用した。
rootユーザーでも一般ユーザーでも同じコマンドで操作できる。
| 項目 | Docker | Podman |
|---|---|---|
| デーモン | 必要(dockerd) | 不要 |
| rootless動作 | 制限あり | 完全対応 |
| コマンド互換性 | — | ほぼ同一 |
| docker-composeの代替 | docker-compose | podman-compose |
| RHEL9でのサポート | 非推奨 | 標準搭載 |
podmanのインストール方法|RHEL9・Rocky Linux・Ubuntuに対応
1. RHEL 9 / Rocky Linux 9 / AlmaLinux 9 へのインストール
RHEL9系では、podmanはデフォルトリポジトリに含まれている。# podmanをインストール # dnf install -y podman # バージョン確認 # podman --version podman version 4.9.4-rhel
2. Ubuntu 24.04 LTS へのインストール
# パッケージリストを更新してpodmanをインストール $ sudo apt-get update $ sudo apt-get install -y podman # バージョン確認 $ podman --version podman version 4.9.3
3. インストール後の動作確認
# hello-worldコンテナで動作確認 $ podman run hello-world Resolved "hello-world" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf) Trying to pull docker.io/library/hello-world:latest... Getting image source signatures Hello from Docker! This message shows that your installation appears to be working correctly.
podmanの基本コマンド|Dockerと対応する操作一覧
1. イメージの取得と確認
# イメージを取得する(pull) # podman pull docker.io/library/nginx:latest # ローカルのイメージ一覧を表示する # podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/nginx latest a72860cb95fd 2 weeks ago 192 MB docker.io/library/hello-world latest d2c94e258dcb 13 months ago 25.4 kB
2. コンテナの起動と確認
# コンテナをバックグラウンドで起動する(-d: デタッチモード, -p: ポートマッピング) # podman run -d -p 8080:80 --name my-nginx nginx:latest 3f8a9d2c1b4e7f0a8c3d2e1f9b4a7c0d8e3f1b4a7c # 起動中のコンテナを確認する # podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3f8a9d2c1b4e docker.io/library/nginx:latest nginx -g daemon o... 5 seconds ago Up 5 seconds 0.0.0.0:8080->80/tcp my-nginx # すべてのコンテナ(停止中を含む)を確認する # podman ps -a
3. コンテナの操作
# コンテナを停止する # podman stop my-nginx # コンテナを再起動する # podman restart my-nginx # コンテナを削除する(停止後に実行) # podman rm my-nginx # 起動中のコンテナを強制削除する # podman rm -f my-nginx # イメージを削除する # podman rmi docker.io/library/nginx:latest
4. コンテナ内でコマンドを実行する
# 起動中のコンテナにbashで入る # podman exec -it my-nginx bash # 起動中のコンテナで単発コマンドを実行する # podman exec my-nginx cat /etc/nginx/nginx.conf # コンテナのログを確認する # podman logs my-nginx # リアルタイムでログを追跡する # podman logs -f my-nginx
DockerからPodmanへの移行方法|エイリアスで互換性を保つ
1. docker→podmanエイリアスの設定
podmanの最大の強みは、Dockerとコマンド構文がほぼ同じ点だ。エイリアスを設定すれば、既存のスクリプトを修正せずにpodmanで動かせる。
# ~/.bashrcにエイリアスを追加する $ echo "alias docker=podman" >> ~/.bashrc $ source ~/.bashrc # または、dockerコマンドのシンボリックリンクを作成する(root権限が必要) # ln -s /usr/bin/podman /usr/local/bin/docker
podman-docker パッケージが提供されており、インストールすると docker コマンドを呼ぶと自動的にpodmanが実行される。# podman-dockerパッケージをインストールする # dnf install -y podman-docker # インストール後、dockerコマンドを実行するとpodmanが動く # docker run hello-world Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg. Hello from Docker!
2. 既存スクリプトの移行確認
Dockerスクリプトをpodmanで動かす場合、以下の点を確認する。・Dockerソケット参照:
/var/run/docker.sock を参照するスクリプトは修正が必要・docker-compose:podman-composeに置き換えるか、後述のpodman generate systemdを使う
・Dockerfile:そのままpodman buildで使える
# Dockerfileからイメージをビルドする # podman build -t my-app:latest . # ビルドしたイメージを確認する # podman images my-app REPOSITORY TAG IMAGE ID CREATED SIZE localhost/my-app latest 8f3c2a1d9e4b 2 minutes ago 345 MB
podman-composeの使い方|docker-compose.ymlを流用する
1. podman-composeのインストール
# RHEL9 / Rocky Linux 9 # dnf install -y podman-compose # Ubuntu 24.04 $ sudo apt-get install -y podman-compose # またはpipからインストール $ pip3 install podman-compose
2. docker-compose.ymlをそのまま使う
既存のdocker-compose.yml はほぼそのまま使えるが、一部の構文は非対応だ。# 例:WordPressのdocker-compose.yml(docker-composeから流用) # version: "3.8" # services: # wordpress: # image: wordpress:latest # ports: # - "8080:80" # environment: # WORDPRESS_DB_HOST: db # WORDPRESS_DB_USER: wpuser # WORDPRESS_DB_PASSWORD: wppassword # WORDPRESS_DB_NAME: wordpress # db: # image: mysql:8.0 # environment: # MYSQL_DATABASE: wordpress # MYSQL_USER: wpuser # MYSQL_PASSWORD: wppassword # MYSQL_RANDOM_ROOT_PASSWORD: "1" # 上記ファイルを使ってコンテナを起動する # podman-compose up -d # 停止する # podman-compose down
rootlessコンテナの設定と実践|一般ユーザーで安全に動かす
1. rootlessモードの確認
podmanはrootlessモードが標準だ。一般ユーザーでコンテナを起動すると、自動的にrootlessモードで動作する。
# 一般ユーザーでコンテナを起動する(sudoなし) $ podman run -d -p 8080:80 --name my-nginx nginx:latest # コンテナ情報を確認する(rootlessで動作している) $ podman info | grep -A3 rootless rootless: true cgroupVersion: v2 conmonVersion: 2.1.10 # rootlessコンテナのデータは~/.local/share/containers/に保存される $ ls ~/.local/share/containers/storage/ defaultNetworkBackend libpod networks overlay overlay-containers overlay-images
2. rootlessコンテナのポート制限への対処
rootlessモードでは、1024番以下のポートにはバインドできない。Webサーバーを80番で公開したい場合は、ポートマッピングで対処する。
# rootlessでは1023以下のポートは直接使えないため、高いポートにマッピングする $ podman run -d -p 8080:80 --name my-nginx nginx:latest # アクセス確認 $ curl http://localhost:8080
Welcome to nginx! # systemdのポートフォワードを使って80番→8080番に転送する(本番環境向け) # firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 --permanent # firewall-cmd --reload
3. systemdサービスとして自動起動する
podmanコンテナをOS起動時に自動起動させるには、systemdユニットを生成する。# コンテナからsystemdユニットファイルを生成する $ podman generate systemd --new --name my-nginx > ~/.config/systemd/user/container-my-nginx.service # ユーザーレベルのsystemdでサービスを有効化・起動する $ systemctl --user daemon-reload $ systemctl --user enable container-my-nginx $ systemctl --user start container-my-nginx # OS起動時にユーザーセッションなしでサービスを動かすには loginctlを使う $ loginctl enable-linger $USER # サービスの状態確認 $ systemctl --user status container-my-nginx * container-my-nginx.service - Podman container-my-nginx.service Loaded: loaded (/home/webadmin/.config/systemd/user/container-my-nginx.service) Active: active (running) since Tue 2026-05-27 10:00:00 JST
podmanのネットワーク設定|コンテナ間の通信を構成する
1. ネットワークの一覧と作成
# デフォルトネットワークを確認する # podman network ls NETWORK ID NAME DRIVER 2f259bab93aa podman bridge # カスタムネットワークを作成する # podman network create my-network # コンテナをカスタムネットワークで起動する # podman run -d --network my-network --name web nginx:latest # podman run -d --network my-network --name db mysql:8.0 # コンテナ間はコンテナ名でDNS解決できる(同一ネットワーク内) # podman exec web ping db PING db (10.89.0.3): 56 data bytes 64 bytes from 10.89.0.3: icmp_seq=0 ttl=64 time=0.072 ms
podmanのトラブルシュート|よくあるエラーと対処法
1. 「short-name resolution enforced but image xyz is not a short name」エラー
podmanではイメージ名の完全指定が推奨される。# NGパターン:短縮名での指定 $ podman pull nginx ? Please select an image: ▸ docker.io/library/nginx:latest quay.io/bitnami/nginx:latest # OKパターン:完全名での指定 $ podman pull docker.io/library/nginx:latest # または/etc/containers/registries.confに検索先を明示する # unqualified-search-registries = ["docker.io"]
2. 「ERRO[0000] cannot find UID/GID for user xxx: no subuid/subgid」エラー
rootlessモードに必要な/etc/subuid と /etc/subgid が設定されていない場合に発生する。# /etc/subuidと/etc/subgidを確認する $ cat /etc/subuid webadmin:100000:65536 # ユーザーが存在しない場合は追記する # echo "webadmin:100000:65536" >> /etc/subuid # echo "webadmin:100000:65536" >> /etc/subgid # 設定を反映する $ podman system migrate
3. コンテナのディスク使用量が増えてきた場合
# podmanのディスク使用量を確認する $ podman system df TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 5 2 1.234GB 890MB (72%) Containers 3 1 45.6MB 23.4MB (51%) Local Volumes 2 1 1.2GB 0B (0%) # 停止中のコンテナとイメージをまとめて削除する(pruneオプション) $ podman system prune WARNING! This will remove: - all stopped containers - all networks not used by at least one container - all dangling images # タグなしのイメージのみを削除する $ podman image prune
本記事のまとめ
podmanはDockerとほぼ同じ操作感で使えながら、セキュリティ面で大きく優れたコンテナツールだ。RHEL9・Rocky Linux 9・AlmaLinux 9を使うサーバー環境では、Podmanへの移行を早めに進めておきたい。
| やりたいこと | コマンド |
|---|---|
| イメージを取得する | podman pull docker.io/library/nginx:latest |
| コンテナをバックグラウンドで起動する | podman run -d -p 8080:80 --name 名前 イメージ名 |
| 起動中のコンテナを確認する | podman ps |
| コンテナの中に入る | podman exec -it コンテナ名 bash |
| コンテナを停止する | podman stop コンテナ名 |
| コンテナを削除する | podman rm コンテナ名 |
| イメージ一覧を確認する | podman images |
| イメージを削除する | podman rmi イメージ名 |
| コンテナのログを確認する | podman logs コンテナ名 |
| docker-composeの代替を使う | podman-compose up -d |
| systemdサービスを生成する | podman generate systemd --new --name コンテナ名 |
| 不要リソースをまとめて削除する | podman system prune |
LinuxサーバーのLinux ポート確認の全コマンドと組み合わせて、コンテナで公開しているポートが正しく開いているかを確認する習慣を身につけておこう。
また、podmanで構築したサービスのファイアウォール設定にはLinux DNS 設定の基本と合わせてApache タイムアウト設定の詳細も参照してほしい。
コンテナ技術を使いこなすには、Linuxの基礎力が不可欠だ。
「コマンドは知っているが、なぜそう動くのかわからない」という段階から抜け出したい方は、ぜひ以下のマニュアルを活用してほしい。
Linux無料マニュアルを受け取る >>
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 前のページへ:bashのヒアドキュメント(here document)の使い方|設定ファイル生成・コマンド入力・インデントの実践例
- この記事の属するカテゴリ:Linuxtipsへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます