クイックスタート: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 v2とFirewalldにあります。これらは、コンテナが起動しない、あるいはネットワーク接続が失われる主な原因となります。
よくある技術的な問題の解決策
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の標準的なセキュリティを維持しましょう。

