1.項(xiàng)目打包并上傳
把自己的java項(xiàng)目打成jar包
然后上傳至服務(wù)器,直接cp到/opt/java_app_docker目錄下
2.編寫 Dockerfile文件
在相同目錄下創(chuàng)建Dockerfile
vim Dockerfile
然后輸入
# 拉取jdk8作為基礎(chǔ)鏡像
FROM openjdk:8
# 作者
MAINTAINER 123
# 添加jar到鏡像并命名為text.jar
ADD text.jar /app/text.jar
# 鏡像啟動(dòng)后暴露的端口
EXPOSE 8091
# jar運(yùn)行命令,參數(shù)使用逗號(hào)隔開
ENTRYPOINT ["java","-jar","/app/text.jar"]
3.創(chuàng)建jar掛載目錄
在/opt/java_app_docker目錄下創(chuàng)建app文件夾
`mkdir app'
把你的jar包c(diǎn)p一份到宿主機(jī)/opt/java_app_docker/app目錄, 這里一定要在app目錄下存放你的jar,不然容器啟動(dòng)會(huì)失敗难审,找不到j(luò)ar
4.使用docker命令打包
docker build -t text .
text表示鏡像名稱
最后的.表示Dockerfile在當(dāng)前目錄
打包完成后使用docker images查看鏡像
5.創(chuàng)建并運(yùn)行容器
docker run -d --name text -p 8091:8091 -v /opt/java_app_docker/app:/app text
命令解釋如下:
命令 | 功能 |
---|---|
docker run | 創(chuàng)建并啟動(dòng)容器 |
–name | 指定一個(gè)容器名稱 |
-d | 后臺(tái)運(yùn)行容器瘫拣,并返回容器ID |
-p | 指定端口 |
user | 需要啟動(dòng)的鏡像(名稱+版本)不指定版本默認(rèn)最新版本 |
-v | 掛載目錄到宿主機(jī) |
: | 符號(hào)左邊為宿主機(jī),右邊為容器空間 |
啟動(dòng)完成,查看啟動(dòng)日志:
docker logs -f -t text
ps:
停止容器:
docker stop text
刪除容器:
docker rm text
刪除鏡像:
docker rmi text
6.測試
這樣的方式啟動(dòng)完成之后告喊,更新服務(wù)時(shí)只需要更換宿主機(jī)/opt/java_app_docker/app目錄下的jar包麸拄,然后重啟容器即可實(shí)現(xiàn)更新派昧,省略了每次更新刪除打包創(chuàng)建等過程
7.jdk鏡像部署
首先docker要有jdk的鏡像
然后:
創(chuàng)建并運(yùn)行容器(直接基于jdk鏡像創(chuàng)建容器):
docker run -d --name user -p 8091:8091-v /opt/java_app_docker/app:/app java:8 /usr/bin/java -jar /app/text.jar
或者(啟動(dòng)方式取決于jdk版本)
docker run -d --name user -p 8001:8001 -v /opt/java_app_docker/app:/app openjdk:8 java -jar /app/text.jar
這樣的方式省略了創(chuàng)建Dockerfile并把jar打包成鏡像的操作,無論多少個(gè)服務(wù)拢切,只要有jdk鏡像蒂萎,一條命令搞定!比如現(xiàn)在我需要增加gateway服務(wù)淮椰,那就把gateway.jar放在任意目錄下五慈,直接執(zhí)行:
docker run -d --name user -p {任意外部端口}:{任意容器端口} -v {你的gateway.jar存放目錄}:/{任意容器內(nèi)目錄名稱} java:8 /usr/bin/java -jar /{任意容器內(nèi)目錄名稱}/gateway.jar
這種方式也是直接替換掛載目錄下jar,然后docker restart 容器ID or 名稱 就行