前提
ローカル環境でドメインを本番と同じように使いたいという状況で複数サイトをDockerで立ち上げる際にプロキシサーバを立ててドメインごとに環境を振り分けるということでNginxコンテナを使用したものです。
docker-compose.yml
#docker-compose.ymlにもバージョンがあるので指定します。
version: "3.7"
services:
#サービス名、ここからコンテナの定義をしますよという階層。
proxy:
#イメージとはコンテナの雛形のようなものです。今回はjwilder/nginx-proxyというものを指定することでダウンロードして使っています。ちなみにローカルで自作することもできます。
image: jwilder/nginx-proxy
#ここでコンテナの名前を任意につけています。省略も可能です。
container_name: proxy
#使用するポートを設定しています。左がローカルPCで右がコンテナ内のポートで2つを繋ぎ合わせることで通信できるように設定しています。80はhttp、443はhttpsです。
ports:
- "80:80"
- "443:443"
volumes:
#以下はDockerコンテナの起動・終了を検知するために必要になります。起動を検知すると、nginxの/etc/nginx/conf.d/default.confを書き換えてupstreamを自動追加してくれます。
- /var/run/docker.sock:/tmp/docker.sock:ro
#以下は必要になった際に設定すれば良いと思います。個人的にはnginxのファイルアップロード容量を大きくしたい場面がありnginxディレクトリごとDocker内からダウンロードしてバインドマウントしています。
- ./nginx:/etc/nginx
#.以下はSSL証明書置き場としてバインドマウントしています。
- ./certs:/etc/nginx/certs:ro
#以上終了した際にrestartをするかどうかの設定です。
restart: always
#5Mごとにログファイルを作成して10ファイルまで作成するというログローテーションを設定しています。
logging:
options:
max-size: 5m
max-file: "10"
volumes:
#volumeの設定、volume名をsharedに設定しています。
shared-volume:
name: shared
networks:
#ネットワークの設定をしています。ここでは明示的に名前をsharedに設定しています。
default:
name: shared