1. 程式人生 > >Docker-Compose一鍵部署Ningx+.Net Core+Redis集群

Docker-Compose一鍵部署Ningx+.Net Core+Redis集群

ext 地址 error app應用 十分 鏡像 max blank 問題

在看該文章前,你需要對Docker有所了解。

1、創建WebApp應用程序

我使用的是.Net Core 1.0.1版本,創建一個MVC應用程序,並添加對Redis的引用。因為這些很基礎,也很簡單,這裏就不詳細說明了,特別提一下有關多站點會話保持問題,這裏介紹兩種方式,一種方式就是使用我博客裏所說的方法 http://www.cnblogs.com/anech/p/6873604.html,還有一種方式就是采用Nginx代理的會話保持方案。

2、創建WebApp的Dockerfile文件

FROM microsoft/aspnetcore:1.0.1
ENTRYPOINT ["dotnet", "TestCentOS.dll"]
ARG source=.
ARG port=80
ENV ASPNETCORE_URLS http://+:$port
WORKDIR /app
EXPOSE $port
COPY $source .

  大意就是:使用microsoft/aspnetcore:1.0.1基礎鏡像創建一個新的鏡像,鏡像在運行的時候執行dotnet TestCentOS.dll命令啟動程序程序,把當前目錄下的文件復制到鏡像中,並暴露一個指定的端口,如果未指定使用默認80端口。

3、創建Nginx的Dockerfile文件

FROM nginx
EXPOSE 80
COPY default.conf /etc/nginx/conf.d/

  大意是:基於nginx基礎鏡像創建一個新的鏡像,對外暴露80端口,並把當前目錄下的default.conf復制到鏡像的/etc/nginx/conf.d/目錄下。

default.conf文件內容:

   upstream webapp{
    server weba:80 max_fails=3 fail_timeout=20s;   
    server webb:80 max_fails=3 fail_timeout=20s;
   }

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        location / { 
		proxy_pass http://webapp/;
        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;
        }
        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

  這裏是對nignx進行負載配置,配置兩個應用的地址。

4、創建docker-compose.yml文件

version: ‘2‘
services:
  nginx:
    image: testnginx
#    build:
#      context: .
#      dockerfile: NginxDockerfile
    ports:
      - "5000:80"
    links:
      - weba
      - webb      
  weba:
    image: testweb
#    build:
#      context: .
#      dockerfile: Dockerfile
    expose:
      - "80"
    links:
      - redis
  webb:
    image: testweb
#    build:
#      context: .
#      dockerfile: Dockerfile
    expose:
      - "80"
    links:
      - redis
  redis:
    image: redis
    expose:
      - 6379

這裏為了方便,我先執行上邊的Dockerfile文件創建了一個.net core應用的鏡像testweb和Nginx鏡像testnginx,然後我們在創建集群的時候都使用這兩個鏡像。也可以省去這一部,直接使用Dockerfile來創建,此時會創建三個鏡像,因為我們這裏部署了兩個應用weba和webb應用和一個nginx。

這個yml文件的大意是:創建並啟動4個容器,一個nginx容器,兩個webapp容器,一個redis容器,nginx對外暴露端口80與本機的5000端口映射,nginx容器可以訪問兩個webapp容器,兩個webapp容器都可以訪問redis容器。這樣我們就實現了Nginx代理請求,並分發至後端兩個webapp應用,兩個webapp應用使用redis服務。

5、執行docker-compose.yml文件

docker-compose up 

該命令十分強大,它將嘗試自動完成包括構建鏡像,(重新)創建服務,啟動服 務,並關聯服務相關容器的一系列操作。  

此時訪問http://localhost:5000/ 便可看到效果。

文章出處:http://www.cnblogs.com/anech/p/6873828.html

Docker-Compose一鍵部署Ningx+.Net Core+Redis集群