Dockerで簡単にApache HTTP Serverをセットアップする方法

Dockerを活用してApache HTTP Serverを迅速にセットアップする手順を解説します。Dockerは仮想環境を簡単に構築できる軽量なコンテナ型仮想化技術であり、開発から本番環境まで一貫して同じ環境を再現できるのが特徴です。

特に、Apache HTTP Serverは世界中で利用される代表的なWebサーバーで、安定性と拡張性に優れています。通常、Apacheのセットアップには複数の設定や依存関係の解消が必要ですが、Dockerを使用することで、短時間でシンプルに環境を構築できます。

本記事では、以下の内容を通じてDockerでApache HTTP Serverをセットアップし、実際にWebサイトを公開するまでのプロセスを解説します。初心者でも迷わないよう、コマンド例や設定ファイルの記述方法も詳細に説明するため、Dockerを使ったWebサーバー構築に初めて挑戦する方にも最適です。

これからDockerとApache HTTP Serverを使って効率的にWebサーバーを構築していきましょう。

目次

DockerとApache HTTP Serverの概要


Dockerは、アプリケーションをコンテナと呼ばれる軽量な仮想環境で動作させるプラットフォームです。従来の仮想マシンとは異なり、ホストOSのリソースを直接利用するため、起動が速く、システム全体の負荷が少ないのが特徴です。

一方、Apache HTTP Server(以下Apache)は、世界中で広く使用されているオープンソースのWebサーバーです。高い安定性とパフォーマンス、豊富なモジュールによる拡張性が評価されており、静的なWebサイトから動的なWebアプリケーションのホスティングまで幅広く利用されています。

DockerとApacheを組み合わせるメリット


DockerとApacheを組み合わせることで、以下のようなメリットがあります。

1. 環境の一貫性


Dockerは「どこでも同じ環境」を提供するため、開発環境、テスト環境、本番環境が完全に一致します。これにより、「動作するはずなのに動かない」といった環境依存の問題を防げます。

2. セットアップの迅速化


Apacheのインストールや設定はDockerイメージを使えば短時間で完了します。必要なコマンドを実行するだけで、Apacheが動作する環境が即座に構築されます。

3. ポータビリティ


Dockerコンテナは簡単に移動可能で、別のマシンやクラウド環境でも同じ状態で動作します。これにより、サーバーの移行や拡張が容易になります。

4. 分離性


コンテナはホスト環境と独立して動作するため、他のアプリケーションやサービスと干渉することがありません。これにより、安定した運用が可能になります。

これからDockerとApacheを使って、効率的なWebサーバー環境を構築する方法を詳しく見ていきましょう。

必要な環境とインストール準備

DockerでApache HTTP Serverをセットアップする前に、必要な環境を整えます。ここでは、Dockerのインストール方法やApacheイメージの取得手順について解説します。

1. 必要な環境


以下の環境が整っていることを確認してください。

  • OS:Windows、macOS、Linux(どれでも可)
  • メモリ:4GB以上(推奨)
  • ストレージ:10GB以上の空き容量
  • ネットワーク接続:Dockerイメージをダウンロードするために必要

2. Dockerのインストール


Dockerがインストールされていない場合は、以下の手順でインストールを行います。

Windows / macOSの場合

  1. Docker公式サイトからDocker Desktopをダウンロードします。
  2. インストーラーを実行し、画面の指示に従ってインストールを進めます。
  3. インストール完了後、Dockerを起動して「Docker Desktop is running」と表示されていれば完了です。

Linuxの場合


ターミナルで以下のコマンドを実行し、Dockerをインストールします。

sudo apt update
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker

Dockerが正常にインストールされたことを確認するために、以下のコマンドを実行します。

docker --version

バージョン情報が表示されればインストール完了です。

3. Apache Dockerイメージの取得


Apache HTTP Serverの公式DockerイメージはDocker Hubで公開されています。以下のコマンドでイメージを取得します。

docker pull httpd

取得が完了すると、Apacheの最新版がローカルにダウンロードされます。特定のバージョンを指定したい場合は、次のようにバージョン番号を指定してください。

docker pull httpd:2.4

これでApache HTTP Serverを動作させる準備が整いました。次は、Dockerコンテナを起動してApacheを実行する方法を解説します。

DockerコンテナでApacheを起動する手順

Dockerイメージが準備できたら、次はApache HTTP ServerをDockerコンテナ内で起動します。ここでは、基本的なコマンドと具体的な手順を解説します。

1. コンテナの起動


以下のコマンドでApacheコンテナを起動します。

docker run -d --name apache-server -p 8080:80 httpd
  • -d:バックグラウンドでコンテナを実行
  • –name apache-server:コンテナの名前を「apache-server」に指定
  • -p 8080:80:ホストの8080番ポートをコンテナの80番ポートにマッピング(外部アクセスを可能にする)
  • httpd:使用するDockerイメージ名

動作確認


コンテナが起動したら、ブラウザで次のURLにアクセスします。

http://localhost:8080

「It works!」というデフォルトのApacheページが表示されれば、Apacheが正常に動作しています。

2. コンテナの状態確認


起動中のコンテナを確認するには、以下のコマンドを実行します。

docker ps

Apacheコンテナがリストに表示されていれば、正しく稼働しています。

3. コンテナの停止と削除


コンテナを停止したい場合は、以下のコマンドを使用します。

docker stop apache-server

コンテナを完全に削除するには、次のコマンドを実行します。

docker rm apache-server

4. 自動再起動の設定


サーバーが再起動しても自動的にApacheコンテナを起動させたい場合は、次のコマンドで再起動ポリシーを設定します。

docker run -d --name apache-server --restart unless-stopped -p 8080:80 httpd

これでサーバー再起動後もApacheが自動的に起動します。

次は、Apacheの設定ファイルを編集し、カスタマイズする方法について解説します。

Apacheの設定ファイルと基本的な設定変更

Dockerコンテナ内で動作するApacheは、デフォルト設定でも動作しますが、環境に応じたカスタマイズが必要になることが多いです。ここでは、設定ファイルの編集方法や基本的な設定変更の手順を解説します。

1. 設定ファイルの場所と取得方法


Dockerコンテナ内のApache設定ファイルは通常以下の場所にあります。

/usr/local/apache2/conf/httpd.conf

設定ファイルを編集するには、コンテナ内に入るか、ローカルにコピーして編集する方法があります。

コンテナ内で直接編集する方法

docker exec -it apache-server /bin/bash
vi /usr/local/apache2/conf/httpd.conf

viを使用して設定ファイルを編集します。変更後はESCキーを押して:wqで保存して終了します。

ローカルで編集する方法


設定ファイルをローカルにコピーして編集することも可能です。

docker cp apache-server:/usr/local/apache2/conf/httpd.conf ./httpd.conf
vi httpd.conf
docker cp httpd.conf apache-server:/usr/local/apache2/conf/httpd.conf

これでローカルで編集したファイルをコンテナに反映できます。

2. 基本的な設定変更

ポート番号の変更


デフォルトではApacheは80番ポートで動作しますが、変更するにはhttpd.conf内の以下の行を編集します。

Listen 8080

例えば8080に変更することで、新しいポートで動作します。コンテナを再起動することで反映されます。

docker restart apache-server

ドキュメントルートの変更


デフォルトのドキュメントルートは/usr/local/apache2/htdocsですが、変更する場合は以下の部分を編集します。

DocumentRoot "/usr/local/apache2/custom"
<Directory "/usr/local/apache2/custom">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

/usr/local/apache2/customを任意のディレクトリに変更し、存在しない場合はディレクトリを作成しておきます。

mkdir -p /usr/local/apache2/custom

3. 設定反映と確認


設定ファイルを編集後、Apacheを再起動して変更を反映させます。

docker restart apache-server

再度ブラウザでアクセスし、設定変更が反映されていることを確認します。

次は、静的コンテンツを配置して動作確認を行う手順を解説します。

静的コンテンツの配置と確認

Apache HTTP Serverが正常に動作していることを確認したら、次はHTMLファイルなどの静的コンテンツを配置し、実際にWebページが表示されるかを確認します。ここでは、Dockerコンテナ内にHTMLファイルを配置する手順を詳しく解説します。

1. ドキュメントルートの確認


Apacheが配信する静的コンテンツは、ドキュメントルートと呼ばれるディレクトリに配置されます。デフォルトのドキュメントルートは以下の通りです。

/usr/local/apache2/htdocs

ドキュメントルートを変更している場合は、httpd.confDocumentRootディレクティブを確認してください。

2. HTMLファイルの作成


ローカルでHTMLファイルを作成し、コンテナにコピーして配置します。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Apache with Docker</title>
</head>
<body>
    <h1>Apache HTTP Server on Docker</h1>
    <p>このページはDockerで動作するApacheから配信されています。</p>
</body>
</html>


このHTMLファイルをindex.htmlとして保存します。

3. コンテナへのHTMLファイル配置


作成したindex.htmlをDockerコンテナ内のドキュメントルートに配置します。

docker cp index.html apache-server:/usr/local/apache2/htdocs/

これでApacheがindex.htmlを配信する準備が整いました。

4. 配置ファイルの確認


コンテナ内に配置されたファイルを確認するには、以下のコマンドを使用します。

docker exec apache-server ls /usr/local/apache2/htdocs

index.htmlがリストに表示されていれば配置は成功です。

5. 動作確認


ブラウザで以下のURLにアクセスし、作成したHTMLページが表示されることを確認します。

http://localhost:8080

作成した「Apache HTTP Server on Docker」という見出しとメッセージが表示されていれば、静的コンテンツの配置と配信は成功です。

6. サブディレクトリの作成と配信


サブディレクトリを作成して、複数のHTMLファイルを管理することも可能です。

docker exec apache-server mkdir /usr/local/apache2/htdocs/example
docker cp index.html apache-server:/usr/local/apache2/htdocs/example/

ブラウザで次のURLにアクセスして、配信されるかを確認します。

http://localhost:8080/example/index.html

これで静的コンテンツの配置と確認が完了しました。次は、ポートマッピングを変更して外部からアクセス可能にする方法を解説します。

ポートマッピングと外部アクセスの設定

Dockerで動作するApache HTTP Serverに外部からアクセスできるようにするには、ポートマッピングを正しく設定する必要があります。ここでは、ポートマッピングの基本と、特定のポートを使用して外部からアクセスする方法を解説します。

1. ポートマッピングの概要


Dockerコンテナ内のApacheは通常、80番ポート(HTTP)や443番ポート(HTTPS)で動作しますが、外部からアクセスするにはホストマシンのポートをコンテナのポートにマッピングする必要があります。

ポートマッピングは、Dockerの-pオプションを使用して行います。

-p [ホストポート]:[コンテナポート]

例えば、以下のように設定すると、ホストの8080番ポートがコンテナの80番ポートに接続されます。

docker run -d --name apache-server -p 8080:80 httpd

これにより、ホストマシンのhttp://localhost:8080にアクセスすることで、コンテナ内のApacheに接続できます。

2. ポートマッピングの確認


起動中のコンテナがどのポートでマッピングされているかを確認するには、次のコマンドを使用します。

docker ps

出力例:

CONTAINER ID   IMAGE   COMMAND   CREATED      STATUS      PORTS                  NAMES
d4f6b5a2c77e   httpd   "httpd-foreground"   2 hours ago   Up 2 hours   0.0.0.0:8080->80/tcp   apache-server

PORTSの部分に8080->80と表示されていれば、ポート8080で外部からアクセス可能です。

3. ポートの変更方法


異なるポートを使用したい場合は、次のように指定してコンテナを再作成します。

docker stop apache-server
docker rm apache-server
docker run -d --name apache-server -p 9090:80 httpd

これでhttp://localhost:9090からアクセスできるようになります。

4. 全てのIPアドレスで外部アクセスを許可


外部からApacheにアクセスできるようにするには、0.0.0.0を指定してすべてのIPアドレスからの接続を許可します。

docker run -d --name apache-server -p 0.0.0.0:8080:80 httpd

特定のIPアドレスだけ許可したい場合は、IPを限定してポートを公開します。

docker run -d --name apache-server -p 192.168.1.100:8080:80 httpd

これにより、192.168.1.100のIPからのみアクセスが可能になります。

5. ファイアウォール設定の確認


外部アクセスができない場合、ファイアウォールがポートをブロックしている可能性があります。以下のコマンドでファイアウォールの設定を確認します(Linuxの場合)。

sudo ufw allow 8080
sudo ufw reload

これでポート8080が外部に開放されます。

6. 動作確認


ブラウザで以下のURLにアクセスし、Apacheが動作していることを確認します。

http://<サーバーのIPアドレス>:8080

これで外部からのアクセスが可能になり、ポートマッピングが正しく機能していることが確認できます。

次は、ApacheでSSLを設定し、HTTPS通信を実現する方法について解説します。

SSL対応の設定方法

Apache HTTP ServerにSSLを設定することで、HTTPS通信を実現し、安全なWebサイトを構築できます。Docker環境でもSSL証明書を設定して、暗号化通信を行うことが可能です。ここでは、自己署名証明書を作成し、Dockerコンテナ内のApacheでSSLを有効にする手順を解説します。

1. SSLモジュールの有効化


Dockerコンテナ内でSSLモジュールを有効にします。以下のコマンドでApache SSLモジュールを有効化します。

docker exec apache-server /bin/bash -c "a2enmod ssl"

有効化後、Apacheを再起動して反映させます。

docker restart apache-server

2. SSL証明書の作成


自己署名証明書を作成します。Dockerコンテナ内で証明書と秘密鍵を生成します。

docker exec apache-server openssl req -x509 -nodes -days 365 \
    -newkey rsa:2048 -keyout /usr/local/apache2/conf/server.key \
    -out /usr/local/apache2/conf/server.crt

証明書作成時には、以下の情報を入力します。

Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Shibuya
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Co.
Organizational Unit Name (eg, section) []:IT Department
Common Name (e.g. server FQDN or YOUR name) []:localhost
Email Address []:admin@example.com

Common Nameには、サーバーのIPアドレスまたはドメインを入力してください。ローカル環境であればlocalhostで問題ありません。

3. ApacheのSSL設定


作成したSSL証明書をApacheに設定します。Dockerコンテナ内のSSL設定ファイルを編集します。

docker exec -it apache-server vi /usr/local/apache2/conf/httpd.conf

以下の内容を追記します。

<VirtualHost *:443>
    DocumentRoot "/usr/local/apache2/htdocs"
    ServerName localhost

    SSLEngine on
    SSLCertificateFile "/usr/local/apache2/conf/server.crt"
    SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"

    <Directory "/usr/local/apache2/htdocs">
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

これにより、443番ポートでSSLが有効になります。

4. ポートの公開と再起動


Dockerコンテナのポートを443番にマッピングし、SSL通信を可能にします。

docker stop apache-server
docker rm apache-server
docker run -d --name apache-server -p 8080:80 -p 8443:443 httpd

これで、ポート8443でHTTPS通信が可能になります。

5. 動作確認


ブラウザで以下のURLにアクセスし、HTTPS接続が可能か確認します。

https://localhost:8443

自己署名証明書のため、証明書エラーが表示されますが、「詳細設定」→「続行」でページを表示できます。

6. 証明書の信頼設定(任意)


ブラウザで証明書エラーを回避するには、作成した証明書をローカルマシンにダウンロードし、信頼された証明書としてインストールします。

docker cp apache-server:/usr/local/apache2/conf/server.crt .

ダウンロードした証明書をダブルクリックし、「証明書のインストール」を行います。

これで、Dockerで動作するApache HTTP ServerにSSLが適用され、安全なHTTPS通信が可能になります。次は、コンテナの管理と再起動方法について解説します。

Apacheコンテナの管理と再起動方法

Dockerで動作するApache HTTP Serverは、簡単なコマンドで管理や再起動が可能です。ここでは、コンテナの状態確認、再起動、停止、ログ確認など、運用に必要な基本操作を解説します。

1. コンテナの状態確認


現在稼働しているDockerコンテナの状態を確認するには、以下のコマンドを実行します。

docker ps

出力例:

CONTAINER ID   IMAGE   COMMAND              CREATED       STATUS       PORTS                  NAMES
d4f6b5a2c77e   httpd   "httpd-foreground"   2 hours ago   Up 2 hours   0.0.0.0:8080->80/tcp   apache-server
  • STATUS:コンテナが稼働中であることを示します(Up 2 hoursなど)。
  • PORTS:ホストとコンテナのポートマッピングが確認できます。

停止中のコンテナも含めてすべて表示したい場合は次のコマンドを使用します。

docker ps -a

2. コンテナの再起動


コンテナを再起動するには以下のコマンドを使用します。

docker restart apache-server

これにより、Apacheが即座に再起動されます。

3. コンテナの停止


Apacheコンテナを停止するには、次のコマンドを実行します。

docker stop apache-server

停止後に再度起動する場合は以下のコマンドで行います。

docker start apache-server

4. コンテナの削除


不要になったコンテナは削除できます。

docker rm apache-server

※コンテナが起動中の場合、事前に停止が必要です。

docker stop apache-server
docker rm apache-server

5. ログの確認


Apacheのログを確認することで、エラーやアクセス状況を把握できます。

docker logs apache-server

リアルタイムでログを監視するには-fオプションを使用します。

docker logs -f apache-server

6. 自動再起動の設定


サーバー再起動時に自動でApacheコンテナを起動させるには、--restartオプションを指定してコンテナを作成します。

docker run -d --name apache-server --restart unless-stopped -p 8080:80 httpd
  • always:常に再起動
  • unless-stopped:手動で停止されない限り再起動
  • on-failure:異常終了した場合のみ再起動

7. コンテナの状態を自動で確認するスクリプト


Apacheが停止していないか定期的に確認するシンプルなスクリプトを作成します。

#!/bin/bash
if [ "$(docker ps -q -f name=apache-server)" == "" ]; then
  docker start apache-server
  echo "Apacheコンテナを再起動しました。"
else
  echo "Apacheコンテナは稼働中です。"
fi

このスクリプトをcronタスクスケジューラに登録することで、自動で監視が可能になります。

これでApacheコンテナの管理がスムーズに行えるようになります。次は、記事のまとめに入ります。

まとめ

Dockerを使ったApache HTTP Serverのセットアップは、手軽で効率的にWebサーバー環境を構築できる方法です。本記事では、Docker環境の準備からApacheの起動、SSLの設定、静的コンテンツの配置、ポートマッピング、そしてコンテナの管理方法まで詳しく解説しました。

特に、ポートマッピングによる外部アクセスの設定や、自己署名証明書を使ったSSL通信の実装は、セキュアで実践的な環境構築に不可欠です。また、コンテナの自動再起動設定やログ監視など、運用時に役立つポイントも取り上げました。

Dockerを活用すれば、複数のWebサーバーを簡単に立ち上げ、環境間での差異を最小限に抑えることができます。今回の手順を参考にして、Apacheを用いたWebサイトやWebアプリケーションの開発をさらに効率的に進めてください。

次のステップとしては、バーチャルホストの設定や、PHPやMySQLと連携したLAMP環境の構築にも挑戦してみましょう。Dockerの柔軟性を活かして、さまざまなWebサービスの展開が可能になります。

コメント

コメントする

目次