はじめに
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で若干わかりにくいですが)もありますので、参考にしてください。