SpringBoot+Docker+IDEA實(shí)現(xiàn)一鍵構(gòu)建+推送、運(yùn)行、同鏡像多容器啟動(dòng)
場(chǎng)景:
由于公司項(xiàng)目需要,需要使用部署微服務(wù)項(xiàng)目,而之前都是使用tomcat部署,操作十分繁瑣。最近正好在學(xué)習(xí)Docker,利用Docker容器做部署嘗試
需求:
- 使用Docker部署服務(wù)
- 支持idea插件,一鍵操作構(gòu)建、推送鏡像、運(yùn)行
- 單個(gè)鏡像需根據(jù)不同端口部署多個(gè)容器
- 日志持久化
必要軟件
服務(wù)器(我的版本為CentOS:7.9)
- Docker(需要開通遠(yuǎn)程訪問,正式環(huán)境請(qǐng)使用證書加密,我這里測(cè)試用無加密)
- Harbor 鏡像倉(cāng)庫(可選)
開發(fā)端
- Docker Desktop (支持本地運(yùn)行docker-compose,如果不用docker-compose插件可以不用) 下載地址
- 桌面版docker必要插件 下載地址
- docker-comopse 下載地址
- IDEA(廢話)docker插件 (可選,在idea插件市場(chǎng)下載,名字就叫Docker)
在idea中配置docker

目錄結(jié)構(gòu):

父項(xiàng)目配置(關(guān)鍵配置):
pom.xml
<properties>
<!-- docker主機(jī)ip(這里填寫自己docker所在地址) -->
<docker.host>192.168.10.10</docker.host>
<!-- harbor倉(cāng)庫地址(可選,構(gòu)建鏡像后自動(dòng)上傳到該倉(cāng)庫) -->
<docker.repostory>${docker.host}</docker.repostory>
<!-- docker遠(yuǎn)程地址, 如果是https協(xié)議則將http換成https即可 -->
<docker.remote>http://${docker.host}:2375</docker.remote>
<!--項(xiàng)目名,需要和Harbor中的項(xiàng)目名稱保持一致 -->
<docker.registry.name>library</docker.registry.name>
<!-- 默認(rèn)端口 -->
<port>8080</port>
</properties>
...
<build>
<pluginManagement>
<plugins>
<!--構(gòu)建鏡像-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.0</version>
<configuration>
<!--Maven 的配置文件 setting.xml 中增加相關(guān) server 配置,主要配置 Docker registry用戶認(rèn)-->
<serverId>docker-harbor</serverId>
<dockerHost>${docker.remote}</dockerHost>
<!-- 鏡像名格式: 倉(cāng)庫地址/倉(cāng)庫項(xiàng)目名/當(dāng)前項(xiàng)目名 (按需修改) -->
<imageName>${docker.repostory}/${docker.registry.name}/${project.artifactId}</imageName>
<baseImage>openjdk:8u282-jdk</baseImage>
<maintainer>作者</maintainer>
<env>
<PORT>8080</PORT>
<TZ>Asia/Shanghai</TZ>
</env>
<!-- 這里的ln和后面的操作是保證時(shí)間同步 -->
<runs>mkdir -p /epark/logs && ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone</runs>
<volumes>/epark</volumes>
<!--suppress UnresolvedMavenProperty -->
<entryPoint>["java","-Djava.security.egd=file:/dev/./urandom","-jar","${project.build.finalName}.jar","--server.port=${PORT}"]
</entryPoint>
<!-- 這里是倉(cāng)庫地址,不需要可以刪除 -->
<registryUrl>http://${docker.repostory}</registryUrl>
<!-- 這里指定是否構(gòu)建成功后自動(dòng)推送到倉(cāng)庫,不需要可以刪除 -->
<pushImage>true</pushImage>
<resources>
<resource>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
<!-- docker-compose的maven插件 -->
<plugin>
<groupId>com.dkanejs.maven.plugins</groupId>
<artifactId>docker-compose-maven-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<!-- 路徑為: 當(dāng)前項(xiàng)目的上一級(jí)(也就是父項(xiàng)目),所以不支持二級(jí)以上的子項(xiàng)目 -->
<composeFile>${project.basedir}/../docker-compose.yml</composeFile>
<apiVersion>1.22</apiVersion>
<host>${docker.remote}</host>
<envVars>
<!-- 默認(rèn)端口 -->
<port>${port}</port>
<host>${docker.repostory}</host>
<name>${project.build.finalName}</name>
<!-- 自定義項(xiàng)目名,支持單鏡像啟動(dòng)多容器的關(guān)鍵 -->
<COMPOSE_PROJECT_NAME>${project.build.finalName}-${port}</COMPOSE_PROJECT_NAME>
<!-- 這里是證書配置,如果開啟了docker證書,則需要配置 -->
<!-- <DOCKER_TLS_VERIFY>1</DOCKER_TLS_VERIFY>-->
<!-- <DOCKER_CERT_PATH>D:\docker-ca</DOCKER_CERT_PATH>-->
</envVars>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
注意,${project.artifactId}引用的項(xiàng)目構(gòu)件ID只能是小寫
docker-compose.yml
version: '3.4'
services:
eparking:
# 鏡像
image: ${host}/library/${name}:latest
# 容器名
container_name: ${name}-${port}
# 開機(jī)自啟(自選)
#restart: always
# 環(huán)境配置
environment:
# 端口
- PORT=${port}
# 端口映射
ports:
- "${port}:${port}"
# 卷映射,這里日志根據(jù)自己項(xiàng)目輸出位置調(diào)整
volumes:
- "/log/${name}/${port}:/logs/"
配置了倉(cāng)庫的話需要配置Maven的settings.xml的賬號(hào)密碼
<servers>
<server>
<id>docker-harbor</id>
<username>倉(cāng)庫用戶名</username>
<password>倉(cāng)庫密碼</password>
</server>
</servers>
子項(xiàng)目配置(關(guān)鍵配置)
pom.xml
<!-- 這里配置的端口會(huì)傳入父項(xiàng)目,最終傳入docker-compose.yml和Dockerfile文件 -->
<!-- 如果需要單個(gè)鏡像啟動(dòng)多個(gè)容器,改這里的端口再啟動(dòng)就可以了 -->
<properties>
<port>8082</port>
</properties>
...
<build>
<plugins>
<!-- docker插件 -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
</plugin>
<!-- docker-compose的maven插件,由于docker插件不支持運(yùn)行,所以單獨(dú)安裝了 -->
<plugin>
<groupId>com.dkanejs.maven.plugins</groupId>
<artifactId>docker-compose-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
如果一切順利maven中會(huì)出現(xiàn)docker和docker-compse插件
先執(zhí)行docker:build構(gòu)建,再執(zhí)行docker-compose:up啟動(dòng)

成功后可以查看docker容器啟動(dòng)情況了,我這里使用的是docker插件

到此這篇關(guān)于SpringBoot+Docker+IDEA實(shí)現(xiàn)一鍵構(gòu)建+推送、運(yùn)行、同鏡像多容器啟動(dòng)的文章就介紹到這了,更多相關(guān)SpringBoot+Docker+IDEA一鍵構(gòu)建內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java?Rabbitmq中四種集群架構(gòu)的區(qū)別詳解
這篇文章主要為大家詳細(xì)介紹了Java?Rabbitmq中四種集群架構(gòu)的區(qū)別,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-02-02
關(guān)于MyBatis中SqlSessionFactory和SqlSession簡(jiǎn)解
這篇文章主要介紹了MyBatis中SqlSessionFactory和SqlSession簡(jiǎn)解,具有很好的參考價(jià)值,希望大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
Java中基于注解的代碼生成工具M(jìn)apStruct映射使用詳解
MapStruct?作為一個(gè)基于注解的代碼生成工具,為我們提供了一種更加優(yōu)雅、高效的解決方案,本文主要為大家介紹了它的具體使用,感興趣的可以了解下2025-02-02
SpringMVC實(shí)現(xiàn)登錄與注冊(cè)功能的詳細(xì)步驟
本文介紹了如何通過Maven配置依賴,創(chuàng)建前端登錄和注冊(cè)頁面,并實(shí)現(xiàn)后端邏輯,詳細(xì)步驟包括配置文件、創(chuàng)建User類、配置中文過濾器及DispatcherServlet,并使用Spring?MVC和JQuery處理前端請(qǐng)求,需要的朋友可以參考下2024-11-11
SpringCloud微服務(wù)架構(gòu)實(shí)戰(zhàn)之微服務(wù)治理功能的實(shí)現(xiàn)
這篇文章主要介紹了SpringCloud微服務(wù)架構(gòu)實(shí)戰(zhàn)之微服務(wù)治理,這些治理工具主要包括服務(wù)的注冊(cè)與發(fā)現(xiàn)、負(fù)載均衡管理、動(dòng)態(tài)路由、服務(wù)降級(jí)和故障轉(zhuǎn)移、鏈路跟蹤、服務(wù)監(jiān)控等,需要的朋友可以參考下2022-02-02

