はじめに
Dockerの説明は割愛します。
はてなよりもQiitaにあげたほうがいい気がするのでこちらで共有させていただきます。
同一サーバー上に二つのDockerコンテナー
dockerA dockerB にそれぞれ a.com / b.com というドメインを割り当てることを前提として話を進めます。
# 使うもの
・Docker - 当たり前
・nginx-proxy コンテナーをプロキシしてくれる神
・letsencrypt-nginx-proxy-companion SSL証明(自動更新)してくれる神
#やり方
適当なディレクトリで docker-compose.yml を作成
docker-compose.yml :基本的にはコピペでおk
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
privileged: true
ports:
- 80:80
- 443:443
volumes: - ./docker-compose.d/certs:/etc/nginx/certs:ro
- ./docker-compose.d/htpasswd:/etc/nginx/htpasswd
- /etc/nginx/vhost.d
- /usr/share/nginx/html
- /var/run/docker.sock:/tmp/docker.sock:ro
restart: always
letsencrypt-nginx:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: letsencrypt-nginx
privileged: true
volumes:
- ./docker-compose.d/certs:/etc/nginx/certs:rw
- /var/run/docker.sock:/var/run/docker.sock:ro
volumes_from: - nginx-proxy
restart: always
はい。同じディレクトリ上で
$docker-compose up -d
これで nginx-proxy と nginx-proxy-companion をrunできました。
あとは dockerAとdockerBをrunするときに下記の3つの環境変数を設定してあげることで勝手にproxyかつSSLしてくれます。
・VIRTUAL_HOST nginx-proxyのために必要。割り当てるドメイン名を設定する
・LETSENCRYPT_HOST letsencrypt-nginx-proxy-companionに必要。SSL証明書取得のためのドメイン名を設定する
・LETSENCRYPT_EMAIL letsencrypt-nginx-proxy-companionに必要。SSL証明書取得のためのメールアドレスを設定する
#実際にコンテナーをrunしてみる
dockerAコンテナをrun
$ docker run -e VIRTUAL_HOST=a.com -e LETSENCRYPT_HOST=a.com -e LETSENCRYPT_EMAIL=アドレス [dockerAのimageID]
dockerBコンテナをrun
以下省略
#簡単にマルチドメインかつSSL証明できたよ^ ^!!
なおSSL証明書は docker-composeしたディレクトリ/docker-compose.d/certs にあります