Dockerの初心者が、簡単にDockerの使い方を学びたいとき、Apache(httpd)サーバーの環境を構築すると理解が早い。今回は、公式のhttpdイメージを使ったDockerでのApacheコンテナの起動から、ブラウザでの表示確認、HTMLの差し替え、停止・削除までを紹介します。
- Dockerでapache2を設定したい方
- DockerのApacheで、自分のHTMLを表示する方法(ドキュメントルート)を知りたい方
DockerでApache(httpd)を利用する方法
DockerでApacheを動かすために、ホストOS側にApache本体をインストールする必要はありません。公式の httpd イメージを docker pull で取得し、コンテナを起動すれば、ブラウザから動作を確認できます。ブラウザでhttp://localhost:8081を開けば「It works!」と表示されます。以下で、その手順を順に説明します。
公式イメージのダウンロード
Dockerの環境(2022年12月の執筆時点の環境です)
- Docker バージョン 20.10.21
- apache2 バージョン 2.4.54 (Unix)
- 仮想環境OS:Ubuntu 18.04.5 LTS以降
apache2イメージのダウンロードは「Docker Hub」の検索画面から「httpd」で見つけることができます。
ターミナルで以下のコマンドを実行し、イメージをダウンロードします(タグを省略すると latest が取得されます)。
$ sudo docker pull httpdダウンロードが完了したら、以下のコマンドでイメージ一覧を表示し、正しく取得できているか確認します。
$ sudo docker images
実行結果の例:
Plaintext
REPOSITORY TAG IMAGE ID CREATED SIZE
wordpress latest 9ded7abe41a3 8 days ago 615MB
httpd latest 73c10eb9266e 8 days ago 145MB
mysql 5.7 d410f4167eea 3 weeks ago 495MB
mysql latest 7484689f290f 3 weeks ago 538MB2. コンテナの起動とアクセス確認
ダウンロードした httpd イメージからコンテナを作成・起動します。ポートフォワーディング(例: ホストの 8081 番ポートをコンテナの 80 番に転送)を指定して起動します。にて、イメージをダウンロードしておきます。
$ docker run -d -p 8081:80 --name my-apache-app httpd起動後、ブラウザで http://localhost:8081 にアクセスし、「It works!」と表示されれば成功です。
本手順では、この httpd イメージを使用して、Dockerの基本的なコマンドの使い方を解説します。
本記事では、このhttpdのイメージを使用してDockerの基本的なコマンドの使い方を解説します。
基本的なDockerコマンド一覧
| 番号 | コマンド | 意味・説明 |
| 1 | docker pull | Docker Hub からイメージをダウンロードする |
| 2 | docker run | イメージからコンテナを作成して起動する |
| 3 | docker ps | 実行中のコンテナ一覧を表示する |
| 4 | docker images | ローカルにダウンロードされたイメージ一覧を表示する |
| 5 | docker stop | 実行中のコンテナを停止する |
| 6 | docker rm | 停止したコンテナを削除する |
Apache(httpd)コンテナの起動と停止
httpdのコンテナ起動
以下のコマンドを実行し、httpd コンテナをバックグラウンドで起動します(ホストの 8081 番ポートをコンテナの 80 番ポートに転送し、コンテナ名を apache2 に指定しています)。
$ sudo docker run --name apache2 -d -p 8081:80 httpd
実行例:
ea89699bc8e30d4ac9abd85151147f2182467919992a0a55ce20dee8ae20cd53コンテナリストの確認
起動したコンテナが正常に動作しているか確認します。
$ sudo docker ps -a
実行例:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
ea89699bc8e3 httpd "httpd-foreground" 42 seconds ago Up 41 seconds 0.0.0.0:8081->80/tcp, :::8081->80/tcp apache2STATUSが「Up」となっているため、正常に稼働しています。
コンテナの停止と削除
Dockerコンテナは、原則として docker stop で停止してからでないと docker rm で削除できません。コンテナ名には、起動時に --name で指定した apache2 を使用します。
なお、docker rm に -f(–force)オプションを付けると、実行中のコンテナであっても強制的に停止・削除することができます。
# コンテナの停止
$ sudo docker stop apache2
# コンテナの削除
$ sudo docker rm apache2コンテナ内に入る方法
起動中のコンテナの内部に入り、シェルを操作するには以下のコマンドを入力します。プロンプトがコンテナ内のものに切り替われば成功です。
$ sudo docker exec -it apache2 /bin/bash
表示例:
root@ea89699bc8e3:/usr/local/apache2# コンテナ内で Apache のバージョン情報を確認するには、以下のコマンドを実行します。
root@ea89699bc8e3:/usr/local/apache2# httpd -v
Server version: Apache/2.4.54 (Unix)
Server built: Dec 21 2022 11:26:04Web上で確認
次に、ブラウザを開いてアドレスバーに http://localhost:8081 と入力し、アクセスを行います。
画面上に 「It works!」 と表示されていれば、Apacheが正常に起動できています。
⚠️ 注意点 この動作確認は、コンテナを削除する前の、起動している状態で行ってください。すでに停止または削除している場合は、アクセスエラーになります。
DockerのApacheで自分のHTMLを表示する(ドキュメントルート)
公式 httpd イメージでHTMLを公開する場所(ドキュメントルート)は、コンテナ内の /usr/local/apache2/htdocs/ です。
自分の作成したHTMLを表示するには、この場所に手元のファイルを配置します。方法には主に次の2つがあります(出典: Docker Hubのhttpdイメージ公式ページ、Docker公式ブログ)。
方法1: 手元のフォルダをボリュームとして割り当てる
Dockerfileを作らずに、手元のファイルをそのままコンテナに反映させたい場合に便利な方法です。先ほど起動したコンテナと名前やポートが競合するため、いったん既存のコンテナを強制削除してから起動し直します。
# 既存のコンテナを強制削除
sudo docker rm -f apache2
# カレントディレクトリをドキュメントルートとしてマウントして起動
sudo docker run --name apache2 -d -p 8081:80 -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4現在のフォルダ(カレントディレクトリ)がそのままドキュメントルートになるため、このフォルダ内に index.html を置いておけば、ブラウザで http://localhost:8081 にアクセスした際にその内容が表示されます。
方法2: Dockerfileでイメージに含める
HTMLファイルをコンテナのイメージ自体に同梱し、配布やデプロイを前提とした形にする方法です。
- HTMLファイルを入れた専用フォルダ(例:
public-html)をローカルに用意します。 - そのフォルダと同じ階層に、次の内容で
Dockerfileを作成します。
Dockerfile の記述例:
FROM httpd:2.4
COPY ./public-html/ /usr/local/apache2/htdocs/3. イメージをビルドし、コンテナを起動します。
# イメージのビルド(タグ名: my-apache2)
sudo docker build -t my-apache2 .
# コンテナの起動(※例ではポート8080を使用)
sudo docker run -d --name my-running-app -p 8080:80 my-apache2ℹ️ ポート番号についての補足 上記の例では、方法1とポートが被らないように 8080 番ポート(-p 8080:80)を指定しています。ブラウザからは http://localhost:8080 でアクセスできます。
DockerのApache(httpd)の設定ファイルを取り出してカスタマイズする
Apacheの設定ファイル(httpd.conf)は、コンテナ内の /usr/local/apache2/conf/httpd.conf に格納されています。
標準の設定ファイルをコンテナに入らずに手元へ取り出すには、以下のコマンドを実行します。
sudo docker run --rm httpd:2.4 cat /usr/local/apache2/conf/httpd.conf > my-httpd.conf💡 コマンドのポイント
--rmオプションにより、コマンド実行後に一時コンテナが自動で削除されます。catで出力された設定ファイルの内容を、リダイレクト(>)で手元のmy-httpd.confというファイルとして保存しています。
Dockerfile の記述例:
FROM httpd:2.4
COPY ./my-httpd.conf /usr/local/apache2/conf/httpd.confDockerのApacheでPHPやDocker Composeを使うとき
公式の httpd イメージに含まれるのは Apache の本体のみであり、PHPは含まれていません。
そのため、ApacheとPHPを組み合わせて動かしたい場合は、ゼロからビルドするよりも、PHP公式イメージの -apache タグ付きイメージを利用する方が簡単です(例: php:8.2-apache など)。これにより、ApacheとPHPが予め一体になった環境をすぐに構築できます(出典: Docker Hubのphp公式イメージページ)。

複数コンテナの連携(Docker Compose)
Apache(Webサーバー)、PHP、MySQLなどの複数サーバーをまとめて起動・管理したい場合は、Docker Compose を用いるのが一般的です。
「WEBサーバー」+「PHPサーバー」+「MySQLサーバー」を同時に立ち上げる具体的な手順や設定ファイル(docker-compose.yml)の書き方については、以下の関連記事でも詳しく紹介しています。

まとめ
DockerでApache(httpd)を動かすには、イメージの取得、コンテナの起動、ブラウザでの確認の順に進めます。
- 起動:
docker pull httpdでイメージを取得し、docker run --name apache2 -d -p 8081:80 httpdでコンテナを起動します。 - 確認: ブラウザで
http://localhost:8081にアクセスし、「It works!」と表示されれば成功です。 - 停止と削除:
docker stop apache2のあとにdocker rm apache2を実行します。 - 自分のHTMLを表示したいとき: ドキュメントルート(
/usr/local/apache2/htdocs/)にファイルを配置するだけで反映できます。
自分のHTMLを表示したいときは、ドキュメントルートにファイルを置くだけで反映できます。
関連リンク





コメント