K8S下的docker commit
阿新 • • 發佈:2020-12-07
在使用docker 的過程中,我們有時候需要在容器中安裝一些依賴,並且希望在不改變原映象的前提的情況下能夠把這些操作儲存下來。這時候我們可以使用docker commit 命令,來基於容器建立一個新映象。
但是在K8S 叢集環境下,我們知道pod 是最小單元,而容器包含在pod 中。並且,pod 可能執行在叢集中的任何一個節點上。那麼,我們該如何獲取到pod 中的容器ID 及pod 所在節點來執行commit 命令呢?
以下步驟,是在一個pod 中只含有一個業務容器的情況下操作的:
- 根據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>
- 根據節點名稱獲取到對應主機的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
- 儲存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}'
- 登入到pod 所在主機
[root@node-master ~]# ssh 11.22.33.44
[root@node-node1 ~]#
- 執行commit 操作
[root@node-master ~]# docker commit -m comment -a author containId newImageName:tag