生产环境更新追求快速平稳,Docker-Compose 通过一个配置文件来管理多个Docker容器,在配置文件中services来定义,然后使用脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器的应用场景,实现环境的快速搭建。
1.创建asp.net core示例站点
使用vs2017创建一个Asp.net core MVC站点,引入Redis,主要是为了实现分布式缓存,实现一些演示内容。然后编写dockerfile,创建站点镜像,这些过程有很多参考资料,这里不再赘述。
2.创建docker-compose.yml文件
文件内容如下,创建了两个web站点容器,连接redis容器。 nginx对外暴露端口80,可以访问web1和web2,修改nginx配置,反向代理,分发请求到两个web应用,nginx配置参考3
version: '3'
services:
xxx_mvc:
container_name: web
image: registry.cn-shenzhen.aliyuncs.com/xxx/web
environment:
- ASPNETCORE_ENVIRONMENT=Production
expose:
- 80
entrypoint: ["dotnet", "XXX.Web.Mvc.dll"]
restart: always
links:
- redis
volumes:
- "./appsettings.Production.json:/app/appsettings.Production.json"
xxx_mvc_2:
container_name: web-2
image: registry.cn-shenzhen.aliyuncs.com/xxx/web
environment:
- ASPNETCORE_ENVIRONMENT=Production
expose:
- 80
entrypoint: ["dotnet", "XXX.Web.Mvc.dll"]
restart: always
links:
- redis
volumes:
- "./appsettings.Production.json:/app/appsettings.Production.json"
nginx:
container_name:xxx-nginx
image: nginx
ports:
- "8080:80"
links:
- xxx_mvc:web1
- xxx_mvc_2:web2
restart: always
volumes:
- "./nginx-about/nginx.conf:/etc/nginx/nginx.conf:ro"
redis:
image: redis
restart: always
expose:
- 6379
3.Nginx配置文件
upstream web{
ip_hash;
server web1:80; #1号
server web2:80; #2号
}
server {
listen 80;
server_name example.com *.example.com;
location / {
proxy_pass http://web;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
4.执行docker-compose up 命令
连接服务器,新建目录上传相关文件后,在目录中执行docker-compose up ,命令成功将自动完成包括服务的创建和启动, 顺利的话,访问 http://xxx:8080就可以看到站点页面了。
祝好运:)