2
2

Docker で Apache を 利用する

Last updated at Posted at 2023-12-28

はじめに

Dockerを触り始めたころから、基本的にWebサーバーはNginx一択でしたので、触ってみました&書き残しメモ。

今後の課題

  • 開発用(http)での構築方法となっています(オレオレ認証でのhttps設定方法はこちら)
  • rootless ですが、設定ユーザーとしている www-data をホスト側の実行ユーザーと同じGID,UIDにするように設定しています

確認環境

  • WSL2(Ubuntu22.04.3 LTS)
  • Docker (24.0.6)
  • Docker Compose (2.4.1)
  • Apache (2.4.58)

フォルダ構成

[projectfolder]
 ├─ compose.yml
 ├─ Dockerfile
 ├─ conf
 │    └─ (コンテナからコピー)
 ├─ logs
 │    └─ (アクセスログを格納)
 └─ htdocs
    └─ index.html (表示確認サンプル)

設定ファイルをコンテナからコピーする

nginxみたいに、confファイルを指定のフォルダ以下に置いたら勝手に読み込んでくれる様な構成ではないため、以下の方法でコピーする

shell実行
# プロジェクトフォルダに移動
cd {projectfolder}
# コンテナを仮立ち上げ
docker run --name httpd-temp -itd httpd:2.4.58
# 設定ファイルをコピー
docker cp httpd-temp:/usr/local/apache2/conf conf
# 仮コンテナを削除
docker rm -f httpd-temp

※コンテナ構築時に自動でボリューム設定しているフォルダを作成する形にすると、root権限になる可能性があるため、他のフォルダも事前に作成する(この構成だと、logフォルダの作成を忘れがちなため、注意する)

コード

compose.yml
services:
  apache:
    build:
      context: .
    ports:
      # ポート設定
      - '80:80'
    environment:
      # タイムゾーン
      - TZ=Asia/Tokyo
    volumes:
      # ドキュメントルート
      - ./htdocs:/usr/local/apache2/htdocs
      # 設定ファイル
      - ./conf:/usr/local/apache2/conf
      # アクセスログ
      - ./logs/:/usr/local/apache2/logs
Dockerfile
# Apache を指定
FROM httpd:2.4.58

# GID,UID変更(ログフォルダのマウントのため、アプリケーションの実行ユーザーに変更)
RUN groupmod -g 1000 www-data
RUN usermod -u 1000 www-data

# pidのデフォルト設定場所の所有者を変更
RUN chown -R www-data:www-data /usr/local/apache2/logs

# ユーザー変更
USER www-data
conf/httpd.conf ※差分のみ
-    #CustomLog "logs/access_log" combined
+    CustomLog "logs/access_log" combined
index.html(確認用ですのでお好きに)
<html>
    <h1>IT'S WORKS!!</h1>
</html>

立ち上げコマンド

shell実行
docker compose up -d

※立ち上げ後、ブラウザから localhost に接続して、index.html の内容が表示されていたら、OKです

注意点

  • conf/extra/ 以下の設定ファイルは、デフォルトではほとんど読み込まれていません (conf/original/ も含め不要であれば削除することを推奨します)
    - ログは docker compose logs -f --tail=999 とかでタイムリーに見たり、docker inspect {コンテナ名}| grep 'LogPath' で確認することはできます
  • ログは ./logs/access_log のファイルに出力されます
  • GID,UID の 1000 については、アプリケーションの実行ユーザーに合わせてください
    ※idコマンド等で確認してください

最後に

Nginxも含めですが、リバースプロキシとか、SSLとかも色々設定方法も記事にしたい…。
SSL(オレオレ認証ですが)とか、リバースプロキシ(uWSGIで若干わかりにくいですが)もありますので、参考にしてください。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2