2026年版 Docker vs Podman:誰も教えてくれない完全比較&移行ガイド
コンテナ界隈でちょっと面白いことが起きてます。コンテナ化という概念を生み出したDocker、そのDockerが静かにシェアを落としている。しかも奪っているのは派手なスタートアップじゃなくて、大半のエンジニアがまだ触ったことすらないOSS——Podmanです。
数字を見れば一目瞭然。PodmanのGitHubスターは2026年初頭に30,000突破。Red Hat・SUSE・Canonicalがディストロにデフォルトで同梱。Kubernetes 1.24でDockerがランタイムから外れてから、「うちのコンテナスタック、このままでいいんだっけ?」と自問するチームが一気に増えました。追い討ちをかけるように、Docker Desktopのライセンス変更で「みんなタダで使ってたツール」が「従業員250名超 or 売上24/ユーザー」に。
ただ、巷の比較記事の多くは論点がずれてます。「PodmanのほうがDockerより優れているか」は問題じゃない。 自分のワークフロー・チーム規模・セキュリティ要件・デプロイ先を考えたとき、どちらが実質的にフィットするか——そこが本題です。
この記事では、アーキテクチャの違いを掘り下げ、実際の移行シナリオを検証し、意味のあるベンチマークだけ取り上げ、具体的な判断基準を示します。ぼかした結論で逃げたりしません。早速いきます。
アーキテクチャ:そもそもの設計思想が違う
まず押さえておくべきは、DockerとPodmanの最大のアーキテクチャ差です。後述するすべての違いは、ここに起因します。
Dockerはデーモン常駐型
Dockerはdockerdというバックグラウンドデーモンが常に動いているクライアント-サーバー構成です。
┌─────────────┐ ┌──────────────┐ ┌───────────────┐
│ docker CLI │────▶│ dockerd │────▶│ containerd │
│(クライアント)│ │ (デーモン) │ │(ランタイム) │
└─────────────┘ └──────────────┘ └───────────────┘
│
rootで動作
常時リッスン
全コンテナを一元管理
docker run nginxを叩くと、CLIがデーモンにリクエストを投げ、デーモンがイメージのpull・コンテナ作成・ライフサイクル管理をすべて担います。デフォルトではroot権限で動いていて、システム上の全コンテナを管理する一枚岩の存在です。
このモデルにはメリットがあります。
- 一元管理: 全コンテナの状態を1プロセスで把握できる
- バックグラウンド動作: ターミナルを閉じてもコンテナは生き続ける
- エコシステムとの親和性: Docker Compose・Swarm・数千のサードパーティツールがデーモンソケットの存在を前提にしている
一方で、代償もあります。
- 攻撃面が広い: デーモンがroot。侵害されればホストのroot権限ごと持っていかれる
- 単一障害点:
dockerdが落ちると全コンテナが巻き添え - アイドル時のリソース消費: 何も動かしていなくてもメモリ・CPUを食い続ける
Podmanはデーモンレス
Podmanのアプローチはまったく違います。デーモンが存在しません。
┌─────────────┐ ┌───────────────┐
│ podman CLI │────▶│ conmon │
│ (直接実行) │ │(コンテナ単位 │
└─────────────┘ │ のモニター) │
└───────────────┘
│
一般ユーザー権限
fork-execモデル
コンテナごとに独立
podman run nginxを叩くと、Podmanはconmon(軽量モニター)経由でコンテナプロセスを直接forkします。常駐デーモンなし。各コンテナはユーザーアカウント配下の独立プロセスとして走ります。
何が嬉しいかというと——
- rootが要らない: デフォルトでユーザーのUID配下で実行
- 障害が波及しない: あるコンテナが死んでも他は無関係
- 使ってないときは何も動かない: アイドル時のリソース消費ゼロ
- systemdとの親和性: コンテナをそのままsystemdサービスとして管理できる
もちろんトレードオフもあります。
- セッション単位の管理: 中央の状態管理がない(PodmanのDBで永続化はされる)
- バックグラウンド実行には一手間: ログアウト後もコンテナを維持するには
podman generate systemdか--restartフラグが必要 - Docker前提ツールとの互換:
/var/run/docker.sockを期待するツールはソケットパスの変更が必要
セキュリティ:ここが一番大事な話
「ルートレスコンテナ」ってバズワードっぽいですが、具体的に何を防げるか知ると印象が変わります。
Dockerのroot問題
Dockerのデーモンはデフォルトでrootです。-v /host/path:/container/pathでボリュームをマウントすると、コンテナのプロセスがホスト上のファイルをroot権限で読み書きできてしまう。user namespaces・seccomp・AppArmorといった緩和策はありますが、全部オプトインで、有効にしている現場は少数派です。
具体的にどういう危険があるかというと——
# rootデーモン環境でのコンテナエスケープ docker run -v /:/host --privileged alpine chroot /host # → ホストファイルシステム全体にroot権限でアクセス可能
Docker 20.10からルートレスモードが使えるようになりましたが、明示的に設定する必要があります。
# ルートレスモードのセットアップ dockerd-rootless-setuptool.sh install # 動作確認 docker info | grep "Root Dir" # ~/.local/share/docker 配下のパスが出ればOK
実情として、ほとんどのDocker環境はデーモンをrootのまま動かしています。デフォルトがそうだし、チュートリアルでもルートレスモードはほぼ触れられないので。
Podmanはデフォルトでルートレス
Podmanは何もしなくてもルートレスです。設定不要。
# 何の設定もなしにそのまま動く podman run -d nginx # ユーザー権限で動いていることを確認 podman top -l user # → rootではなく自分のUIDが表示される
仕組みとしてはLinuxのuser namespaceを使って、コンテナ内のUIDをホスト側の非特権UIDにマッピングしています。
# コンテナ内ではnginxはroot(UID 0)で動いていると認識しているが # ホスト側ではUID 1000(一般ユーザー)として動いている podman unshare cat /proc/self/uid_map # 出力例: # 0 1000 1 # 1 100000 65536
仮にコンテナエスケープが成功しても、攻撃者が得るのは一般ユーザーの権限だけ。rootは奪えません。
セキュリティの比較まとめ
| 観点 | Docker(デフォルト) | Docker(ルートレス) | Podman |
|---|---|---|---|
| デーモンの実行権限 | root | 一般ユーザー | デーモンなし |
| ホスト上のコンテナUID | root | マッピング済み | マッピング済み |
| 特権ソケット | /var/run/docker.sock(root所有) | $XDG_RUNTIME_DIR/docker.sock | なし |
| デフォルトのCapability | 広範 | 限定的 | 最小限 |
| SELinux / AppArmor | 任意 | 任意 | デフォルトで有効 |
| Seccomp | デフォルトプロファイル | デフォルトプロファイル | より厳格なデフォルト |
| デーモンが侵害された場合 | root権限を奪取される | ユーザー権限の範囲 | そもそも該当なし |
SOC 2・PCI-DSS・HIPAAといったコンプライアンス要件があるチームにとって、Podmanのセキュリティモデルは監査対応の負担が段違いに軽いです。
CLI互換性:alias docker=podmanはどこまで通用するか
Podmanの設計で巧いのは、Docker CLIとほぼ100%互換のインターフェースにしたことです。
# シェル設定に追加するだけ alias docker=podman # あとは普通にDockerのつもりで使える docker pull nginx docker run -d -p 8080:80 nginx docker ps docker build -t myapp . docker push myregistry/myapp
そのまま動くコマンド
docker run/build/pull/pushdocker ps/logs/execdocker images/rmidocker network create/ls/rmdocker volume create/ls/rm
互換性が崩れるポイント
Docker Compose: Podmanにはpodman-composeがあり、互換ソケット経由でDocker Compose v2も動きます。
# 選択肢1:podman-compose(Python製、シンプル) pip install podman-compose podman-compose up -d # 選択肢2:Podmanの互換ソケットを有効にしてDocker Compose v2を使う systemctl --user enable --now podman.socket export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/podman/podman.sock docker compose up -d
Docker Swarm: Podmanには対応するものがありません。Swarmを使っているチーム(最近はかなり少ないですが)にとっては移行のブロッカーになります。
Docker-in-Docker(DinD): CI/CDでよく見るパターンですが、Podmanでは扱いが異なります。
# Docker:privilegedモードが必要 docker run --privileged -v /var/run/docker.sock:/var/run/docker.sock docker # Podman:ルートレスで動く、privileged不要 podman run --security-opt label=disable \ -v $XDG_RUNTIME_DIR/podman/podman.sock:/var/run/docker.sock \ docker
Docker Desktop固有の機能: GUI・内蔵Kubernetes・Extensions Marketplace・Dev Environmentsについては、Podman Desktopが部分的にカバーしていますが、機能的に同等ではありません。
Kubernetes連携:Podmanの最大の強み
ここはDockerが構造的に追いつきにくい、Podmanの本質的なアドバンテージです。
ネイティブのPodサポート
PodmanはKubernetesのPodと同じ概念——ネットワークネームスペースを共有するコンテナグループ——をファーストクラスで扱えます。
# Podを作成 podman pod create --name webapp -p 8080:80 # コンテナを追加 podman run -d --pod webapp --name frontend nginx podman run -d --pod webapp --name api node:20-slim # 両方のコンテナがlocalhostを共有 # frontendからlocalhost:3000でAPIにアクセスできる
これはKubernetesがコンテナを束ねる仕組みとまったく同じです。Dockerにはこの概念がなく、コンテナごとに独立したネットワークネームスペースが割り当てられます。
Kubernetes YAMLの生成
動いているPodをそのままKubernetes互換のYAMLに書き出せます。
# 実行中のPodからYAMLを生成 podman generate kube webapp > webapp.yaml cat webapp.yaml
# Podmanが出力したYAML apiVersion: v1 kind: Pod metadata: name: webapp spec: containers: - name: frontend image: docker.io/library/nginx:latest ports: - containerPort: 80 hostPort: 8080 - name: api image: docker.io/library/node:20-slim
逆方向もいけます。
# Kubernetes YAMLをローカルで実行 podman play kube webapp.yaml # 停止 podman play kube webapp.yaml --down
このpodman play kubeフローが活きる場面は多いです。
- 本番のKubernetes構成をそのままローカルで再現
- フルクラスターを立てずにマニフェストの動作確認
- Docker ComposeからKubernetesへの段階的な移行
DockerとKubernetesの距離
一方、DockerのKubernetes対応は間接的です。
# Docker Desktopにはシングルノードの内蔵K8sクラスターがあるが # 軽量なPodの仕組みではなくフルK8sを動かしている # Docker ComposeをK8sマニフェストに変換するにはkomposeなどの外部ツールが必要 kompose convert -f docker-compose.yaml # → 出力されたYAMLは大体そのままでは使えず、手修正が要る
Docker ComposeとKubernetesは抽象化のレベルが根本的に違います。Composeが定義するのは「サービス」、Kubernetesが定義するのは「ワークロード」。変換すれば必ず情報が落ちる。Podmanはそのギャップをネイティブに埋められるわけです。
Docker Compose vs Podman Compose:現場での比較
実際の開発ではコンテナを1つだけ動かすケースは少なくて、Composeで複数コンテナをまとめて管理しているチームがほとんどでしょう。ここが移行の正念場です。
Docker Compose(v2)
Docker Compose v2は成熟していて、プロダクションでの実績も十分です。
# docker-compose.yaml services: web: build: ./frontend ports: - "3000:3000" depends_on: - api - db environment: - API_URL=http://api:4000 api: build: ./backend ports: - "4000:4000" depends_on: db: condition: service_healthy environment: - DATABASE_URL=postgresql://postgres:secret@db:5432/myapp db: image: postgres:16 volumes: - pgdata:/var/lib/postgresql/data environment: - POSTGRES_PASSWORD=secret healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 5s timeout: 5s retries: 5 volumes: pgdata:
docker compose up -d docker compose logs -f docker compose down
Podman側の選択肢
選択肢1:podman-compose(Python製、コミュニティ開発)
pip install podman-compose podman-compose up -d
シンプルで軽いのがメリット。ただしDocker Compose v2の全機能はカバーしきれていません(healthcheck.condition、一部のネットワークモード、profilesなど)。
選択肢2:Docker Compose v2 + Podmanソケット(複雑な構成ならこちら)
# PodmanのDocker互換ソケットを起動 systemctl --user start podman.socket # Docker CLIの接続先をPodmanに向ける export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/podman/podman.sock # これで普通にdocker composeが動く docker compose up -d
PodmanのDocker互換APIを経由するので完全な互換性が得られます。既存の複雑なComposeファイルを移行するならこのルートが最も無難です。
選択肢3:Quadlet(Podmanネイティブ、systemd統合)
# ~/.config/containers/systemd/webapp.container [Container] Image=docker.io/library/nginx:latest PublishPort=8080:80 Volume=webdata:/usr/share/nginx/html [Service] Restart=always [Install] WantedBy=default.target
systemctl --user daemon-reload systemctl --user start webapp.service
Quadletはコンテナをsystemdのユニットファイルとして定義する、Podmanネイティブの仕組みです。Composeよりプロダクション向きですが、既存のオーケストレーションを書き直す必要があります。
CI/CDパイプラインへの組み込み
移行のなかでCI/CDが一番厄介です。CIインフラの大半がDockerを前提に設計されているので。
GitHub Actions
Dockerの場合(デフォルト):
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Build image run: docker build -t myapp:${{ github.sha }} . - name: Push to registry run: | echo ${{ secrets.REGISTRY_TOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin docker push ghcr.io/${{ github.repository }}/myapp:${{ github.sha }}
Podmanの場合(ほぼそのまま置き換え可能):
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Build image run: podman build -t myapp:${{ github.sha }} . - name: Push to registry run: | podman login ghcr.io -u ${{ github.actor }} -p ${{ secrets.REGISTRY_TOKEN }} podman push ghcr.io/${{ github.repository }}/myapp:${{ github.sha }}
GitHubのubuntu-latestランナーにはPodmanがプリインストールされているので、本当にコマンド名を置き換えるだけで済みます。
GitLab CI
GitLab CIではDocker-in-Docker(DinD)が定番ですが、privilegedモードが必要になります。
Docker(privileged必須):
build: image: docker:latest services: - docker:dind variables: DOCKER_TLS_CERTDIR: "/certs" script: - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA . - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
Podman(privileged不要):
build: image: quay.io/podman/stable script: - podman build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA . - podman push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
--privilegedが不要ということは、CI環境でのコンテナエスケープ脆弱性を構造的に排除できるということです。これは地味ですが大きい。
Buildahという選択肢
Podmanのエコシステムには、イメージビルドに特化したBuildahというツールがあります。docker buildにはない柔軟性を持っています。
# スクラッチビルド:ベースイメージなし、攻撃面ゼロ container=$(buildah from scratch) buildah copy $container ./static-binary /app buildah config --entrypoint '["/app"]' $container buildah commit $container myapp:minimal # → パッケージもシェルも入っていない、バイナリだけのイメージ
# レイヤー単位での細かい制御 buildah run $container -- pip install -r requirements.txt buildah run $container -- pip cache purge buildah commit $container myapp:optimized
セキュリティが厳しい環境でのビルドに重宝します。デーモンもコンテナランタイムも不要でイメージを作れるので。
パフォーマンス:実測で比較する
マーケティング資料ではなく、実際に差が出るポイントだけ見ていきます。
起動時間
コンテナ起動(nginx, Alpine, SSD):
Docker: ~0.8-1.2秒(デーモン起動済み)
Podman: ~0.5-0.9秒(fork-exec、デーモンなし)
OS起動後の初回起動:
Docker: ~2-4秒(デーモンの起動待ちが発生)
Podman: ~0.5-0.9秒(待つデーモンがない)
コールドスタートではPodmanが有利。デーモンが既に走っている長期運用サーバーでは体感差はほぼありません。
ビルド時間
イメージビルド(Node.jsマルチステージ、キャッシュなし):
Docker BuildKit: ~45-60秒
Podman (Buildah): ~48-65秒
キャッシュヒット時:
Docker BuildKit: ~3-5秒
Podman (Buildah): ~3-5秒
実質的に同等です。複雑なマルチステージビルドではBuildKitのキャッシュ管理がやや優れていますが、差は10%未満。
メモリ消費
アイドル時:
Dockerデーモン: ~50-100MB(常時消費)
Podman: ~0MB(動いていない)
コンテナあたり:
Docker: ~5-10MB(conmon + shim)
Podman: ~3-8MB(conmonのみ)
アイドル時ゼロのPodmanは、開発マシンやCIランナーで地味に効きます。本番サーバーで50コンテナ以上動かしている場合は、コンテナ単位のオーバーヘッドはほぼ同じ。
イメージのpull速度
nginx:latest(圧縮約70MB):
Docker: ~4-6秒
Podman: ~4-6秒
大型MLイメージ(約5GB):
Docker: ~45-90秒
Podman: ~45-90秒
有意差なし。同じOCIレジストリプロトコルを使っているので当然といえば当然です。
Docker Desktop vs Podman Desktop
macOS・WindowsユーザーにとってはGUIの使い勝手も選定基準になります。
Docker Desktop
- 料金: 個人・教育・従業員250名未満かつ売上24/月/ユーザー(Businessプラン)
- Kubernetes: シングルノードクラスター内蔵
- Extensions: 100以上のサードパーティ拡張
- Dev Environments: Codespaces的なリモート開発環境
- VM管理: macOS/Windows上のLinux VMを自動管理
- リソース設定: CPU・メモリ上限をGUIで変更可
- ボリューム: ボリュームの確認・管理UI
Podman Desktop
- 料金: 無料・Apache 2.0ライセンス
- Kubernetes: Kind・Minikubeとの連携(内蔵ではない)
- Extensions: プラグインシステムは発展途上
- VM管理:
podman machineで自動管理 - リソース設定: 基本的なCPU・メモリ設定
- Pod管理: Podの作成・管理がGUIのファーストクラス機能
個人や小規模チームならPodman Desktopで十分戦えます。Docker DesktopのExtensions・Dev Environments・エンタープライズ機能(SSO・イメージアクセス管理・Hardened Desktop)に依存しているチームは、現時点ではまだDocker Desktopに分があります。
移行の進め方:Docker → Podman
切り替えると決めたら、以下の順で進めるのが手堅いです。
フェーズ1:ローカル開発(1〜2週間)
# 1. インストール # macOS: brew install podman podman machine init podman machine start # Linux(Ubuntu/Debian): sudo apt install podman # 2. aliasを設定(Dockerとの共存可、壊れない) echo 'alias docker=podman' >> ~/.zshrc source ~/.zshrc # 3. 既存の作業フローを試す docker pull your-registry/your-app:latest docker run -d -p 3000:3000 your-registry/your-app:latest # 4. Composeの互換性を確認 systemctl --user start podman.socket export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/podman/podman.sock docker compose up -d
フェーズ2:CI/CDパイプライン(3〜4週間)
# 既存のDockerビルドを残したまま、Podmanビルドを並列で追加 # 既存パイプラインを壊さずに検証できる build-podman: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Build with Podman run: | podman build -t myapp:${{ github.sha }} . podman push ghcr.io/${{ github.repository }}/myapp:${{ github.sha }}
フェーズ3:本番環境(5週間〜)
# 実行中コンテナからsystemdユニットを生成 podman generate systemd --new --files --name webapp # インストールして有効化 cp container-webapp.service ~/.config/systemd/user/ systemctl --user enable --now container-webapp.service # Quadletを使うならもっとシンプルに書ける(上の「Quadlet」セクション参照)
移行時にハマりやすいポイント
- ボリュームの権限: ルートレス時のUIDマッピングが異なるため、
podman unshare chownが必要になることがある - ポートバインド: ルートレスでは1024未満のポートにバインドできない。
sysctl net.ipv4.ip_unprivileged_port_start=0で解除可能 - ネットワークモード:
--network=hostの挙動がルートレスでは異なる - ソケットマウント:
/var/run/docker.sockをマウントするツールはPodmanのソケットパスに差し替えが必要
判断基準:2026年の選び方
曖昧な「ケースバイケース」ではなく、具体的に整理します。
Docker を使い続けるべきケース
- 従業員250名未満・売上$10M未満でDocker Desktopが無料で使えている。エコシステムの恩恵は無視できない
- Docker Swarmに強く依存している。Podmanにはそもそも対応する仕組みがない
- CI/CDパイプラインがDocker固有の機能(BuildKitの高度なキャッシュマウント・テスト環境でのDocker Composeフル機能・DinDパターン)に依存していて、差し替えコストが大きい
- Docker Desktop Extensions(脆弱性スキャン・ログエクスプローラー・DBツール等)が日常のワークフローに組み込まれている
- チームのメイン環境がmacOS/Windowsで、Docker Desktopのデスクトップ体験が不可欠
Podmanに移行すべきケース
- セキュリティコンプライアンスが最優先。 ルートレスデフォルト・デーモンなし・最小Capability——構造的にセキュリティが強い
- Docker Desktopのコストが効いている。 28,800。Podman Desktopは無料
- Kubernetesを本番で使っている・使う予定。 ローカル開発と本番の意味論を揃えたいなら、PodmanのPod概念と
podman play kubeは本当に便利 - Linuxサーバー運用で、systemdネイティブのコンテナ管理(Quadlet)を使いたい
- CI/CDでprivilegedを排除したい。 ルートレスビルドができること自体が実質的なセキュリティ改善
- リソース効率を重視。 共有CIランナーや開発マシンでのデーモン常駐コストはバカにならない
ハイブリッド(実際に一番多いパターン)
多くのチームは一気に全面移行せず、こう使い分けています。
- Linuxサーバー → Podman: ルートレス・systemd統合・ライセンスフリー
- 開発マシン → Docker Desktop: GUIの完成度・Extensions・チームへの導入のしやすさ
- CI/CD → Podman: privileged不要・GitHubランナーにプリインストール済み
OCI標準のおかげでイメージの互換性は100%なので、このハイブリッド構成は実用上なんの問題もありません。
今後の見通し
コンテナエコシステムは「標準は収束、実装は分岐」というフェーズに入っています。
OCI標準化はほぼ完了。 イメージ・ランタイム・ディストリビューションの仕様は十分に成熟しました。DockerとPodmanが同じイメージをビルド・実行できる。「Dockerでは動くけどPodmanでは壊れる」という時代は実質的に終わっています。
WebAssemblyコンテナが補完技術として出てきています。Docker(runwasi経由)もPodman(crun-wasm経由)も、既存のLinuxコンテナの横でWasmワークロードを動かせるようになりました。ミリ秒単位の起動・極小メモリ消費・より強力なサンドボックス。Linuxコンテナを置き換えるものではないですが、軽量な計算ワークロードでは徐々にシェアを取っていくでしょう。
ルートレスのデフォルト化が業界の潮流になっています。Docker自身もリリースのたびにルートレスモードの完成度を上げている。Podmanの設計思想——ルートレスをデフォルトに、デーモンをなくす——は、ツールの選択に関係なくアーキテクチャ論として勝ちつつあります。
Dev Containersとコンテナベースの開発環境も着実に成熟中。Docker(Dev Containers仕様)もPodman(Podman Desktop統合)もこのパターンをサポートしています。開発環境がコンテナ前提になる未来が見えてきた以上、コンテナランタイムの選定はさらに重要になります。
まとめ
率直に言えば、何を最優先にするか次第です。ただ、2年前よりは答えが明確になってきました。
セキュリティ・コスト・Kubernetesとの整合性を重視するなら、2026年時点ではPodmanのほうが筋のいい選択です。 デフォルトルートレス・デーモンレス・ネイティブPodサポートは、Dockerが後追いしている構造的なアドバンテージです。
エコシステムの充実度・macOS/Windowsでの開発体験・既存ツールとの慣性を重視するなら、Dockerが引き続き堅実な選択です。コミュニティの規模・Desktop体験の洗練度・情報量の多さは、まだDockerに軍配が上がります。
いずれにせよOCI準拠なのでロックインは発生しません。 Dockerで開発を始めて、CIではPodmanを使い、本番もPodmanに寄せつつ、ローカルではDocker Desktopを残す——こういう混在構成が普通に成立します。イメージもレジストリもDockerfile(Podmanも普通にDockerfileをビルドします)も共通です。
コンテナの世界が割れたのは互換性の問題ではなく、思想の違いです。デーモン常駐 vs デーモンレス。デフォルトroot vs デフォルトルートレス。商用プロダクト vs コミュニティプロジェクト。 2026年の時点で、どちらの思想もプロダクションに耐える品質を実現しています。選択基準は自分たちの制約と優先順位に合わせればよくて、Twitterでの声の大きさで決める話ではありません。
どちらでもいいから1つ決めて、コンテナを立てて、本当に難しいこと——コンテナの中で動くコード——に集中しましょう。
関連ツールを見る
Pockitの無料開発者ツールを試してみましょう