1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

最近Podmanというのを知って雑に調べてみた

Last updated at Posted at 2025-04-12

最近、LinuxがDockerからPodmanに向かうわけの記事でPodmanというツールを知りました。
Dockerは日頃使ってますが、「Podmanって何?Dockerと何が違うの?」と思い、雑に調べてみました。

この記事では、

  • DockerとPodmanの違い
  • Rootlessとは?Dockerでユーザーを作ればいいんじゃないの?
  • Dockerのデーモンとプロセスの関係性、その上でのPodmanとの違い
    をまとめます!

できるだけやさしく・正確に書いています!


DockerとPodmanの違いとは?

まず最初に押さえておきたいのは、**DockerとPodmanは何が違うのか?**というポイントです。

項目 Docker Podman
デーモン(常駐プロセス) 必要(dockerd) 不要(デーモンレス)
権限 基本Root権限 Rootlessでも動作可能
Kubernetesとの親和性 直接連携には工夫が必要 Kubernetes標準(CRI-O互換)
systemd連携 手動設定が必要 自然に連携可能
セキュリティ デーモンがRootなのでリスクあり 一般ユーザーだけで安全に運用可能

Dockerは「簡単にコンテナが使えるツール」として広まりましたが、
常駐デーモン(dockerd)が必要であることが課題とされてきました。
一方、Podmanはデーモンレス・Rootless対応を実現しており、
よりセキュアかつ柔軟なコンテナ管理を目指しています。


Rootlessとは?Dockerでユーザー作ればいいのでは?

Dockerでも、コンテナ内のユーザーを一般ユーザーに設定することはできます。
例えば、Dockerfileでユーザーを追加して切り替えることができます。

FROM ubuntu:22.04

# sudoパッケージをインストール
RUN apt-get update && apt-get install -y sudo \
    && rm -rf /var/lib/apt/lists/*

# 新しいユーザーとグループを作成し、sudo権限を付与
RUN groupadd appgroup && \
    useradd -m -g appgroup -s /bin/bash appuser && \
    echo 'appuser ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers

# 実行ユーザーを切り替え
USER appuser

# ここから先は"appuser"権限で動作
CMD ["bash"]

ただ、根本的な問題は、dockerd(Dockerのデーモン)がRoot権限で動いていることです。

つまり、コンテナ内のプロセスを制限しても、もし脆弱性があった場合、
ホストごとRoot権限で乗っ取られるリスクは残ります。

一方、PodmanはデフォルトでRootless動作が可能。
コンテナもホストも、最初から一般ユーザー権限なので、
**「壊れても被害を最小限にできる」**設計になっています。


Dockerのデーモンとプロセスの関係性、そこから見るPodmanとの違い

ここで一度、DockerとPodmanのプロセスの仕組みを整理しておきます。

Dockerの場合

  • dockerd(デーモン)が常にバックグラウンドで常駐している。
  • コンテナを作成すると、dockerdがプロセス管理を担当する。
  • docker run コマンドはCLIクライアントであり、裏でdockerdに「コンテナ作って!」と依頼しているだけ。
  • dockerdが落ちると、コンテナ管理も影響を受ける

図でイメージすると👇

[あなた]
  └── docker CLI
        └── dockerd(デーモン、常駐)
              └── コンテナプロセス

Podmanの場合

  • デーモンレスなので、podman runを実行するたびに、その場で直接プロセスが作られる。
  • バックグラウンドで親玉のプロセス(デーモン)がいない。
  • コンテナはLinuxの通常のプロセスとして独立して動く。
  • podmanコマンド自身はすぐ終了し、コンテナプロセスだけが残る

図でイメージすると👇

[あなた]
  └── podman run
        └── コンテナプロセス

まとめると

Docker Podman
常駐デーモン 必要 不要
コンテナ管理 dockerdが担当 コンテナ自身が独立して存在
障害リスク デーモンに依存するため高い プロセス単位で独立しているため低い

この設計思想の違いが、セキュリティや運用柔軟性に大きな差を生んでいます。

(ちなみに、だからこそKubernetesも、いまはPodmanやcontainerdのようなデーモンレス・軽量ランタイムを歓迎する流れになっています!)


最後に

個人的にここを理解したら、
「なんとなくDocker Desktop使ってる状態」から、
「仕組みをわかって使ってる状態」に一段レベルアップできた気がしました!

もしこの先さらに

  • Podmanとの違い
  • Rootlessコンテナとは?
  • Kubernetesとコンテナランタイムの関係

みたいなところにも興味が出たら、ぜひ一緒に深掘りしていきましょう!🚀


(参考)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?