Docker實(shí)現(xiàn)發(fā)布一個(gè)springboot項(xiàng)目
1、新建SpringBootDemo項(xiàng)目并打包
一般情況下,我們通過(guò)執(zhí)行:
maven clean maven compile maven package
項(xiàng)目在本地會(huì)產(chǎn)生target目錄,下生成了一個(gè)項(xiàng)目jar包。
拿一個(gè)很簡(jiǎn)單的demo作為例子:

頁(yè)面:

2、使用Dockerfile打包(基礎(chǔ)用法)
在與target同級(jí),也就是項(xiàng)目根目錄下新建一個(gè)文件file命名為: Dockerfile
以下基本參數(shù):
FROM openjdk:8 # 指定可以被宿主機(jī)文件掛載目錄 VOLUME /opt/demo/ # 指定路徑 WORKDIR /opt/demo/ # 添加 springboot-web-demo-0.0.1-SNAPSHOT.jar 包到workdir 以 web.jar保存 ADD ["springboot-web-demo-0.0.1-SNAPSHOT.jar", "web.jar"] EXPOSE 8090 ENTRYPOINT ["java", "-jar", "/web.jar"]
然后使用遠(yuǎn)程工具(我用的Xftp7),將jar包和Dockerfile文件拖到Linux服務(wù)器新建的目錄下:

命令行進(jìn)入該目錄下執(zhí)行鏡像制作:
docker build -t web:test . # 鏡像名:tag 當(dāng)下目錄
查看鏡像:
docker images

然后啟動(dòng)運(yùn)行:
docker run -d -p 8090:8090 --name test web
映射端口到外界;
容器命名為test,鏡像為生成的web

瀏覽器訪問(wèn):
失敗。
(我項(xiàng)目端口是8080,暴露8090,不對(duì)應(yīng))
這里注意端口的映射問(wèn)題!
- 項(xiàng)目application.yml 中端口 要和 EXPOSE 端口保持一致;
- 啟動(dòng)容器時(shí) -p 宿主機(jī)端口 : 容器端口,宿主機(jī)端口可以任意指定,容器端口即EXPOSE的端口。
否則容器可以正常啟動(dòng),但是端口未暴露,訪問(wèn)時(shí)仍然訪問(wèn)項(xiàng)目自己的端口(在linux下,外界訪問(wèn)不到)
重新修改dockerfile并打包鏡像運(yùn)行后:
curl ip:port

瀏覽器訪問(wèn):

總結(jié):
1、本地maven 打包 + 創(chuàng)建Dockerfile文件2、上傳到服務(wù)器下Docker環(huán)境3、制作鏡像4、運(yùn)行
可以看出,貌似并沒(méi)有為我們的項(xiàng)目部署帶來(lái)什么便利??jī)H僅這樣,無(wú)法體現(xiàn)docker的優(yōu)勢(shì)。
進(jìn)一步maven源碼打包法
在Linux docker環(huán)境下,可以安裝好git、maven,利用:
- ① git拉取倉(cāng)庫(kù)代碼;
- ② mvn打包命令就可以去掉步驟一、二;
- ③ 制作鏡像
- ④ run運(yùn)行容器
但是仍然不夠簡(jiǎn)單。
如果環(huán)境中沒(méi)有安裝maven,請(qǐng)手動(dòng)安裝,腳本如下:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # yum-config-manager --add-repo http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo # yum-config-manager --enable epel-apache-maven // 安裝maven # yum install -y apache-maven
1、上傳原碼到docker環(huán)境中(一般是git/svn直接拉取源碼)

2、maven打包
mvn clean package

生成的jar在同級(jí)target目錄下

3、執(zhí)行docker命令生成鏡像
dockerfile文件內(nèi)容

命令創(chuàng)建鏡像

3、更進(jìn)一步(maven插件打包)
即適用于生產(chǎn)環(huán)境下,IDEA代碼開發(fā)完畢,利用docker-maven插件直接一行命令編譯打包生成鏡像并推送到Docker主機(jī)環(huán)境下。
之后只需要Docker下運(yùn)行 run命令即可運(yùn)行項(xiàng)目。
docker-maven-plugin
里面集成了Docker客戶端,通過(guò)docker的api接口發(fā)送docker命令。
spring-boot-maven-plugin
這個(gè)是Spring Boot官方的插件,在2.x的某個(gè)版本(2.3.x)提供了Docker鏡像構(gòu)建能力。
下面,演示一個(gè)maven插件:docker-maven-plugin用法,來(lái)實(shí)現(xiàn)。
前提條件
1、需要我們windows上安裝docker服務(wù)
2、需要docker服務(wù)配置http倉(cāng)庫(kù)接口,windows上docker服務(wù)配置如下(傳統(tǒng)配置模式無(wú)權(quán)限修改文件)
本地環(huán)境配置
1、windows上安裝docker-toolbox,傻瓜安裝即可。
2、打開Docker Quickstart Terminal終端,等待初始始化完成后。
3、輸入docker-machine env命令,返回docker服務(wù)的api接口和證書位置,如下:

4、輸入docker-machine ssh命令,進(jìn)入sh環(huán)境中,配置http倉(cāng)庫(kù)路徑:

修改文件配置(當(dāng)前用戶是docker不是root,要sudo提升至root):
sudo vi /var/lib/boot2docker/profile

5、修改完成,保存。重啟docker服務(wù)
sudo /etc/init.d/docker restart

項(xiàng)目環(huán)境配置maven插件
在我們的工程pom中加入docker-maven-plugin插件的配置,如下:

1、其中,imageName配置鏡像的全路徑名,即指定私庫(kù)的名稱
2、dockerHost和dockerCertPath對(duì)應(yīng)配置上一步中docker的api和證書值

打包運(yùn)行
以idea為例,整個(gè)項(xiàng)目裝配完成,只需要操作maven的一二三步驟,即直接鏡像進(jìn)入倉(cāng)庫(kù),整個(gè)過(guò)程極為便利。

還可以省去多次點(diǎn)擊,直接一句mvn命令完成打包上傳:
mvn clean package docker:build -DpushImage


校驗(yàn)鏡像倉(cāng)庫(kù)結(jié)果

至此,我們的服務(wù)器環(huán)境,已經(jīng)可以直接運(yùn)行docker run 鏡像啟動(dòng)容器了。
4、總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- SpringBoot+Docker+K8s云原生部署全流程(從零到發(fā)布)
- dockerfile發(fā)布springboot項(xiàng)目實(shí)踐
- SpringBoot打包docker鏡像發(fā)布的詳細(xì)步驟
- 使用Docker部署打包發(fā)布springboot項(xiàng)目
- IDEA2021.2配置docker如何將springboot項(xiàng)目打成鏡像一鍵發(fā)布部署
- docker-compose鏡像發(fā)布springboot項(xiàng)目的流程分析
- centos下docker安裝及springboot遠(yuǎn)程發(fā)布docker的方法
- IDEA 通過(guò)docker插件發(fā)布springboot項(xiàng)目的詳細(xì)教程
相關(guān)文章
Dockerfile中將多行配置、腳本寫入文件的4種實(shí)用方法
本文總結(jié)了Dockerfile中將多行配置、腳本寫入文件的4種實(shí)用寫法,重點(diǎn)介紹了在舊版Docker不支持heredoc語(yǔ)法的問(wèn)題,并基于實(shí)測(cè)提供了可直接復(fù)制的穩(wěn)定示例,需要的朋友可以參考下2026-04-04
Docker中搭建配置Git環(huán)境的過(guò)程
工作中遇到了需要在Docker環(huán)境中操作GitLab倉(cāng)庫(kù)的場(chǎng)景,需要事先在Docker中搭好Git環(huán)境,但是很多朋友不是很清楚Docker配置Git環(huán)境的過(guò)程,今天通過(guò)本文給大家詳細(xì)介紹下,需要的朋友參考下吧2021-08-08
詳解java項(xiàng)目打包docker鏡像的幾種方式
本文主要介紹了詳解java項(xiàng)目打包docker鏡像的幾種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
云原生使用Docker部署Firefox瀏覽器詳細(xì)圖文教程
下面這篇文章主要給大家介紹了關(guān)于云原生使用Docker部署Firefox瀏覽器的相關(guān)資料,這對(duì)于一些特殊的測(cè)試場(chǎng)景非常有用,例如需要在不同版本的瀏覽器中進(jìn)行測(cè)試,需要的朋友可以參考下2024-04-04
docker基礎(chǔ)知識(shí)之掛載本地目錄的方法
本篇文章主要介紹了docker基礎(chǔ)知識(shí)之掛載本地目錄的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04
使用Docker安裝部署MySQL和Redis的詳細(xì)過(guò)程
這篇文章主要介紹了使用Docker安裝部署MySQL和Redis,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06
Docker配置文件docker-compose.yml使用指南
本文主要介紹了Docker配置文件docker-compose.yml使用指南,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
Docker應(yīng)用之daemon.json使用詳解
用戶解決Docker部署Spring Boot時(shí)JDK8依賴下載失敗問(wèn)題,發(fā)現(xiàn)默認(rèn)無(wú)daemon.json配置文件,手動(dòng)創(chuàng)建并設(shè)置國(guó)內(nèi)鏡像源地址(如阿里云),重啟Docker服務(wù)后成功,需注意配置文件路徑為/etc/docker/daemon.json2025-09-09

