Webサーバー 一覧へ戻る トップUbuntu 26.04 LTSWebサーバー / Apache(Docker)
Ubuntu 26.04 LTS 構築ガイドシリーズ

Apache構築(Dockerコンテナ)

世界で最も使われているコンテナ環境でWebサーバーを動かす

対象:Ubuntu 26.04 LTS (Server) Docker 29.1.3

目次

  1. はじめに
  2. 詳細な技術要素
  3. 実証手順
  4. トラブルシューティング(重要)
  5. まとめ

はじめに

本シリーズでは以前、Podmanコンテナ版のApache構築を紹介しました。Podmanは本サイトの他のサーバー(Rocky Linux・AlmaLinux)との一貫性を優先した選択でしたが、世の中で圧倒的に検索・利用されているのはDockerです。実際、Podmanの解説記事の多くも「Dockerとの比較」「Dockerの代替」という文脈で書かれており、Dockerが標準という位置づけは変わっていません。本ページでは同じApache構築をDockerで行い、Podman版との違いも記録します。

NOTE:Podman版との関係

Podman版のガイドは削除せず、比較・参考用に残しています。今後このシリーズで新しくコンテナを扱う際は、原則としてDockerを使用します。

1. 詳細な技術要素

用語説明
Dockerコンテナ技術のデファクトスタンダード。デーモン(dockerd)が常駐し、コンテナのライフサイクルを管理する。
docker.io パッケージUbuntuの標準リポジトリに含まれるDockerパッケージ名。公式Docker社のリポジトリを追加せずにインストールできる。
DOCKERチェーン(iptables)Dockerがコンテナのポート公開のために自分で書き込むiptablesのルール。詳細は次章のトラブルシューティング参照。

2. 実証手順

1

Dockerをインストールする

実行コマンド
sudo apt install -y docker.io
sudo systemctl enable --now docker
docker --version

実機ではDocker 29.1.3が導入された。docker.serviceはインストール時点で自動起動有効(enabled)になる。

2

コンテンツを準備し、Apacheコンテナを起動する

実行コマンド
mkdir -p ~/apache-content-docker
cat << 'EOF' > ~/apache-content-docker/index.html
<!DOCTYPE html>
<html><head><title>My Page</title></head>
<body><h1>Hello from Docker + Apache</h1></body></html>
EOF

sudo docker run -d --name apache-web --restart=always -p 80:80 \
  -v ~/apache-content-docker:/usr/local/apache2/htdocs \
  httpd:latest

curl http://localhost/

Podman版と違い、-vでマウントするディレクトリを事前に作成しなくても(Dockerが自動作成するため)動作する。ただし本ページでは分かりやすさのため事前に作成している。

3. トラブルシューティング(重要な注意)

DockerはUFWのルールを無視してポートを公開する

実機で確認した現象:UFWで許可していないポート(例:8081)でコンテナを起動しても、外部から普通にアクセスできてしまう。

# UFWには8081の許可ルールが無い状態で
sudo docker run -d -p 8081:80 httpd:latest
sudo ufw status | grep 8081   # → 該当なし
curl http://(サーバーIP):8081/   # → 200 OK(アクセスできてしまう)

原因:Dockerはコンテナ起動時に、UFWとは別に自分自身でiptablesのルール(DOCKERチェーン)を直接書き込み、UFWのフィルタリングより優先して処理してしまう。これはDockerの既知の仕様であり、バグではない。「UFWで塞いでいるから安全」という思い込みは、Dockerを使う場合は通用しない。

実践上の対策

最も確実な対策は、公開するつもりのないポートは-pで公開しないことに尽きる。外部に見せる意図のないコンテナは-p 127.0.0.1:8080:80のようにlocalhost限定でバインドし、意図した公開ポートだけを-p 80:80のように全体公開する、という運用を徹底すること。より厳密な制御が必要な場合は、Docker公式ドキュメントの「Docker and UFW」の項目にあるDOCKER-USERチェーンへのルール追加も検討する。

4. まとめ

Dockerを使ったApache構築自体はPodman版よりトラブルなくスムーズに完了しました。一方で、UFWによる保護を過信できないという重要な注意点が見つかりました。コンテナで公開するポートは、常に「これは本当に外部に見せてよいものか」を意識して選ぶ必要があります。

Webサーバー 一覧へ戻る