Docker?快速部署Springboot項(xiàng)目超詳細(xì)最新版
Docker 快速部署Springboot項(xiàng)目
1、項(xiàng)目準(zhǔn)備
1.1 新建一個springboot項(xiàng)目
1.2 打包
mvn clean package -Dmaven.test.skip=true
2、編寫Dockerfile文件
# Docker image for springboot file run # VERSION 0.0.1 # Author: # 基礎(chǔ)鏡像使用java FROM openjdk:8 # 作者 MAINTAINER laihx # VOLUME 指定了臨時文件目錄為/tmp。 # 其效果是在主機(jī) /var/lib/docker 目錄下創(chuàng)建了一個臨時文件,并鏈接到容器的/tmp VOLUME /tmp # 將jar包添加到容器中并更名為xx.jar ADD demo.jar test.jar # 運(yùn)行jar包 RUN bash -c 'touch /test.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/test.jar"]
將jar包和Dockerfile文件放在上傳到同一空目錄下

3、執(zhí)行鏡像打包
sudo docker build . -t test-demo:v1.0

查看鏡像
docker images

java8鏡像:啟動springboot需要jdk的支持,所以直接拉取java8鏡像即可docker pull java:8,拉取結(jié)束可以使用docker images查看是否成功
docker pull java:8 docker images

4、啟動鏡像
# -d參數(shù)是讓容器后臺運(yùn)行 # 8087為部署后實(shí)際代理端口,8089為程序的端口 sudo docker run -d -p 8087:8089 --name test-demo test-demo:v1.0

5、測試結(jié)果

6、動態(tài)查看日志
docker logs -f --tail=100 test-demo

擴(kuò)展:SpringBoot+Docker+IDEA 實(shí)現(xiàn)一鍵構(gòu)建+推送、運(yùn)行、同鏡像多容器啟動(推薦)
場景:
由于公司項(xiàng)目需要,需要使用部署微服務(wù)項(xiàng)目,而之前都是使用tomcat部署,操作十分繁瑣。最近正好在學(xué)習(xí)Docker,利用Docker容器做部署嘗試
需求:
- 使用Docker部署服務(wù)
- 支持idea插件,一鍵操作構(gòu)建、推送鏡像、運(yùn)行
- 單個鏡像需根據(jù)不同端口部署多個容器
- 日志持久化
必要軟件
服務(wù)器(我的版本為CentOS:7.9)
- Docker(需要開通遠(yuǎn)程訪問,正式環(huán)境請使用證書加密,我這里測試用無加密)
- Harbor 鏡像倉庫(可選)
開發(fā)端
- Docker Desktop (支持本地運(yùn)行docker-compose,如果不用docker-compose插件可以不用)下載地址
- 桌面版docker必要插件下載地址
- docker-comopse 下載地址
- IDEA(廢話)
- docker插件 (可選,在idea插件市場下載,名字就叫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倉庫地址(可選,構(gòu)建鏡像后自動上傳到該倉庫) -->
<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>
<!-- 鏡像名格式: 倉庫地址/倉庫項(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和后面的操作是保證時間同步 -->
<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>
<!-- 這里是倉庫地址,不需要可以刪除 -->
<registryUrl>http://${docker.repostory}</registryUrl>
<!-- 這里指定是否構(gòu)建成功后自動推送到倉庫,不需要可以刪除 -->
<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)目的上一級(也就是父項(xiàng)目),所以不支持二級以上的子項(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)目名,支持單鏡像啟動多容器的關(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/"配置了倉庫的話需要配置Maven的settings.xml的賬號密碼
<servers>
<server>
<id>docker-harbor</id>
<username>倉庫用戶名</username>
<password>倉庫密碼</password>
</server>
</servers>子項(xiàng)目配置(關(guān)鍵配置)
pom.xml
<!-- 這里配置的端口會傳入父項(xiàng)目,最終傳入docker-compose.yml和Dockerfile文件 -->
<!-- 如果需要單個鏡像啟動多個容器,改這里的端口再啟動就可以了 -->
<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中會出現(xiàn)docker和docker-compse插件
先執(zhí)行docker:build構(gòu)建,再執(zhí)行docker-compose:up啟動

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

好了,這功能花費(fèi)了我很長時間,最終實(shí)現(xiàn)了這些功能??赡苓€有些小細(xì)節(jié)沒展示出來,可以盡管提問
到此這篇關(guān)于Docker 快速部署Springboot項(xiàng)目超詳細(xì)最新版的文章就介紹到這了,更多相關(guān)Docker 部署Springboot項(xiàng)目內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java接口統(tǒng)一樣式返回模板的實(shí)現(xiàn)
這篇文章主要介紹了Java接口統(tǒng)一樣式返回模板的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
springboot項(xiàng)目不同環(huán)境的配置讀取方式
SpringBoot支持application.properties、application.yml、application.yaml三種配置文件類型,可同時存在并合并配置,配置文件的讀取優(yōu)先級為:application.properties > application.yml > application.yaml,不同位置的相同類型配置文件2024-11-11
詳解使用Mybatis-plus + velocity模板生成自定義的代碼
這篇文章主要介紹了詳解使用Mybatis-plus + velocity模板生成自定義的代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Quarkus集成Dubbo服務(wù)Rpc遠(yuǎn)程通訊框架整合
這篇文章主要為大家介紹了Quarkus集成Dubbo服務(wù)Rpc遠(yuǎn)程通訊框架的整合,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-02-02
JAVA String轉(zhuǎn)化成java.sql.date和java.sql.time方法示例
這篇文章主要給大家分享了關(guān)于JAVA String轉(zhuǎn)化成java.sql.date和java.sql.time的方法,文中給出了詳細(xì)的示例代碼,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-03-03

