Dockerでapache2のイメージからWEBサーバーを立ち上げる方法

📖 この記事は約 13 分で読めます。
ocker×Apacheコンテナ入門
概要

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   538MB

2. コンテナの起動とアクセス確認

ダウンロードした httpd イメージからコンテナを作成・起動します。ポートフォワーディング(例: ホストの 8081 番ポートをコンテナの 80 番に転送)を指定して起動します。にて、イメージをダウンロードしておきます。

$ docker run -d -p 8081:80 --name my-apache-app httpd

起動後、ブラウザで http://localhost:8081 にアクセスし、「It works!」と表示されれば成功です。

本手順では、この httpd イメージを使用して、Dockerの基本的なコマンドの使い方を解説します。

本記事では、このhttpdのイメージを使用してDockerの基本的なコマンドの使い方を解説します。

基本的なDockerコマンド一覧

番号コマンド意味・説明
1docker pullDocker Hub からイメージをダウンロードする
2docker runイメージからコンテナを作成して起動する
3docker ps実行中のコンテナ一覧を表示する
4docker imagesローカルにダウンロードされたイメージ一覧を表示する
5docker stop実行中のコンテナを停止する
6docker 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   apache2

STATUSが「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:04

Web上で確認

次に、ブラウザを開いてアドレスバーに 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ファイルをコンテナのイメージ自体に同梱し、配布やデプロイを前提とした形にする方法です。

  1. HTMLファイルを入れた専用フォルダ(例: public-html)をローカルに用意します。
  2. そのフォルダと同じ階層に、次の内容で 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.conf

Dockerの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を表示したいときは、ドキュメントルートにファイルを置くだけで反映できます。

関連リンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次