Docker?快速部署Springboot項(xiàng)目超詳細(xì)最新版
Docker 快速部署Springboot項(xiàng)目
1、項(xiàng)目準(zhǔn)備
1.1 新建一個(gè)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 指定了臨時(shí)文件目錄為/tmp。 # 其效果是在主機(jī) /var/lib/docker 目錄下創(chuàng)建了一個(gè)臨時(shí)文件,并鏈接到容器的/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鏡像:?jiǎn)?dòng)springboot需要jdk的支持,所以直接拉取java8
鏡像即可docker pull java:8
,拉取結(jié)束可以使用docker images
查看是否成功
docker pull java:8 docker images
4、啟動(dòng)鏡像
# -d參數(shù)是讓容器后臺(tái)運(yùn)行 # 8087為部署后實(shí)際代理端口,8089為程序的端口 sudo docker run -d -p 8087:8089 --name test-demo test-demo:v1.0
5、測(cè)試結(jié)果
6、動(dòng)態(tài)查看日志
docker logs -f --tail=100 test-demo
擴(kuò)展: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(需要開(kāi)通遠(yuǎn)程訪問(wèn),正式環(huán)境請(qǐng)使用證書加密,我這里測(cè)試用無(wú)加密)
- Harbor 鏡像倉(cāng)庫(kù)(可選)
開(kāi)發(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)庫(kù)地址(可選,構(gòu)建鏡像后自動(dòng)上傳到該倉(cāng)庫(kù)) --> <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)庫(kù)地址/倉(cāng)庫(kù)項(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)庫(kù)地址,不需要可以刪除 --> <registryUrl>http://${docker.repostory}</registryUrl> <!-- 這里指定是否構(gòu)建成功后自動(dòng)推送到倉(cāng)庫(kù),不需要可以刪除 --> <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> <!-- 這里是證書配置,如果開(kāi)啟了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} # 開(kāi)機(jī)自啟(自選) #restart: always # 環(huán)境配置 environment: # 端口 - PORT=${port} # 端口映射 ports: - "${port}:${port}" # 卷映射,這里日志根據(jù)自己項(xiàng)目輸出位置調(diào)整 volumes: - "/log/${name}/${port}:/logs/"
配置了倉(cāng)庫(kù)的話需要配置Maven的settings.xml的賬號(hào)密碼
<servers> <server> <id>docker-harbor</id> <username>倉(cāng)庫(kù)用戶名</username> <password>倉(cāng)庫(kù)密碼</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插件
好了,這功能花費(fèi)了我很長(zhǎng)時(shí)間,最終實(shí)現(xiàn)了這些功能??赡苓€有些小細(xì)節(jié)沒(méi)展示出來(lái),可以盡管提問(wèn)
到此這篇關(guān)于Docker 快速部署Springboot項(xiàng)目超詳細(xì)最新版的文章就介紹到這了,更多相關(guān)Docker 部署Springboot項(xiàng)目?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- idea快速實(shí)現(xiàn)將SpringBoot項(xiàng)目打包Docker鏡像并部署
- 在Idea中使用Docker部署SpringBoot項(xiàng)目的詳細(xì)步驟
- 淺析SpringBoot打包上傳到docker并實(shí)現(xiàn)多實(shí)例部署(IDEA版)
- 基于idea把springboot項(xiàng)目部署到docker
- java通過(guò)Idea遠(yuǎn)程一鍵部署springboot到Docker詳解
- Docker部署SpringBoot應(yīng)用的實(shí)現(xiàn)步驟
- 詳解docker部署SpringBoot及替換jar包的方法
相關(guān)文章
使用shardingsphere對(duì)SQLServer坑的解決
本文主要介紹了使用shardingsphere對(duì)SQLServer坑的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03Java基于正則表達(dá)式實(shí)現(xiàn)xml文件的解析功能詳解
這篇文章主要介紹了Java基于正則表達(dá)式實(shí)現(xiàn)xml文件的解析功能,結(jié)合實(shí)例形式分析了java使用正則表達(dá)式針對(duì)xml文件節(jié)點(diǎn)的相關(guān)操作技巧,需要的朋友可以參考下2017-08-08SpringIOC refresh()初始化代碼實(shí)例
這篇文章主要介紹了SpringIOC refresh()初始化代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03詳解如何在Java中重寫equals()和hashCode()方法
在 Java 中,equals() 和 hashCode() 方法是 Object 類中定義的重要方法,它們用于比較對(duì)象的相等性以及計(jì)算對(duì)象的哈希值,本文將詳細(xì)介紹如何在 Java 中重寫 equals() 和 hashCode() 方法,并討論其最佳實(shí)踐,需要的朋友可以參考下2024-08-08SpringBoot?整合?Elasticsearch?實(shí)現(xiàn)海量級(jí)數(shù)據(jù)搜索功能
這篇文章主要介紹了SpringBoot?整合?Elasticsearch?實(shí)現(xiàn)海量級(jí)數(shù)據(jù)搜索,本文主要圍繞?SpringBoot?整合?ElasticSearch?接受數(shù)據(jù)的插入和搜索使用技巧,在實(shí)際的使用過(guò)程中,版本號(hào)尤其的重要,不同版本的?es,對(duì)應(yīng)的?api?是不一樣,需要的朋友可以參考下2022-07-07Java中網(wǎng)絡(luò)IO的實(shí)現(xiàn)方式(BIO、NIO、AIO)介紹
這篇文章主要介紹了Java中網(wǎng)絡(luò)IO的實(shí)現(xiàn)方式(BIO、NIO、AIO)介紹的相關(guān)資料,需要的朋友可以參考下2017-03-03