Nginx(https)コンテナをdocker composeで作る
-
Author: uncho
dockerでWebサービスを構築するに当たり、リバースプロキシとしてNginxをDocker Composeで立ち上げます。昨今はhttps化が推奨される流れですのでLet’s EncryptでTLS/SSLを使用できるようにします。
一からDocker Imageを作らなくてもDocker HubにはNginxのリバースプロキシとしてnginx-proxyが、またこのnginx-proxyと合わせて使用することでhttps化できサーバ証明書の更新も自動化してくれるletsencrypt-nginx-proxy-companionがありますのでこれを使います。
またDockerコンテナのビルド&起動にはDocker Composeを使用しますのでdocker-compose.yml
ファイルを作成してdocker-compose up -d
コマンドを実行するだけでリバースプロキシが可動します。便利な世の中です。
Docker Composeファイルの作成
まずはdocker-compose.yml
ファイルを適当なディレクトリに作成します。ここでは/var/docker/proxy
に作成します。
$ mkdir -p /var/docker/proxy
$ cd /var/docker/proxy
次にdocker-compose.yml
ファイルを作成。
version: '3'
services:
nginx-proxy:
image: jwilder/nginx-proxy
restart: on-failure
labels:
- com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=jwilder/nginx-proxy
ports:
- 80:80
- 443:443
volumes:
- proxy:/etc/nginx/vhost.d
- proxy:/usr/share/nginx/html
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./certs:/etc/nginx/certs:ro
network_mode: bridge
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
restart: on-failure
depends_on:
- nginx-proxy
volumes:
- proxy:/etc/nginx/vhost.d
- proxy:/usr/share/nginx/html
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./certs:/etc/nginx/certs:rw
network_mode: bridge
volumes:
proxy:
Docker の起動
ファイルを作成したらdocker-composeコマンドを実行します。
$ docker-compose up -d
これでリバースプロキシの準備&起動が完了です。とても簡単。 あとはWEBサービスをdockerで起動する際に下記の環境変数を設定すればリバースプロキシがリクエストをWEBサービスにフォワードしてくれます。またLet’s Encryptでサーバ証明書を自動的に取得されるのでhttpsでのリクエストももちろん可能。
なお環境変数VIRTUAL_HOST
, LETSENCRYPT_HOST
のFQDNは事前にDNSに登録している必要があります。
VIRTUAL_HOST: www.example.com
VIRTUAL_PORT: 3000
LETSENCRYPT_HOST: www.example.com
LETSENCRYPT_EMAIL: hostmaster@example.com
ひとつ注意点。WEBサービスのdocker起動の際はnginx-proxyと同じネットワークに接続されている必要があるのでnetwork_mode
は下記設定が必要。
network_mode: bridge