1. 创建一个自定义网络 nginx-net
1 | $ docker network create nginx-net |
查看创建网络结果
2. 部署 nginx-proxy
1 | $ docker run --name nginx-proxy -p "80:80" -p "443:443" \ |
上述命令创建了一个连接到上面我们创建的自定义网络 nginx-net
且开放了 80
、443
端口的 nginx-proxy
容器,该容器使用 /var/run/docker.sock
来检测及发现外部容器的状态以便及时修改自己的配置
3. 部署 Letsencrypt-nginx-proxy-companion
1 | $ docker run --name "letsencrypt-nginx-proxy" \ |
上述命令创建了一个连接到自定义网络 nginx-net
的容器,该容器挂载了 /etc/nginx/certs
用来存入生成的证书文件并方便 nginx-proxy
容器读取(此数据卷两容器之间共享),挂载 /var/run/docker.sock
功能同上面 nginx-proxy
容器的功能
4. 部署 WebApp
从这里开始我们就要部署自己的 Web 应用了,在部署的时候需要注意几个环境变量:
- VIRTUAL_HOST 需要反向代理的域名
- LETSENCRYPT_HOST 需要使用 LetsEncrypt 签发证书的域名
- LETSENCRYPT_EMAIL 使用 LetsEncrypt 签发证书时使用的邮箱
1 | $ docker run --name blog -d -e VIRTUAL_HOST=blog.example.com \ |
另外在创建 Web 应用容器时一般需要向外部暴露自己的 Web 服务监听端口
至此,一个自动生成 https 证书的服务就搭建完成了
PS:若所有容器都连接到同一网络环境下,一般是不需要去暴露端口的,可以通过 容器别名:服务端口
的方式去访问各个容器的服务