FedoraにDocker Engineをインストールする:Podmanとの競合やネットワークエラーの解決方法

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

クイックスタート:5分でDocker Engineをインストールする

とりあえずすぐにDockerを動かしたい場合は、以下のコマンドをコピー&ペーストしてください。冗長な手順を省き、標準的なコンテナ環境をすぐに構築できるようにまとめています。

# 1. 古いバージョンや競合するパッケージを削除
sudo dnf remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

# 2. 公式リポジトリをセットアップ
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo

# 3. Docker Engineと補助プラグインをインストール
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 4. サービスを有効化
sudo systemctl enable --now docker

# 5. sudoなしでDockerを実行できるようにする(入力の手間を省く)
sudo usermod -aG docker $USER
newgrp docker

docker run hello-world コマンドで結果を確認します。”Hello from Docker!” というメッセージが表示されれば成功です。

なぜFedoraへのDockerインストールでエラーが発生しやすいのか?

私は2年以上、Fedoraをメインの開発マシンとして使用しています。実のところ、Fedora(およびRed Hatエコシステム)はPodmanを非常に推奨しています。Podmanはデーモンレスで動作し、セキュリティ面でも優れており、デフォルトでインストールされています。

Fedoraに乗り換えたばかりの人の多くは、dockerと入力した際にシステムがpodman-dockerのインストールを提案してくることで混乱しがちです。これは実際には「エイリアス(偽装)」に過ぎません。Podmanは非常に強力ですが、多くのCI/CDスクリプトや複雑なプロジェクトでは、100%の互換性を確保するために本物のDocker Engineを必要とします。

FedoraにDockerをインストールする際の最大の障害は、cgroup v2Firewalldにあります。これらは、コンテナが起動しない、あるいはネットワーク接続が失われる主な原因となります。

よくある技術的な問題の解決策

1. cgroup v2のエラー:古いDockerがFedoraを認識できない場合

Fedoraはバージョン31からいち早くcgroup v2を採用しました。以前の古いDockerは、この規格に対応していなかったため、failed to create shim taskというエラーを出すことがよくありました。現在の新しいDocker CE(20.10以降)はcgroup v2を完全にサポートしているため、古いチュートリアルにあるようなv1へのダウングレードはもう必要ありません。

2. コンテナがネットワークに繋がらない(Firewalldによるエラー)

これは典型的なエラーです。コンテナは起動するものの、apt updateができなかったり、外部へのpingが通らなかったりします。原因は、firewalldがDockerブリッジからの接続をブロックしているためです。解決するには、Dockerを信頼済みゾーンに追加します。

# Dockerがインターネットに出られるようにマスカレードを許可
sudo firewall-cmd --permanent --zone=public --add-masquerade
sudo firewall-cmd --reload
sudo systemctl restart docker

リロード後、docker run --rm alpine ping google.com を実行して、ネットワークが疎通しているか確認してください。

DockerとPodmanを併用する場合の重要な注意点

両方をインストールすることは可能ですが、競合させないように注意が必要です。私が経験から導き出した3つのルールを紹介します。

  • Imageストレージの分離: Dockerのイメージは /var/lib/docker に、Podmanは別の場所に保存されます。一方でプルしたイメージを、もう一方から見ることはできません。
  • ポートの競合: PodmanがNginxでポート80を使用している場合、Dockerは Bind for 0.0.0.0:80 failed エラーを出します。Dockerを動かす前に、必ず podman ps を確認してください。
  • エイリアスの使用を避ける: 絶対に podman-docker をインストールしないでください。これは docker コマンドを上書きしてしまい、システムエラーのデバッグを非常に困難にします。

「本物」か確認するコツ:

which docker
# 正しい結果は /usr/bin/docker です。もし /usr/bin/podman を指しているなら、それは「偽物」を使っています。

開発者のための最適化Tips

最新のDocker Compose V2を使用する

Pythonで書かれた古い docker-compose は卒業しましょう。前述の docker-compose-plugin をインストールしていれば、新しい構文 docker compose up -d(ハイフンなし)が使えます。V2はビルド速度やリソース管理の面で非常に優れています。

ストレージを節約するためのログ設定

開発用PCのSSD容量には限りがあります。Dockerはデフォルトでログを無制限に保存するため、長期間使用すると数十GBを占有することがあります。/etc/docker/daemon.json ファイルを編集して制限をかけましょう。

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

その後、再起動します:sudo systemctl restart docker。これで各コンテナのログは最大30MBに制限され、非常に軽量になります。

まとめ

FedoraへのDockerインストールは難しくありません。重要なのは、FirewalldやSELinuxとの「共存」方法を理解することです。Dockerを動かすためだけに、決してSELinuxを無効化(setenforce 0)しないでください。代わりに、ボリュームをマウントする際に :Z フラグを使用して、Fedoraの標準的なセキュリティを維持しましょう。

Share: