1、dockerfile編寫
dockerFile(里面包含向容器添加文件,創(chuàng)建文件夾,啟動命令等關(guān)鍵,可以根據(jù)實(shí)際靈活運(yùn)用):
# 指定基礎(chǔ)鏡像
FROM eclipse/alpine_jdk8
ADD plo-coordination-service.jar /workspace/plo-coordination-service.jar
ADD lib /workspace/lib
ADD resources /workspace/resources
# 鏡像暴露的端口
# EXPOSE 8082
USER root
RUN mkdir /projects/logs
###容器啟動命令 $PARAMS可以進(jìn)行docker run傳參
ENTRYPOINT ["sh","-c"," java $PARAMS -Duser.timezone=GMT+08 -jar /workspace/plo-coordination-service.jar "]
# 設(shè)置時(shí)區(qū)
# RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
?文件位置:
?
?命令流程:
#創(chuàng)建鏡像 .表示dockerfile在當(dāng)前目錄
docker build -t plo-coordination-service:0.1 .
#查看打包好的鏡像
docker images
#啟動鏡像 PARAMS向容器內(nèi)啟動命令傳參
docker run -it -d --name plo-coordination-service -PARAMS="" -p 8082:8082 -p 8955:8955 鏡像id
#查看容器
docker ps -a
#查看運(yùn)行容器
docker ps
#查看日志
docker logs --tail 500 容器id
#進(jìn)入容器
docker exec 容器id bash
#退出容器
exit
#停止容器
docker stop 容器id
#啟動容器
docker start 容器id
#刪除容器
docker rm -f 容器id
#刪除鏡像
docker rmi -f 鏡像id
2、自動化腳本啟動
?可根據(jù)項(xiàng)目進(jìn)行微調(diào)
# 程序啟動參數(shù)
JAVA_OPTIONS= -Xms2048m -Xmx2048m -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:./logs/app-gc-%t.log -XX:+UseG1GC -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=50M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./logs/app-oom-dump.hprof -Dspring.profiles.active=dev
#源jar路徑 (此處指定到要部署的jar包所在文件夾即可)
SOURCE_PATH=/root/lawes-cases
#docker 鏡像/容器名字或者jar名字 這里都命名為這個(gè)
SERVER_NAME=plo-coordination-service
#版本號
TAG=v0.1
#分隔符
FLAG=_
#容器映射出來的端口號
#SERVER_PORT=5271
#運(yùn)行中容器id
RID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
#鏡像id
IID=$(docker images | grep "$SERVER_NAME$FLAG$TAG" | awk '{print $3}')
#這里是容器是否已經(jīng)存在的判斷,如果存在就先stop容器再rm容器
if [ -n "$RID" ]; then
echo "存在運(yùn)行中容器$SERVER_NAME, RID-$RID"
docker stop $RID
docker rm $RID
fi
#容器id
CID=$(docker ps -a | grep "$SERVER_NAME" | awk '{print $1}')
if [ -n "$CID" ]; then
echo "存在容器$SERVER_NAME, CID-$CID"
docker rm $CID
fi
#構(gòu)建docker鏡像,同樣做是否存在的判斷
if [ -n "$IID" ]; then
echo "存在$SERVER_NAME$FLAG$TAG:$TAG鏡像,IID=$IID"
docker rmi $IID
fi
echo "開始構(gòu)建鏡像"
cd $SOURCE_PATH
docker build -t $SERVER_NAME$FLAG$TAG:$TAG .
# 運(yùn)行docker容器
docker run -it -d --name plo-coordination-service -e PARAMS=$JAVA_OPTIONS -p 8082:8082 -p 8955:8955 $SERVER_NAME$FLAG$TAG:$TAG
echo "$SERVER_NAME容器創(chuàng)建完成"
?遇到坑:
linux下執(zhí)行shell腳本報(bào)錯,大概率是文本在win下編輯復(fù)制過去的,由于存在linux不支持的換行符等,導(dǎo)致腳本無法執(zhí)行,可以用下面方式測試文章來源:http://www.zghlxwxcb.cn/news/detail-731846.html
head -1 yourscriptname | od -c
如果這時(shí)候系統(tǒng)提示(證明錯誤):
0000000 # ! / b i n / s h \r \n
0000013
正常的shell腳本文件檢查后應(yīng)提示:
0000000 # ! / b i n / s h \n
0000012
解決方式轉(zhuǎn)換:
dos2unix yourscriptname
如果找不到dos2unix 命令
直接 yum install dos2unix 即可
解決方式:文章來源地址http://www.zghlxwxcb.cn/news/detail-731846.html
到了這里,關(guān)于通過dockerfile創(chuàng)建jar鏡像 + 自動化腳本啟動的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!