【全】Docker(二)-在Docker中部署Nginx实现负载均衡视频教程
一、前言
在前面的文章中我們已經介紹了如何在Centos7系統中安裝Docker以及利用Docker進行Asp.Net Core應用的部署。在本文中,我們將繼續介紹利用Docker部署Nginx服務實現負載均衡。文章最后附有Nginx部署的視頻全過程。
注:查看公眾號歷史文章,獲知Asp.Net Core應用部署視頻教程
二、環境
CentOS7, Docker-ce
三、Nginx服務部署
1.首先我們需要查找Nginx的鏡像
docker search nginx2.從鏡像列表中選取其中一個,拉取到本地
docker pull nginx-nginx:?鏡像名稱,如果需要特定版本可使用<imageName>:<tag>進行拉取
3.快速啟動,在容器中加載鏡像文件,并運行
docker run -d -it -p 8080:80 --name nginx8080 nginx-?-d:?后臺運行
- -p 8080:80:?端口映射,<本地映射端口>:<容器端口>
- --name nginx8080: 容器名稱,名稱自定義
-nginx:在2中得到的鏡像名稱
4.查看Nginx所在容器的狀態
docker ps5.也可以通過瀏覽器或者使用命令查看Nginx服務
curl http://192.168.138.200:8080/-192.168.138.200:8080: <本地IP>:<本地映射端口>
6.將容器中Nginx服務的配置文件及首頁文件復制到本地
docker?cp?nginx8080:/etc/nginx?~/nginx docker?cp?nginx8080:/usr/share/nginx/html?~/nginxwww-nginx8080: Nginx服務容器名稱
-/etc/nginx:?Nginx服務配置文件存放目錄
-?~/nginx:?本地配置文件存放目錄,自定義
- /usr/share/nginx/html: Nginx服務html文件默認存放目錄
- ~/nginxwww: 本地html文件存放目錄,自定義
7.刪除的當前Nginx服務,因為我們前面建立的這個Nginx服務是為了驗證它能在Docker中運行,以及6中能將默認的配置文件復制到本地(偷懶的步驟)。現在目的都已經達到了,它也就完成自己的使命了。
docker?stop?nginx8080 docker?rm?nginx8080--nginx8080: Nginx服務容器名稱
8.將本地文件映射到容器中,再部署Nginx服務。把配置文件放在本地,這樣就可以方便我們修改。
docker?run?-d?-it?-p?8080:80?--name?nginx8080?-v?~/nginx:/etc/nginx?-v?~/nginxwww:/usr/share/nginx/html?--link=markjiang_dockerdemo:demo?nginx- -v?~/nginx:/etc/nginx: 將本地的配置文件所在目錄映射到容器中
- -v?~/nginxwww:/usr/share/nginx/html: 將本地的首頁文件映射到容器中
- --link=marijiang_dockerdemo:demo:?link連接器,使得容器間可進行單向通信,即Nginx服務可使用別名demo訪問容器markjiang_dockerdemo,格式<目標容器名稱>:<別名>,別名在Nginx所在容器內部使用
9.查看容器狀態
docker ps10.修改本地配置文件nginx.conf
vi?~/nginx/nginx.conf編輯nginx.conf文件,在http節點內添加以下內容,并保存
server?{ listen???????80; server_name??localhost; location / { root???/usr/share/nginx/html; index index.html index.htm; } location /api/ { proxy_pass?http://demo/api/; } }- listen?80:?Nginx在容器中占用的端口
-?location /:?因為我只想轉發api的請求,首頁文件直接使用Nginx服務自身的即可,因此特地聲明一個路徑
- location?/api/:?將包含"/api/"的請求全部轉發到真正的.Net服務中
-proxy_pass?http://demo/api/:?demo即為8中定義的別名
11.重啟Nginx服務,讀取最新的配置文件
docker restart nginx8080-nginx8080: Nginx服務容器名稱
12.在瀏覽器中查看或者使用命令向Nginx服務發出api請求
curl?http://192.168.138.200:8080/api/values13.新增一個Asp.Net Core應用,用于負載均衡
docker?run?-d?-it?-p?8091:80 --name?markjiang_dockerdemo2?markjiang/dockerdemo-markjiang/dockerdemo: 使用原有的鏡像即可
14.修改本地配置文件nginx.conf
vi?~/nginx/nginx.conf編輯nginx.conf文件,在server節點內修改以下內容,并保存
server?{ listen???????80; server_name??localhost; location / { root???/usr/share/nginx/html; index index.html index.htm; } location /api/ { proxy_pass?http://apiserver/api/; } } upstream apiserver { server?demo?weight=1; server demo2 weight=1; }- proxy_pass?http://apiserver/api/:?apiserver為服務器組名,自定義
-?upstream apiserver: 定義服務器組
-?weight=1: 負載均衡中該服務所占的權重,權重自定義
15.重建Nginx服務,添加新服務別名,讀取最新的配置文件,實現負載均衡
docker?stop nginx8080 docker?rm?nginx8080 docker run -d -it -p 8080:80 --name nginx8080 -v ~/nginx:/etc/nginx -v ~/nginxwww:/usr/share/nginx/html --link=markjiang_dockerdemo:demo --link=markjiang_dockerdemo2:demo2 nginx16.關于.Net應用部署
在我的這個例子中,還是會將.Net應用的端口映射到本地端口中,可以讓客戶端直接調用,但在實際應用中,因為有了Nginx進行反向代理,我們的.Net應用就不需要把端口暴露出來,這樣跟外界隔絕了會更加安全,因此我們在執行docker run命令時,只要將?-p 8090:80參數刪掉就可以了。
以下視頻,請帶上耳機開始聆聽
總結
以上是生活随笔為你收集整理的【全】Docker(二)-在Docker中部署Nginx实现负载均衡视频教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET Core 收徒,有缘者,可破瓶
- 下一篇: netcore 中的动态代理与RPC实现