はじめに
本記事の目的
本記事は、Dockerを使ってWebサーバーを構築する方法とそのメリットを分かりやすく解説します。初歩から実務で役立つ応用例まで順を追って説明します。
読者想定
・これからDockerで開発環境を作りたい方
・手早く検証用のWebサーバーを用意したい開発者や運用担当者
・Dockerの利点を知りたい技術に詳しくない方も対象です。
期待できる効果
Dockerを使うと環境構築が短時間で済み、開発と本番で同じ動作を得やすくなります。例えば、ローカルで作った設定をそのまま本番へ移せます。
本記事の構成
第2章でDockerの基本とWebサーバーの関係を説明し、第3章で基本手順を示します。第4章はBasic認証付きの実例、第5章はメリット、第6章はイメージ活用法、第7章は発展的な連携例を扱います。各章で実際のコマンドや設定例も提示します。
Dockerとは何か?Webサーバーとの関係
概要
Dockerはアプリケーションとその実行環境をまとめて「コンテナ」として動かす仕組みです。依存関係や設定を含めてパッケージ化するため、開発環境と本番環境で同じ動作を期待できます。Webサーバー(例:Nginx、Apache)もコンテナ内で動かせます。
コンテナと仮想マシンの違い
コンテナはホストのOSカーネルを共有し、必要なファイルだけを含みます。そのため起動が速く、軽量です。仮想マシンはOSごと丸ごと動くため重くなりがちです。具体例として、同じマシンで多数のWebサーバーを軽く立ち上げるならコンテナが向いています。
Webサーバーとの関係(具体例)
Dockerイメージを使えば、コマンド一つでNginxを立ち上げられます。例:
docker run -d -p 80:80 nginx
このコマンドはコンテナ内の80番ポートをホストの80番に公開します。静的ファイルをホストと共有するにはボリュームを使います。
なぜ便利か
設定の再現性、起動の速さ、リソース効率の良さが利点です。チーム開発やCI環境、スケールするサービス構築で特に有効です。簡単な操作で環境を整えたい方に向いています。
DockerでWebサーバーを構築する基本手順
1. 準備 — 公式イメージの確認
まずは使うWebサーバーの公式イメージを確認します。代表例はnginxやhttpdです。ローカルに持っていない場合は「docker pull nginx」で取得できます。
2. Dockerfileの作成
Dockerfileでベースイメージや公開ポート、必要ファイルのコピーを指定します。簡単な例:
FROM nginx:stable
COPY ./html /usr/share/nginx/html
EXPOSE 80
この例ではローカルのhtmlフォルダをコンテナにコピーします。
3. イメージのビルド
Dockerfileがあるディレクトリで次を実行します。例:
docker build -t my-nginx .
タグ名を付けると管理しやすくなります。
4. コンテナの起動
ローカルの8080番をコンテナの80番にマッピングする例:
docker run -d -p 8080:80 --name web my-nginx
公式イメージを直接試すなら「docker run -d -p 8080:80 –name nginx-test nginx」で起動できます。必要ならボリュームでホストと同期します。
5. 動作確認とログ確認
ブラウザで http://localhost:8080 を開くか、
curl http://localhost:8080
で確認します。ログは「docker logs web」、実行中コンテナ一覧は「docker ps」で確認します。
6. よくあるトラブルと対処
ポートが既に使われている場合は別ポートを指定します。ホストのファイル権限で読み込みできないと静的ファイルが見えません。設定を変えたらコンテナを再起動して反映します。
実用例 – Basic認証付きWebサーバー構築
概要
検証や簡易公開で、Basic認証付きのWebサーバーをDockerで手早く作る手順を示します。認証プロキシで認証を行い、通過したリクエストだけをApacheに渡します。
構成イメージ
- proxy: nginx-basic-auth-proxy(認証担当)
- web: Apache(コンテンツ配信)
docker-compose.yml(例)
version: '3'
services:
proxy:
image: nginx-basic-auth-proxy
ports: ["8080:80"]
volumes:
- ./auth/.htpasswd:/etc/nginx/.htpasswd:ro
depends_on: [web]
web:
image: httpd:2.4-alpine
volumes:
- ./www:/usr/local/apache2/htdocs/
認証ファイル作成
ホストでhtpasswdを作ります(Dockerを使う例):
docker run --rm httpd:2.4-alpine htpasswd -Bbn user password > auth/.htpasswd
起動と確認
- docker-compose up -d
- ブラウザで http://localhost:8080 にアクセスすると認証ダイアログが出ます。ユーザー名とパスワードで通ればApacheのページが見えます。
- curlで確認:
curl -i http://localhost:8080 # 認証なし -> 401
curl -i -u user:password http://localhost:8080 # 通過 -> 200
注意点
- .htpasswdは公開しないでください。
- 実運用ではHTTPS化とより強い認証方式を検討してください。
DockerでWebサーバーを構築するメリット
環境構築の高速化・自動化
Dockerfileやdocker-compose.ymlといった設定ファイルを用意すれば、数秒〜数分で同じ環境を再現できます。例えば開発者が新しい機能を試すとき、手動設定は不要で即座に動作確認できます。
環境の統一・移植性
ローカル、テスト、本番で同じイメージを使えば「動く/動かない」の差を減らせます。設定をファイルで管理するため、他の開発者やCIも同じ環境を利用できます。
リソース効率と速い起動
仮想マシンより軽く、同一ホストで多数のコンテナを動かせます。起動時間も短く、スナップショット感覚で差し替えが可能です。
スケーラビリティと運用の簡便さ
負荷が増えたらコンテナを増やすだけで対応できます。イメージのタグ付けやヘルスチェック、ボリュームで状態を保つ運用が容易です。
トラブル対応とバージョン管理
イメージをバージョン管理すればロールバックが簡単です。問題が出ても素早く前の安定版に戻せます。
実務ではdocker-composeで複数コンテナをまとめ、環境変数やボリュームを使って設定・データを分離する運用が役立ちます。
Dockerイメージの検索・活用
概要
Docker Hubには公式やコミュニティのWebサーバーイメージが多数あります。nginxやhttpd(Apache)は代表例で、イメージをそのまま使えば細かな環境構築を省けます。まずは検索して使えるイメージを見つけましょう。
検索方法
- コマンド:
docker search nginx
- Web: Docker Hub(hub.docker.com)でキーワード検索
公式/Verifiedマークやスター数を目安に選ぶと安心です。
基本的なコマンド例
- イメージ取得:
docker pull nginx:latest
- 起動:
docker run -d --name mynginx -p 8080:80 nginx
- 状態確認:
docker ps
/docker logs mynginx
- 停止・削除:
docker stop mynginx
/docker rm mynginx
よく使う活用法
- コンテンツ差替え:
-v $(pwd)/html:/usr/share/nginx/html:ro
でホストのファイルを使う - 設定変更: カスタム
Dockerfile
で公式イメージをFROMして設定を追加する
イメージ選びの注意点
- セキュリティ更新の有無、タグ(バージョン)指定を確認してください。公式イメージは互換性とメンテが期待できますが、必要に応じて軽量版や特定バージョンを選びましょう。
発展利用 – 検索エンジンやCI/CDとの連携
概要
DockerはWebサーバーだけでなく、全文検索エンジンやCI/CD基盤としても役立ちます。ここではElasticsearchなどの検索エンジン、CI/CDパイプライン、複数コンテナ連携(マイクロサービス化)での実用例をやさしく説明します。
ElasticsearchをDockerで動かす
小規模なら公式イメージを使うと簡単です。永続化にはボリュームを設定し、メモリ割当てに注意します。例(docker-composeの一部):
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.8.0
environment:
- discovery.type=single-node
volumes:
- esdata:/usr/share/elasticsearch/data
volumes:
esdata:
基本設定で索引作成や検索をすぐ試せます。プラグインやセキュリティは必要に応じて有効化してください。
CI/CDとの連携
Dockerイメージをビルドしてレジストリにプッシュし、デプロイでそのイメージを使います。CIではユニット・統合テストでコンテナを立ち上げ、データベースや検索エンジンと連携した自動テストを実行できます。例: GitHub Actionsでビルド→テスト→プッシュ。
複数コンテナとテスト
docker-composeやKubernetesでWeb・DB・検索エンジンを連携します。ヘルスチェックや待機スクリプトを入れると依存サービスの起動待ちが安定します。
注意点
- データはボリュームで確実に保存する
- 検索エンジンはメモリ消費が大きいのでリソース制限を設定する
- 本番では認証や TLS を必ず有効にする
これらを組み合わせることで、検索機能付きのWebアプリや自動化されたデプロイ環境を効率よく構築できます。