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