生產環境更新追求快速平穩,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就可以看到站點頁面了。
祝好運:)