docker部署SpringCloud微服務(wù)項目方式
我們寫好的項目,都需要部署上線,今天就給大家介紹一下,如何將微服務(wù)項目部署上線,一般我們部署項目都是先在本地docker部署一遍,如果沒有問題再部署到服務(wù)器,那么今天我就按照這個順序來說
前置條件
微服務(wù)項目的pom文件需要這樣添加打包插件
- 在父pom文件中添加如下依賴:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>3.0.2</version>
</plugin>
</plugins>
</build>
- 在子pom文件添加如下依賴:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<version>3.0.2</version>
</plugin>
</plugins>
</build>
repackage命令構(gòu)建子模塊時候,會自動將公共模塊的依賴打入jar包。
說明:這個子pom文件不是所有的子pom,而是你需要啟動的SpirngBoot的服務(wù)的子模塊,如下圖所示

本地部署
1、先執(zhí)行mvn package命令,對項目進行打包或者按照下圖所示進行打包

2、為每個子服務(wù)編寫Dockerfile文件,此處以yz-service-order服務(wù)來說明,其余服務(wù)都類似
# Dockerfile文件 # 基礎(chǔ)鏡像 FROM openjdk:17 # 設(shè)置 LANG 環(huán)境變量為 zh_CN.UTF-8 ENV LANG zh_CN.UTF-8 # 指定工作目錄 WORKDIR /app # 將 jar 包添加到工作目錄, ADD target/yz-service-order-0.0.1-SNAPSHOT.jar . # 暴露端口,網(wǎng)關(guān)端口 EXPOSE 7200 # 啟動命令 ENTRYPOINT ["java", "-Dfile.encoding=UTF-8", "-jar", "/app/yz-service-order-0.0.1-SNAPSHOT.jar", "--spring.profiles.active=prod"]

注意:拉去jdk鏡像的時候要拉取匹配自己操作系統(tǒng)的,我之前寫的是
FROM openjdk:17-jdk-alpine // 這個是在windows系統(tǒng)里面寫的,現(xiàn)在環(huán)境是在mac下進行的,不知道直接在windows系統(tǒng)里面寫FROM openjdk:17會不會報錯,沒有測試
所以報下面的錯誤

3、在本地啟動Docker容器,然后直接點擊這個按鈕就可以創(chuàng)建鏡像,并啟動服務(wù)啦,這一步主要是檢驗鏡像能否創(chuàng)建成功和order服務(wù)能否啟動成功。

4、編寫mysql文件yz-bi.sql,docker創(chuàng)建數(shù)據(jù)庫的時候,初始化數(shù)據(jù)庫

5、創(chuàng)建docker-compose-env.yml文件,編寫mysql、rabbitmq、redis、nacos鏡像內(nèi)容
version: '3'
services:
mysql:
image: mysql:8.1
container_name: mysql
volumes:
# 將遠程數(shù)據(jù)映射到本地目錄/mysql/data
- ./mysql/data:/var/lib/mysql
# 初始化文件
- ./mysql:/docker-entrypoint-initdb.d
environment:
MYSQL_ROOT_PASSWORD: 123456
ports:
- "3306:3306"
restart: always
networks:
- mynetwork
redis:
image: redis:6
container_name: redis
volumes:
- ./redis/data:/data
ports:
- "6379:6379"
environment:
REQUIREPASS: 123456
restart: always
networks:
- mynetwork
rabbitmq:
image: rabbitmq:3.12.6-management
container_name: rabbitmq
ports:
- "5672:5672"
- "15672:15672"
volumes:
# 將遠程數(shù)據(jù)映射到本地目錄/rabbit/data
- ./rabbitmq/data:/var/lib/rabbitmq
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=admin
restart: always
networks:
- mynetwork
nacos:
image: nacos/nacos-server:v2.2.0-slim
container_name: nacos
volumes:
# 將遠程數(shù)據(jù)映射到本地/nacos/data目錄
- ./nacos/data:/home/nacos/data
ports:
- "8848:8848"
environment:
- MODE=standalone
- PREFER_HOSTNAME=hostname
- TZ=Asia/Shanghai
restart: always
networks:
- mynetwork
networks:
mynetwork:
編寫完直接運行即可,運行結(jié)果如下:

6、創(chuàng)建docker-compose-server.yml文件,編寫業(yè)務(wù)服務(wù)鏡像內(nèi)容
version: '3'
services:
yz-service-api-gateway:
container_name: yz-service-api-gateway
build:
context: ./yz-service-api-gateway
dockerfile: Dockerfile
networks:
- mynetwork
ports:
- "7200:7200"
yz-service-user:
container_name: yz-service-user
build:
context: ./yz-service-user
dockerfile: Dockerfile
networks:
- mynetwork
ports:
- "7300:7300"
depends_on:
- yz-service-api-gateway
yz-service-pay:
container_name: yz-service-pay
build:
context: ./yz-service-pay
dockerfile: Dockerfile
networks:
- mynetwork
ports:
- "7400:7400"
depends_on:
- yz-service-api-gateway
yz-service-promotion:
container_name: yz-service-promotion
build:
context: ./yz-service-promotion
dockerfile: Dockerfile
networks:
- mynetwork
ports:
- "7500:7500"
depends_on:
- yz-service-api-gateway
yz-service-order:
container_name: yz-service-order
build:
context: ./yz-service-order
dockerfile: Dockerfile
ports:
- "7600:7600"
networks:
- mynetwork
depends_on:
- yz-service-pay
- yz-service-promotion
- yz-service-api-gateway
yz-service-bi:
container_name: yz-service-bi
build:
context: ./yz-service-bi
dockerfile: Dockerfile
ports:
- "7700:7700"
networks:
- mynetwork
depends_on:
- yz-service-user
- yz-service-api-gateway
# 網(wǎng)絡(luò),不定義的話就是默認網(wǎng)絡(luò)
networks:
mynetwork:
7、修改配置文件
因為我的mysql、rabbitmq、redis的配置信息寫在nacos中,所以,在瀏覽器打開剛才部署的nacos控制面板,創(chuàng)建配置文件,
文件內(nèi)容如下:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
# 這塊的url換成容器名稱mysql
url: jdbc:mysql://mysql:3306/yz?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=true
username: "root"
password: "123456"
rabbitmq:
# 換成容器名稱rabbitmq
host: rabbitmq
port: 5672
username: admin
password: admin
yz:
redis:
host: redis
port: 6379
password: 123456
timeout: 3000
簡單來說,就是把你配置文件中所有的host換成對應(yīng)的容器名稱即可
8、運行docker-compose-service.yml文件即可。
最后查看docker容器面板,所有服務(wù)都啟動成功。

本項目集成了knife,通過localhost:端口號/doc.html就可以訪問,訪問結(jié)果如下:

這樣微服務(wù)項目在本地就部署成功
部署到服務(wù)器
服務(wù)器部署和本地部署類似,只要本地部署成功了,把項目方到服務(wù)器就是執(zhí)行.yml文件。
環(huán)境準(zhǔn)備
1、服務(wù)器安裝maven
2、服務(wù)器安裝Docker、Docker Compose
開始
1、將項目拷貝到服務(wù)器,比如說拷貝到/usr/local/java/yz目錄下
2、cd /usr/local/java/yz
3、執(zhí)行mvn package
4、執(zhí)行命令
# 先部署mysql、rabbitmq、nacos和redis docker compose -f docker-compose-env.yml up # 再部署服務(wù)命令 docker compose -f docker-compose-service.yml up
這樣基本就部署成功了!
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決'nacos默認secret.key配置不當(dāng)權(quán)限繞過漏洞'的問題
這篇文章主要介紹了解決“nacos默認secret.key配置不當(dāng)權(quán)限繞過漏洞“的問題,解決這個問題需要對這個key的默認值進行修改,建議不要使用明文,可以用base64,key的長度要32位以上,下面介紹一下在兩種環(huán)境下的修改方法,感興趣的朋友一起看看吧2024-01-01
windows docker環(huán)境設(shè)置注意事項
這篇文章主要介紹了windows docker環(huán)境設(shè)置注意事項的相關(guān)資料,需要的朋友可以參考下2017-01-01
淺析Docker如何創(chuàng)建自定義容器(附通用Python 3.12模板)
這篇文章主要為大家詳細介紹了Docker如何創(chuàng)建自定義容器,并附上通用Python 3.12模板,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下2025-11-11
docker實現(xiàn)將本地文件復(fù)制到docker容器內(nèi)
這篇文章主要介紹了docker實現(xiàn)將本地文件復(fù)制到docker容器內(nèi)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
解決誤刪docker目錄/var/lib/docker/overlay2,導(dǎo)致容器build失敗問題
文章介紹了Docker的overlay2存儲驅(qū)動,解釋了其分層存儲機制和節(jié)省空間的方式,刪除/var/lib/docker/overlay2目錄下的文件導(dǎo)致容器無法啟動,通過重啟Docker并使用`docker?system?prune`和`docker?system?prune?-a`命令可以清理不必要的鏡像、容器和網(wǎng)絡(luò),釋放磁盤空間2025-10-10

