如何从在 Kubernetes 中运行的容器创建映像?

nep*_*une 5 containers docker google-cloud-platform kubernetes google-kubernetes-engine

我希望能够docker commit在 Kubernetes pod 内运行的容器上执行类似的操作。

卷快照不符合我的标准,因为我想对容器的完整状态进行快照,而不仅仅是在某个路径下安装的数据。

我需要这个是因为我为(受信任的)用户提供了对容器的 root 访问权限,并且我希望能够提供一种方法来回滚容器,而不会丢失他们在最后一个快照之前安装的任何包(或他们所做的任何其他更改)。

似乎提出了相关的功能请求,但没有任何结果。

我正在使用 Google Kubernetes Engine,但我准备迁移到另一个可以轻松支持此功能的提供商。

Jam*_*ott 2

在名为 guest 的容器内运行 bash shell:

[root@host ~]# docker run -i -t --name guest oraclelinux:6.6 /bin/bash
[root@guest ~]#
Run Code Online (Sandbox Code Playgroud)

如果您使用 Web 代理,请按照Oracle Linux 管理员指南第 7 版中所述编辑来宾上的 yum 配置。

安装httpd包:

[root@guest ~]# yum install httpd
Run Code Online (Sandbox Code Playgroud)

/var/www/html如果需要,创建要在访客上的目录层次结构下显示的 Web 内容。

在主机上使用 docker stop 命令退出来宾:

[root@host ~]# docker stop guest
guest
Run Code Online (Sandbox Code Playgroud)

使用您停止的容器的 ID创建mymod/httpd带有标签的映像:v1

[root@host ~]# docker commit -m "ol6 + httpd" -a "A N Other" \
`docker ps -l -q` mymod/httpd:v1
8594abec905e6374db51bed1bfb208804cfb60d96b285efb897db581a01676e9
Run Code Online (Sandbox Code Playgroud)

使用-m-a选项来记录图像及其作者。该命令返回新映像 ID 的完整版本。

如果您使用 docker images 命令,新映像现在将显示在列表中:

  [root@host ~]# docker images
    REPOSITORY    TAG         IMAGE ID       CREATED       VIRTUAL SIZE
    mymod/httpd   v1          8594abec905e   2 minutes ago 938.5 MB
    oraclelinux   6           9ac13076d2b5   5 days ago    319.4 MB
    oraclelinux   6.6         9ac13076d2b5   5 days ago    319.4 MB
    oraclelinux   latest      073ded22ac0f   5 days ago    265.2 MB
    oraclelinux   7           073ded22ac0f   5 days ago    265.2 MB
    oraclelinux   7.0         073ded22ac0f   5 days ago    265.2 MB
Run Code Online (Sandbox Code Playgroud)

删除名为 guest 的容器。

    # docker rm guest
    guest
Run Code Online (Sandbox Code Playgroud)

您现在可以使用新映像创建用作 Web 服务器的容器,例如:

 # docker run -d --name newguest -p 8080:80 mymod/httpd:v1 /usr/sbin/httpd -D FOREGROUND
 7afbbefec5191f632e149f85ae10ed0ba88f1c545daad18cb930e575ef6a3e63
Run Code Online (Sandbox Code Playgroud)

  • 通过执行 kubectl 描述 pod 来找到运行 pod 的主机。然后通过 ssh 连接到您的主机并直接在主机上执行 docker 命令。然后将您的映像推送到 docker hub 以保存您的映像。 (2认同)