docker构建打包java项目
生活随笔
收集整理的這篇文章主要介紹了
docker构建打包java项目
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
docker構(gòu)建打包java項(xiàng)目
簡(jiǎn)介
本項(xiàng)目用于 研究和實(shí)踐 docker的工作流部署發(fā)布
查看github源碼
技術(shù)棧
- spring-web (RESTAPI 請(qǐng)求交互)
- redis (用于實(shí)驗(yàn) 多容器通信)
- maven
docker常用命令
docker --help可查看幫助指令
查看 鏡像列表
docker image ls
查看 容器列表
docker container ls
查看 日志
docker logs [容器containerId]
docker部署
1. docker創(chuàng)建網(wǎng)絡(luò)空間,以便多容器在同網(wǎng)絡(luò)里可通信
docker network create web-demo-net
2. 獲取redis鏡像
docker pull redis:latest
-
:latest拉取最新版鏡像
3. redis鏡像運(yùn)行成容器
docker run -d -p 6379:6379 \
--name web-demo-redis \
--network web-demo-net \
--network-alias redis-net \
-v redis-data:/data \
redis:latest
-
-d后臺(tái)啟動(dòng) -
-p 6379:6379容器的端口(:后面的6379) 映射 成 宿主機(jī)的端口(:前面的6379) -
--name給容器命名 -
--network指定使用的網(wǎng)絡(luò)空間,同網(wǎng)絡(luò)空間的容器才可通信 -
--network-alias指定本容器所使用網(wǎng)絡(luò)地址的別名:redis-net, web項(xiàng)目配置文件中的redis連接host即為redis-net,(很重要!相當(dāng)于分配獨(dú)有有ip地址) -
-v指定數(shù)據(jù)卷映射,其中redis-data是創(chuàng)建的數(shù)據(jù)卷名稱,實(shí)際物理數(shù)據(jù)在宿主機(jī),邏輯數(shù)據(jù)在容器中。其中/data為容器應(yīng)用生成的數(shù)據(jù)路徑 -
redis:latest指定生成容器所使用的鏡像名和版本標(biāo)簽
4. docker打包web項(xiàng)目為鏡像
Dockfilebuild文件編寫
# 獲取運(yùn)行環(huán)境
FROM openjdk:17
# 把本地文件目錄 解析到 容器目錄(容器若沒有會(huì)自動(dòng)創(chuàng)建文件夾)
ADD ./target/web-demo.jar /usr/local/workspace/web-demo/web-demo.jar
# 設(shè)置工作目錄空間,方便后續(xù)操作指令
WORKDIR /usr/local/workspace/web-demo
# 執(zhí)行指令
CMD java -jar web-demo.jar
打包命令
docker buildx b -t web-demo:v1 .
-
-t命名鏡像名稱,:v1指定版本標(biāo)簽tag -
.構(gòu)建目錄為當(dāng)前目錄
5. web-demo鏡像運(yùn)行成容器
docker run -d -p 8080:8080 --name web-demo --network web-demo-net web-demo:v1
6. 宿主機(jī)訪問web應(yīng)用測(cè)試
- localhost:8080
- localhost:8080/hello
docker備份容器數(shù)據(jù)
利用中轉(zhuǎn)容器 目錄掛載 獲取 數(shù)據(jù)卷
docker run --rm \
--volumes-from web-demo-redis \
-v ~/backup:/backup \
debian \
tar cvf /backup/redis-data.tar /data
-
--rm作為臨時(shí)容器啟動(dòng),運(yùn)行后即刪除容器 -
--volumes-from數(shù)據(jù)卷掛載來源web-demo-redis -
-v數(shù)據(jù)卷映射目錄,冒號(hào):前的~/backup是宿主機(jī)的絕對(duì)路徑,不再是上文中redis-data模式新建的數(shù)據(jù)卷名稱,它用來真正接收壓縮的備份文件。冒號(hào):后的/backup是中轉(zhuǎn)linux系統(tǒng)的目錄,用來中轉(zhuǎn)臨時(shí)保存容器的壓縮數(shù)據(jù)。 -
debian是指定的臨時(shí)系統(tǒng)鏡像名,可使用其他系統(tǒng)鏡像,如ubuntu等。 -
tarlinux系統(tǒng)常用解壓縮工具,這里是把 復(fù)制的數(shù)據(jù)卷目錄/data壓縮為/backup/redis-data.tar
已經(jīng)備份結(jié)束,可在宿主機(jī)的
~/backup目錄查看到壓縮的備份文件redis-data.tar
docker恢復(fù)容器數(shù)據(jù)
測(cè)試時(shí),可docker volume rm redis-data刪除數(shù)據(jù)卷,來模擬丟失數(shù)據(jù)
利用中轉(zhuǎn)容器 目錄掛載 獲取 備份文件
docker run --rm \
--volumes-from web-demo-redis \
-v ~/backup:/backup \
debian \
bash -c "cd /data/ && tar xvf /backup/redis-data.tar --strip 1"
-
--strip 1表示tar工具解壓時(shí)去掉前面1層目錄,這里去掉了tar壓縮包里的/data/目錄,根據(jù)壓縮時(shí)確定層級(jí)路徑是否需要此參數(shù)
備份已完成, dump.rdb 已經(jīng)是舊數(shù)據(jù)文件
docker compose 一件啟動(dòng)應(yīng)用
上文手動(dòng)啟動(dòng)redis容器,再啟動(dòng)web-demo容器,docker compose 可以 實(shí)現(xiàn)自動(dòng)化一鍵啟動(dòng)所以服務(wù)容器
修改網(wǎng)絡(luò)空間配置
上文中是手動(dòng)配置web容器和redis容器的網(wǎng)絡(luò)空間 web-demo-net, docker compose 無需配置,自動(dòng)會(huì)在同個(gè)網(wǎng)絡(luò)內(nèi),所以去掉web項(xiàng)目中的配置
修改 application-prod.yml 的 host: redis-net 為 compose.yaml里設(shè)置的服務(wù)名redis
spring:
data:
redis:
# host: redis-net
host: redis
port: 6379
編寫 compose.yml
services:
web-demo:
# 當(dāng)前目錄下的Dockerfile構(gòu)建
build: .
ports:
- '8080:8080'
# 也給web項(xiàng)目一個(gè)數(shù)據(jù)卷
volumes:
- web-demo-data:/usr/local/workspace/web-demo
environment:
- TZ=Asia/Shanghai
redis:
image: 'redis:latest'
volumes:
- redis-data:/data
environment:
- TZ=Asia/Shanghai
volumes:
web-demo-data:
redis-data:
啟動(dòng) compose
在 compose.yaml目錄
docker compose up
總結(jié)
以上是生活随笔為你收集整理的docker构建打包java项目的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java开发者的Python快速进修指南
- 下一篇: 性能优化的一般策略及方法