K8S下的docker commit
作者:互联网
在使用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
以上,我们可以使用docker images 命令来查看新创建的镜像了。
标签:node,master,podName,commit,docker,K8S,root,pod 来源: https://www.cnblogs.com/xujuan/p/14085592.html