1. 程式人生 > 實用技巧 >K8S下的docker commit

K8S下的docker commit

在使用docker 的過程中,我們有時候需要在容器中安裝一些依賴,並且希望在不改變原映象的前提的情況下能夠把這些操作儲存下來。這時候我們可以使用docker commit 命令,來基於容器建立一個新映象。
但是在K8S 叢集環境下,我們知道pod 是最小單元,而容器包含在pod 中。並且,pod 可能執行在叢集中的任何一個節點上。那麼,我們該如何獲取到pod 中的容器ID 及pod 所在節點來執行commit 命令呢?
以下步驟,是在一個pod 中只含有一個業務容器的情況下操作的:
  1. 根據pod 名稱獲取到容器的ID 和節點名稱
[root@node-master ~]# kubectl get pod podName -o -wide
NAME      READY      STATUS      RESTARTS      AGE      IP      NODE      NOMINATED NODE
podName      1/1      Running      0      12s      aa.bb.cc.dd      nodeName      <none>
  1. 根據節點名稱獲取到對應主機的ip
[root@node-master ~]# kubectl get node nodeName -o -wide
NAME      STATUS      ROLES      AGE      VERSION      INTERNAL-IP      EXTERNAL-IP      OS-IMAGE      KERNEL-VERSION      CONTAINER-RUNTINE
nodeName      Ready      compute      10d      v1.0.0      11.22.33.44      <none>      ContOS Linux 7 (Core)      1.11.111-generic      docker://2.22.2
  1. 儲存pod 的yaml 檔案到本地,讀取yaml 中containerID
[root@node-master ~]# kubectl get podName -o yaml > podName.yaml
[root@node-master ~]# cat podName.yaml | awk -F ["//"] '/containerID/{print$3}'
  1. 登入到pod 所在主機
[root@node-master ~]# ssh 11.22.33.44
[root@node-node1 ~]#
  1. 執行commit 操作
[root@node-master ~]# docker commit -m comment -a author containId newImageName:tag
以上,我們可以使用docker images 命令來檢視新建立的映象了。