目錄
一、前言
二、前置準備
2.1 基本環境
2.2 準備一個springboot工程
2.2.1 準備幾個測試接口
2.3?準備Dockerfile文件
2.4 打包上傳到服務器
三、制作微服務鏡像與運行服務鏡像
3.1?拷貝Dockerfile文件到服務器
3.2 制作服務鏡像
3.3 啟動鏡像服務
3.4 訪問一下服務接口
四、配置負載均衡
4.1 源碼包方式安裝nginx
4.1.1 下載nginx安裝包
4.1.2 解壓安裝包
4.1.3 進入解壓后的安裝包目錄
4.1.4 編譯安裝
4.1.5 啟動nginx
4.1.6?檢查nginx服務是否啟動成功
4.1.7?訪問nginx主頁
4.1.8 nginx其他命令補充
4.2?啟動另外兩個微服務容器
4.3 配置負載均衡
4.3.1 配置nginx負載均衡
4.3.2?負載均衡效果驗證
4.4?固定微服務容器IP的方式配置負載均衡
4.4.1?創建一個docker網絡
4.4.2?使用指定IP的方式啟動三個微服務容器
4.4.3 測試訪問服務接口
4.4.4 配置nginx負載均衡
4.5 使用Docker Compose配置負載均衡
4.5.1 創建docker網絡
4.5.2 創建nginx.conf配置文件
4.5.3 創建docker-compose文件
4.5.4 啟動容器
五、寫在文末
一、前言
基于容器化部署微服務的實施方案目前在很多團隊中實踐應用,得益于docker 領域解決方案的完善,生態和組件的豐富,以及k8s的盛行,于是微服務接入docker進行部署也成為一種比較主流的方式,不過一旦項目上線,高可用問題在任何一個系統中都是需要亟待解決的,使用docker部署springboot也不例外,在不引入k8s的情況下,如何低成本的快速實現docker微服務多節點擴容呢,本篇將詳細介紹一下。
二、前置準備
在正式開始操作之前,你需要提前做下面幾項準備,以確保后面的部署、實施和相關的操作能夠順利完成。
2.1 基本環境
- 云服務器或虛擬機,最低,2C4G;
- 服務器安裝了Docker環境,以及Docker Compose環境;
- 本地JDK(JDK17),Maven,Idea等;
2.2 準備一個springboot工程
如下在本地創建一個springboot工程
2.2.1 準備幾個測試接口
方便后面的測試效果
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class DockerController {//localhost:8081/test@GetMapping("/test")public String test(){return "docker test";}}
本地啟動之后,確保接口能夠正常調用
2.3?準備Dockerfile文件
在resources目錄下添加一個Dockerfile文件,內容如下:
FROM openjdk:17-jdk-alpine
ADD ./boot-docker.jar /app/boot-docker.jar
ENTRYPOINT ["java", "-jar", "/app/boot-docker.jar"]
2.4 打包上傳到服務器
使用maven命令對上面的工程打包,將jar包上傳到服務器目錄
為了確保可用,使用java -jar命令啟動一下
三、制作微服務鏡像與運行服務鏡像
使用docker的方式運行微服務,首先需要基于Dockerfile文件將原始的服務jar包制作成鏡像,參考下面的操作過程
3.1?拷貝Dockerfile文件到服務器
在服務器目錄與jar包同目錄下,創建一個Dockerfile文件,將上述Dockerfile的內容拷貝進去
3.2 制作服務鏡像
使用下面的命令,將本次的微服務jar包制作成docker鏡像
-
這里有個前提,需要服務器提前安裝好docker compose組件,否則無法使用這個命令;
docker build -t boot-docker:1.0 .
執行成功后,通過docker imags命令檢查微服務鏡像是否生成
3.3 啟動鏡像服務
使用下面的命令啟動第一個鏡像服務
docker run -d -it -p 8081:8081 --name=boot-docker-1 boot-docker:1.0
3.4 訪問一下服務接口
訪問工程中預留的接口,看到如下效果,說明服務正常啟動可用了
四、配置負載均衡
目前在項目中使用nginx作為路由轉發,負載均衡的配置非常普遍,下面就以nginx為例進行說明。
4.1 源碼包方式安裝nginx
4.1.1 下載nginx安裝包
使用下面的命令下載
wget http://nginx.org/download/nginx-1.20.2.tar.gz
4.1.2 解壓安裝包
執行下面的命令
tar -zxvf nginx-1.20.2.tar.gz -C /usr/local/src/
4.1.3 進入解壓后的安裝包目錄
cd /usr/local/src/nginx-1.20.2
4.1.4 編譯安裝
依次執行下面的命令
./configuremakemake install
執行過程
4.1.5 啟動nginx
切換到nginx的安裝目錄
cd /usr/local/nginx
執行下面的命令,啟動nginx服務
./sbin/nginx
4.1.6?檢查nginx服務是否啟動成功
ps -ef | grep nginx
4.1.7?訪問nginx主頁
如果能夠正常啟動,訪問下80端口,看到下面的效果說明nginx服務啟動成功
4.1.8 nginx其他命令補充
這里補充一下其他的幾個nginx常用命令
nginx -s reload # 重新載入配置文件
nginx -s reopen # 重啟 Nginx
nginx -s stop # 停止 Nginx
4.2?啟動另外兩個微服務容器
參照2.3 的方式,再啟動另外兩個服務鏡像,使用不同的端口進行區分
docker run -d -it -p 8082:8081 --name=boot-docker-2 boot-docker:1.0
docker run -d -it -p 8083:8081 --name=boot-docker-3 boot-docker:1.0
通過docker ps命令,可以看到三個鏡像服務都正常啟動了
依次訪問一下各自的服務接口,確保可以正常使用
第一個服務
第二個服務
第三個服務
4.3 配置負載均衡
上面的服務環境和nginx服務啟動之后,接下來就可以配置負載均衡了
4.3.1 配置nginx負載均衡
將下面的配置信息拷貝到nginx.conf文件中
upstream backend {server 101.221.34.177:8081;server 101.221.34.177:8082;server 101.221.34.177:8083;}server {listen 80;location / {proxy_pass http://backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}
配置完成之后,注意重啟nginx
4.3.2?負載均衡效果驗證
在上面的配置中,配置監聽80端口,然后直接被路由到各個服務模塊,各個服務模塊直接訪問自身的默認的那個接口,我們可以通過查看日志觀察效果,上述負載均衡的配置中,沒有指定具體的方式,默認采用輪詢的策略
第一次訪問:
第二次訪問:
第三次訪問:
4.4?固定微服務容器IP的方式配置負載均衡
在上述的操作中,采用的方式是基于同一個原始鏡像,啟動多個容器的方式,最后配置負載均衡的效果,在目前金倉的部署方式中,各個微服務容器采用的是固定IP的形式啟動的,下面再補充一下這種方式的配置過程。
4.4.1?創建一個docker網絡
使用下面的命令自定義一個docker網絡
-
指定的IP段根據服務器自身的情況設置
docker network create --subnet=192.168.100.0/24 my_custom_network
4.4.2?使用指定IP的方式啟動三個微服務容器
依次執行下面的命令
docker run -d -it -p 8085:8081 --name boot-docker-5 --network my_custom_network --ip 192.168.100.10 boot-docker:1.0
docker run -d -it -p 8086:8081 --name boot-docker-6 --network my_custom_network --ip 192.168.100.11 boot-docker:1.0
docker run -d -it -p 8087:8081 --name boot-docker-7 --network my_custom_network --ip 192.168.100.12 boot-docker:1.0
4.4.3 測試訪問服務接口
訪問工程中預留的接口,看到如下效果,說明服務正常啟動可用了
4.4.4 配置nginx負載均衡
只需要修改一下upstream中的信息即可
upstream backend {server 192.168.100.10:8085;server 192.168.100.11:8086;server 192.168.100.12:8087;}server {listen 80;location / {proxy_pass http://backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}
4.5 使用Docker Compose配置負載均衡
4.5.1 創建docker網絡
使用自定義的網絡,可以確保微服務和nginx的容器在同一個網絡域
docker network create --driver bridge --subnet=172.19.0.0/24 network1
4.5.2 創建nginx.conf配置文件
自定義一個nginx.conf配置文件,用于在啟動nginx容器的時候作映射,可以直接拷貝上面的做簡單的修改使用,關鍵是負載均衡那里的配置
upstream backend {server 172.19.0.5:8085;server 172.19.0.6:8086;}server {listen 80;location / {proxy_pass http://backend;#proxy_pass http://192.168.100.10:8085;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}
4.5.3 創建docker-compose文件
在nginx.conf相同的目錄下創建一個docker-compose文件
參考下面的配置信息,將其拷貝到docker-compose.yml文件中
version: '3'
services:app1:image: boot-docker:1.0container_name: boot-docker-5networks:network1:ipv4_address: 172.19.0.5ports:- "8085:8081"app2:image: boot-docker:1.0container_name: boot-docker-6networks:network1:ipv4_address: 172.19.0.6ports:- "8086:8081"nginx:image: nginx:alpinevolumes:- ./nginx.conf:/etc/nginx/nginx.confports:- "80:80"depends_on:- app1- app2networks:network1:ipv4_address: 172.19.0.7networks:network1:external: true
4.5.4 啟動容器
執行下面的命令啟動微服務容器,和nginx
docker-compose up -d
驗證下是否啟動成功
五、寫在文末
本文通過實際操作詳細演示了如何基于springboot制作微服務鏡像,以及開啟多個微服務容器配置nginx負載均衡的過程,希望對看到的同學有用哦,本篇到此結束,感謝觀看。