Docker Commit
1、在IDEA中通過maven package得到watchman-1.5.0-SNAPSHOT.jar,將其scp到baisheng1本地;
2、查看dbaservice2所在的pod
kubectl get po -owide | grep dbaservice2
結果: dbaservice-server-dbaservice2-6f4bb88df7-9p5zr 1/1 Running 0 23m 172.26.0.73 baisheng1
3、執行下面命令獲取該pod的配置信息,從中找到容器ID(Container ID):是結果中"//"后面的長字符串
kubectl describe pods dbaservice-server-dbaservice2-6f4bb88df7-9p5zr
4、使用docker命令導入jar包到容器根目錄(下面的長字符串是pod中的容器ID:Container ID)
docker cp watchman-1.5.0-SNAPSHOT.jar da2c9b6af26e0f25300d245261569ae64603573b0fdbcfd1cc17d14be0197615:/
5、進入該pod,先刪除掉原來的watchman.jar,修改剛剛拷貝進來的watchman-1.5.0-SNAPSHOT.jar文件名為watchman.jar(因為java -jar啟動命令定義的是啟動watchman.jar,故要更名)
(1)進入該pod:kubectl exec -ti dbaservice-server-dbaservice2-6f4bb88df7-9p5zr -- bin/sh
(2)刪除原來的jar包:rm -r watchman.jar
(3)更名:mv watchman-1.5.0-SNAPSHOT.jar watchman.jar
6、執行exit退出該pod
7、執行docker commit [container_id] [image_repo]:[image_tag],將container的修改更新到對應的image上
這里的container_id就是上面的容器ID,image_repo是本地的“transwarp/dbaservice“,image_tag是自定義的”i18n“
8、執行docker tag transwarp/dbaservice:i18n baisheng3:5000/transwarp/dbaservice:i18n (用來在遠程倉庫創建TAG)
9、執行docker push baisheng3:5000/transwarp/dbaservice:i18n (push到遠程倉庫)
10、執行kubectl set image deployment/dbaservice-server-dbaservice2 dbaservice-server-dbaservice2=baisheng3:5000/transwarp/dbaservice:i18n
就可將新的image打進該pod中,然后重啟pod即可。
Dockerfile
-
新建一個文件夾,將需要替換的JAR包,放在此文件內
-
在文件內新建一個Dockerfile
vi Dockerfile -
根據所要替換的JAR包在image中的位置,編寫Dockerfile
FROM172.16.1.99/postcommit/inceptor:master-2019-11-19-02-19-35-966260e9ad266e36df2cf968e0512f8594615072// 1. 指定從哪個鏡像開始改動,這里是inceptor master的某一個postcommit buildRUN rm -f /usr/lib/inceptor/inceptor-engine*.jar /usr/lib/inceptor/lib/inceptor-core*.jar /usr/lib/inceptor/lib/inceptor-base*.jar// 2. 刪除鏡像內的JAR包,這一步不是必須的COPY inceptor-engine-master-SNAPSHOT.jar /usr/lib/inceptor/COPY inceptor-core-master-SNAPSHOT.jar inceptor-base-master-SNAPSHOT.jar /usr/lib/inceptor/lib/// 3. 將新JAR包(一定要在同文件夾下)復制到鏡像內相應位置 -
所有文件就位后,是這個樣子
[root@baisheng3 nucleon]# pwd/home/yewu/docker/nucleon[root@baisheng3 nucleon]# ll總用量 26920-rw-r--r-- 1 root root 426 11月 19 15:13 Dockerfile-rw-r--r-- 1 root root 371264 11月 20 20:57 inceptor-base-master-SNAPSHOT.jar-rw-r--r-- 1 root root 14857951 11月 20 20:57 inceptor-core-master-SNAPSHOT.jar-rw-r--r-- 1 root root 11572363 11月 20 20:57 inceptor-engine-master-SNAPSHOT.jar -
在這個文件內運行docker build, 其中-t 指定image名,不寫的話,后面只能用IMAGE ID(hash)做tag操作
docker build -t <image_name_and_tag> ./ -
docker push至repository
docker push <image_name_and_tag> -
對於需要更新的pod,直接刪除。自動重啟后就會拉取最新image覆蓋本地同名image
kubectl delete po $(kubectl get po | grep inceptor12 | awk'{print $1}')這句的意思是 找到所有名字帶inceptor12的pod並刪除
-
TL;DR
Dockerfile備好,文件放好,直接一次執行,全部辦妥:(示例)
docker build -t baisheng3:5000/transwarp/inceptor:nucleon ./;docker push baisheng3:5000/transwarp/inceptor:nucleon;kubectl delete po $(kubectl get po | grep inceptor12 | awk'{print $1}') - 注意:build出的鏡像名,和dockerfile內使用的基礎鏡像名(FROM xxx)不能一樣,不然你會發現,跑幾次就報錯了(docker layer過多)
參考鏈接:TDH 5.0 rubik換包
