【问题标题】:How can I create an image from a container running in Kubernetes?如何从 Kubernetes 中运行的容器创建映像?
【发布时间】:2018-10-24 06:48:58
【问题描述】:

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

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

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

似乎a related feature request 已创建,但没有任何结果。

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

【问题讨论】:

  • 您应该能够从您的主机运行 docker 命令并像往常一样将容器保存为映像。
  • 在托管集群中,访问主机/节点并不简单。例如,通过kubectl 拥有此功能非常有帮助。

标签: docker kubernetes google-cloud-platform containers google-kubernetes-engine


【解决方案1】:

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

[root@host ~]# docker run -i -t --name guest oraclelinux:6.6 /bin/bash
[root@guest ~]#

如果您使用网络代理,请按照Oracle Linux Administrator's Guide for Release 7 中的说明编辑来宾上的 yum 配置。

安装httpd包:

[root@guest ~]# yum install httpd

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

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

[root@host ~]# docker stop guest
guest

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

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

使用-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

移除名为 guest 的容器。

    # docker rm guest
    guest

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

 # docker run -d --name newguest -p 8080:80 mymod/httpd:v1 /usr/sbin/httpd -D FOREGROUND
 7afbbefec5191f632e149f85ae10ed0ba88f1c545daad18cb930e575ef6a3e63

【讨论】:

  • 通过执行 kubectl describe pod 找到运行 pod 的主机。然后 ssh 到您的主机并直接在主机上执行 docker 命令。然后将您的图像推送到 docker hub 以保存您的图像。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多