docker image換包步驟


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

  1. 新建一個文件夾,將需要替換的JAR包,放在此文件內

  2. 在文件內新建一個Dockerfile

    vi Dockerfile
  3. 根據所要替換的JAR包在image中的位置,編寫Dockerfile

    FROM 172.16 . 1.99 /postcommit/inceptor:master- 2019 - 11 - 19 - 02 - 19 - 35 -966260e9ad266e36df2cf968e0512f8594615072  // 1. 指定從哪個鏡像開始改動,這里是inceptor master的某一個postcommit build
    RUN 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包(一定要在同文件夾下)復制到鏡像內相應位置
  4. 所有文件就位后,是這個樣子

    [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
  5. 在這個文件內運行docker build, 其中-t 指定image名,不寫的話,后面只能用IMAGE ID(hash)做tag操作

    docker build -t <image_name_and_tag> ./
  6. docker push至repository

    docker push <image_name_and_tag>
  7. 對於需要更新的pod,直接刪除。自動重啟后就會拉取最新image覆蓋本地同名image

    kubectl delete po $(kubectl get po | grep inceptor12 | awk '{print $1}' )

    這句的意思是 找到所有名字帶inceptor12的pod並刪除

  8. 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}' )
  9. 注意:build出的鏡像名,和dockerfile內使用的基礎鏡像名(FROM xxx)不能一樣,不然你會發現,跑幾次就報錯了(docker layer過多)

 

參考鏈接:TDH 5.0 rubik換包

                  baisheng5上換inceptor image 命令

                  修改image的方法

                  TDH 5.0更換image調試方法

                  https://docs.docker.com/engine/reference/commandline/tag/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM