🐳

RHEL 10 / Rocky Linux 10でDockerが使えない?Podmanで完全互換コンテナ環境を構築する方法

に公開

はじめに

Rocky Linux 10(RHEL 10ベース)を使ってコンテナ環境を構築しようとして、Dockerがインストールできずに困っていませんか?

実は、RHEL 10からDockerコンテナエンジンが公式に削除されました。しかし心配無用。Red HatはDockerの完全上位互換であるPodmanを標準提供しており、これまでのDockerワークフローをそのまま継続できます。

本記事では、Rocky Linux 10でPodmanを使った完全なコンテナ環境構築方法を解説します。

🚨 なぜDockerがインストールできないのか?

問題:Docker公式リポジトリで404エラー

Rocky Linux 10でDockerをインストールしようとすると、以下のようなエラーが発生します:

$ sudo dnf update -y docker-ce-stable
Docker CE Stable - x86_64                   68  B/s | 402  B     00:05    
Errors during downloading metadata for repository 'docker-ce-stable':
  - Status code: 404 for https://download.docker.com/linux/rhel/10/x86_64/stable/repodata/repomd.xml

原因:RHEL 10の方針変更

Red Hat Enterprise Linux 10の公式ドキュメント「コンテナーの構築、実行、および管理」には、以下の記載があります:

Red Hat では、RHEL 10 から Docker コンテナーエンジンと、docker コマンドが削除されました。

(出典:Red Hat Enterprise Linux 10 コンテナーの構築、実行、および管理 - 1.2. DOCKER を使用せずにコンテナーを実行

同ドキュメントでは、代替手段として以下も明記されています:

podman-docker パッケージをインストールできます。docker コマンドを実行するたびに、実際には podman コマンドが実行されます。

つまり、これは一時的な問題ではなく、Red Hatの戦略的方針変更であり、Podmanが公式に推奨されるソリューションです。

解決策:Podmanへの移行

Red Hatは代替としてPodmanを提供しており、以下の利点があります:

  • 完全なDocker互換性:既存のDockerfileやdocker-composeがそのまま使用可能
  • セキュリティ向上:ルートレス実行で安全性が大幅向上
  • リソース効率:デーモンレスでシステムリソースを節約
  • 企業サポート:RHEL系Linuxで長期サポート保証

これを機にPodmanを使ってみるのもあり。

🛠️ 環境構築手順

前提条件の確認

まず、システムが要件を満たしているか確認します:

OS確認

$ cat /etc/os-release

出力例:

NAME="Rocky Linux"
VERSION="10.0 (Red Quartz)"
ID="rocky"
PLATFORM_ID="platform:el10"

CPUアーキテクチャ確認(x86-64-v3必須)

$ grep -o 'avx2\|bmi1\|bmi2\|f16c\|fma\|abm\|movbe\|xsave' /proc/cpuinfo | sort -u

出力例:

abm
avx2
bmi1
bmi2
f16c
fma
movbe
xsave

メモリ確認

$ free -h

出力例:

               total        used        free      shared  buff/cache   available
Mem:           7.5Gi       764Mi       6.5Gi       9.0Mi       503Mi       6.7Gi

Rocky Linux 10.0でx86-64-v3対応CPU、十分なメモリが確認できました。

ステップ1:利用可能パッケージの確認

Rocky Linux 10で提供されるコンテナ関連パッケージを確認:

リポジトリ確認

$ sudo dnf repolist

出力例:

repo id                      repo の名前
appstream                    Rocky Linux 10 - AppStream
baseos                       Rocky Linux 10 - BaseOS
extras                       Rocky Linux 10 - Extras

Podman関連パッケージ検索

$ dnf search podman

出力例:

========================== 名前 完全一致: podman ==========================
podman.x86_64 : Manage Pods, Containers and Container Images
======================== 名前 & 概要 一致: podman =========================
podman-docker.noarch : Emulate Docker CLI using podman
podman-remote.x86_64 : (Experimental) Remote client for managing podman containers

Buildahの確認

$ dnf search buildah

出力例:

========================= 名前 完全一致: buildah ==========================
buildah.x86_64 : A command line tool used for creating OCI Images

kopeoも確認

$ dnf search skopeo

出力例:

========================== 名前 完全一致: skopeo ==========================
skopeo.x86_64 : Inspect container images and repositories on registries

ステップ2:コンテナツールチェーンのインストール

必要なツール一式をインストールします:

# メインツールの一括インストール
sudo dnf install -y podman buildah skopeo crun

# Docker互換とコンテナ管理ツール
sudo dnf install -y podman-docker containers-common container-selinux

# ルートレスコンテナ用ツール
sudo dnf install -y fuse-overlayfs conmon aardvark-dns

# 開発・監視ツール(EPELから: オプション)
sudo dnf install -y epel-release
sudo dnf install -y htop tree jq

ステップ3:インストール確認

各ツールのバージョンを確認:

podman

$ podman --version
podman version 5.4.0

buildah

$ buildah --version
buildah version 1.39.4 (image-spec 1.1.0, runtime-spec 1.2.0)

skopeo

$ skopeo --version
skopeo version 1.18.1

crun

$ crun --version
crun version 1.21
commit: 10269840aa07fb7e6b7e1acff6198692d8ff5c88
spec: 1.0.0
+SYSTEMD +SELINUX +APPARMOR +CAP +SECCOMP +EBPF +CRIU +YAJL

ステップ4:Docker完全互換設定

Dockerコマンドをそのまま使えるよう設定:

Docker互換エイリアス設定

echo 'alias docker=podman' >> ~/.bashrc
source ~/.bashrc

動作確認

$ docker --version
podman version 5.4.0

Hello Worldテスト

$ docker run --rm hello-world
!... Hello Podman World ...!
         .--"--.           
       / -     - \         
      / (O)   (O) \        
   ~~~| -=(,Y,)=- |         
    .---. /`  \   |~~      
 ~/  o  o \~~~~.----. ~~   
  | =(X)= |~  / (O (O) \   
   ~~~~~~~  ~| =(Y_)=-  |   
  ~~~~    ~~~|   U      |~~ 

Project:   https://github.com/containers/podman
Website:   https://podman.io

🚀 実践的な使用例

Webサーバーの起動

Dockerと全く同じ構文でNginxを起動:

Nginx起動

$ docker run -d -p 8080:80 --name web-server nginx

確認

$ docker ps

例:

CONTAINER ID  IMAGE                           COMMAND               CREATED         STATUS         PORTS                 NAMES
a1b2c3d4e5f6  docker.io/library/nginx:latest  nginx -g daemon o...  10 seconds ago  Up 10 seconds  0.0.0.0:8080->80/tcp  web-server

アクセステスト

$ curl http://localhost:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...

Docker Composeの使用

podman composeは外部のcompose providerを呼び出すラッパーコマンドです。使用には事前にcompose実装のインストールが必要です:

Compose Providerのインストール

方法1:Docker Compose公式版(推奨)

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

方法2:podman-compose(Python実装)

pip3 install --user podman-compose

方法3:DNFパッケージ(利用可能な場合)

dnf search docker-compose
sudo dnf install -y docker-compose  # パッケージが存在する場合

Compose実装インストール後に実行

podman compose up -d          # podman composeラッパー経由
# または
docker-compose up -d          # 直接実行
# または  
podman-compose up -d          # podman-compose直接実行

コンテナ管理操作

# コンテナ一覧
docker ps -a

# ログ確認
docker logs web-server

# コンテナ内でコマンド実行
docker exec -it web-server bash

# リソース使用量
docker stats

# システム情報
podman system df

🔒 Podmanのセキュリティ優位性

ルートレス実行

Podmanの最大の利点の一つは、root権限なしでコンテナを実行できることです:

# 一般ユーザーでセキュアに実行
$ podman run --rm alpine id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)

# しかし、ホストでは一般ユーザーのまま
$ podman unshare id
uid=0(root) gid=0(root) groups=0(root)

$ id  # ホスト側
uid=1000(kato) gid=1000(kato) groups=1000(kato),10(wheel)

権限分離の確認

# ユーザー名前空間の確認
$ podman unshare cat /proc/self/uid_map
         0       1000          1
         1     100000      65536

$ podman unshare cat /proc/self/gid_map
         0       1000          1
         1     100000      65536

これにより、コンテナが侵害されてもホストシステムへの影響を最小限に抑えられます。

📊 DockerとPodmanの比較

項目 Docker Podman
アーキテクチャ デーモンベース デーモンレス
root権限 必要 不要(ルートレス)
リソース使用量 常時メモリ消費 コンテナ実行時のみ
セキュリティ root権限リスク 権限分離によりセキュア
RHEL 10サポート ❌ 削除済み ✅ 公式サポート
既存ワークフロー ネイティブ ✅ 完全互換
systemd統合 外部連携 ✅ ネイティブ統合

🔧 高度な設定

レジストリー設定のカスタマイズ

# ユーザー設定ディレクトリ作成
mkdir -p ~/.config/containers

# カスタムレジストリー設定
cat > ~/.config/containers/registries.conf << 'EOF'
unqualified-search-registries = [
  "registry.access.redhat.com", 
  "registry.redhat.io", 
  "quay.io", 
  "docker.io"
]
short-name-mode = "enforcing"

[[registry]]
location = "registry.redhat.io"
insecure = false

[[registry]]
location = "docker.io"
insecure = false
EOF

Systemdサービス化

# Podman APIサービス有効化
systemctl --user enable --now podman.socket

# コンテナのSystemdサービス化
podman generate systemd --name web-server > ~/.config/systemd/user/web-server.service
systemctl --user enable web-server.service

# 自動起動設定
sudo loginctl enable-linger $USER

💡 移行のポイント

既存Dockerユーザーへの推奨事項

  1. 学習コストゼロ:既存のDockerコマンドとdocker-composeファイルをそのまま使用
  2. セキュリティ向上:ルートレス実行でセキュリティリスクを大幅軽減
  3. パフォーマンス向上:デーモンレスでシステムリソースを効率的に使用
  4. 将来保証:RHEL系Linuxでの長期サポート

注意点

  • ポート制限:ルートレスモードでは1024未満のポートは使用不可(回避方法あり)
  • Docker Hub:レート制限があるため、企業環境では内部レジストリー推奨
  • レガシー機能:一部のDocker Swarm機能は未サポート

🎯 まとめ

Rocky Linux 10(RHEL 10)では、Dockerの代わりにPodmanを使用することで:

完全なDocker互換性を保ちながら
セキュリティを大幅向上させ
システムリソースを効率化できます

特に企業環境では、Red Hatの公式サポートがあるPodmanの採用が戦略的に正しい選択です。

既存のDockerワークフローをそのまま継続でき、学習コストはほぼゼロです。むしろ、セキュリティとパフォーマンスの向上により、より優れたコンテナ環境を構築できます。

📚 参考資料

🙋‍♂️ おわりに

この記事が、Rocky Linux 10でのコンテナ環境構築に悩んでいる方の助けになれば幸いです。

Podmanは単なるDockerの代替ではなく、より安全で効率的な次世代コンテナプラットフォームです。ぜひ積極的に活用してください!

何か質問やフィードバックがあれば、コメントでお知らせください。

Discussion