中國企業(yè)500強(qiáng)排名一覽表seo技術(shù)平臺(tái)
把SpringBoot項(xiàng)目打包成Docker鏡像有兩種方案:
全自動(dòng)化:先打好docker鏡像倉庫,然后在項(xiàng)目的maven配置中配置好倉庫的地址,在項(xiàng)目里配置好Dockerfile文件,這樣可以直接在idea中打包好后自動(dòng)上傳到鏡像倉庫,然后去服務(wù)器上啟動(dòng)這個(gè)鏡像就行了。
半自動(dòng)化:半自動(dòng)化又有兩種方案,一種是Dockerfile文件放在項(xiàng)目里面,一種是放在項(xiàng)目外面。
放在項(xiàng)目里面:springboot pom.xml中配置maven插件支持,打包時(shí)會(huì)使用項(xiàng)目里面的dockerfile,如果沒配置插件支持會(huì)報(bào)錯(cuò)找不到dockerfile文件
放在項(xiàng)目外面:springboot還是打包成普通的jar,然后把這個(gè)jar上傳到服務(wù)器,同時(shí)在服務(wù)器創(chuàng)建一個(gè)Dockerfile文件,執(zhí)行docker build命令,把這個(gè)jar構(gòu)建成一個(gè)docker鏡像,然后通過鏡像執(zhí)行。
一般來說用半自動(dòng)化比全自動(dòng)化用的多,本文用的算是半自動(dòng)化方式的第二種,總體來說有一下幾個(gè)步驟:
創(chuàng)建docoerfile:
(1)在項(xiàng)目里新建一個(gè)名為Dockerfile的文件
編寫Dockerfile:
#基礎(chǔ)鏡像
FROM openjdk:8-jre#發(fā)布到網(wǎng)上時(shí)只會(huì)把jar包和Dockerfile發(fā)布上去
# 把當(dāng)前目錄下的jar包拷貝進(jìn)docker鏡像里
COPY *.jar /ftdocker.jar#CMD命令用于指定這個(gè)容器啟動(dòng)的時(shí)候要運(yùn)行的命令(CMD一行只執(zhí)行一個(gè)命令,可以寫多個(gè)CMD)
#地址映射
CMD ["--server.port=8088"]#對(duì)外暴露端口
EXPOSE 8088# ENTRYPOINT命令用于指定這個(gè)容器啟動(dòng)的時(shí)候要運(yùn)行的命令(可以追加命令)
#執(zhí)行命令
ENTRYPOINT ["java", "-Xmx512m", "-jar", "/ftdocker.jar"]
在服務(wù)器里的你想存放項(xiàng)目的位置新建文件夾,用于存放Java項(xiàng)目
把打包好的jar包和Dockerfile文件上傳到服務(wù)器里
使用Dockerfile打包出一個(gè)docker鏡像
#選項(xiàng)及解釋
-t的t是tag,表示生成的鏡像的名稱和版本號(hào)
.表示當(dāng)前構(gòu)建時(shí)上下文的路徑為當(dāng)前目錄
docker build -t todocker:0.1 .
效果圖:
如果指定(FROM java:8),Jenkins構(gòu)建服務(wù),Dockerfile報(bào)錯(cuò):manifest for java:8-jre not found: manifest unknown: manifest unknown
1、問題描述
Jenkins構(gòu)建服務(wù),控制臺(tái)報(bào)錯(cuò):
manifest for java:8-jre not found: manifest unknown: manifest unknown
1、截圖:
2、解決問題
這是由于Docker官方已經(jīng)棄用java8鏡像,想使用jdk1.8的話,可以使用openjdk。
解決辦法是,將Dockerfile改為 FROM openjdk:8-jre
FROM openjdk:8-jreRUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo "Asia/Shanghai" > /etc/timezoneARG JAR_FILE
COPY ${JAR_FILE} /app.jarENTRYPOINT ["java", "-Xmx512m", "-Djava.security.egd=file:/dev/./urandom", "-Ddruid.mysql.usePingMethod=false", "-jar", "/app.jar"]
CMD ["--spring.profiles.active=prod"]
使用以下命令查看鏡像是否構(gòu)建成功
docker images
效果圖:?
使用以下命令利用我們新建的docker鏡像來啟動(dòng)docker容器
#選項(xiàng)及解釋
-d表示容器在后臺(tái)運(yùn)行
-P表示隨機(jī)指定端口或者-p指定端口
--name="name"參數(shù)用于給容器取名字 ,用來區(qū)分容器
?
docker run -d -p?8012:8012 --name 容器名稱 鏡像名稱:版本
效果圖:
訪問docker容器內(nèi)的項(xiàng)目
(1)因?yàn)橛?P參數(shù)隨機(jī)指定了docker的端口來映射docker容器內(nèi)的SpringBoot項(xiàng)目的8080端口,導(dǎo)致不知道docker隨機(jī)指定的是哪個(gè)端口,所以使用以下命令查看隨機(jī)指定的docker端口是什么(如果在啟動(dòng)docker容器時(shí)指定了端口可以不用進(jìn)行這一步操作)
docker ps
效果圖:?
(2)使用curl命令來訪問docker容器內(nèi)的SpringBoot項(xiàng)目,出現(xiàn)404的字眼,證明SpringBoot項(xiàng)目啟動(dòng)成功
curl localhost:docker隨機(jī)指定的端口
效果圖?
(3)使用curl命令調(diào)用SpringBoot項(xiàng)目的接口,發(fā)現(xiàn)能調(diào)用成功
curl localhost:docker隨機(jī)指定的端口/接口路徑
效果圖:?
其他問題:
這個(gè)錯(cuò)是某個(gè)容器已經(jīng)存在了 可以用下面命令進(jìn)行停止 并刪除 最后啟動(dòng)
docker stop name/image_id
docker rm name/image_id
通過標(biāo)簽刪除鏡像
通過如下兩個(gè)都可以刪除鏡像:
docker rmi [image]
或者:
docker image rm [image]
強(qiáng)制刪除:
docker rmi -f image_id
容器操作命令匯總: 參考鏈接
停止容器:
docker stop hello1
啟動(dòng)已經(jīng)停止容器:
docker start hello1
進(jìn)入容器:
docker exec -it hello1 /bin/bash
刪除容器:
docker rm -f hello1
幫助命令:
docker --help
參考鏈接:鏈接1,鏈接2