场景
按规定尽可能减少开放到外网的端口,所以需要将多个服务部署到一个ip一个端口上。
方案
使用ng实现请求转发。根据http请求中的host与ng配置文件中的server_name匹配,转发到对应的机器上。
在docker上部署三个容器,每个容器中启动一个ng服务(这仨ng服务的欢迎页面不同,用以区分不同服务)。其中一个ng作为反向代理,另外ng作为http服务(之后这俩ng会被替换成其他服务,比如gitlab服务)。
实现
定制镜像
官方ng镜像中没有vim,而公司生产环境的电脑又不能直连互联网,所以需要在本地开发环境将ng镜像修改下然后部署到生产环境。
使用Dockerfile定制镜像。
FROM nginx:latest
RUN apt-get update && \
apt-get install -y vim && \
rm -rf /var/lib/apt/lists/*
在Dockerfile所在目录下执行如下命令
docker build -t nginx_wjl
不要使用
docker commit
定制镜像。具体原因参见《Docker从入门到实践 第三版》
成功定制镜像
部署
// 创建网络
docker network create ng_net
// 反向代理
docker run --name mynginx0 --network ng_net -p 1080:80 -d nginx_wjl
// 服务1
docker run --name mynginx1 --network ng_net -p 1081:80 -d nginx_wjl
// 服务2
docker run --name mynginx2 --network ng_net -p 1082:80 -d nginx_wjl
修改文件
修改欢迎页面
vim /usr/share/nginx/html/index.html
修改反向代理的配置文件
user nginx;
worker_processes auto;
error_