【问题标题】:How can I make my own base image for Docker?如何为 Docker 制作自己的基础镜像?
【发布时间】:2013-08-18 21:44:17
【问题描述】:

根据Docker documentation,要构建自己的镜像,您必须始终使用FROM 指令指定基础镜像。

显然,the Docker index 中有很多图像可供选择,但如果我想自己构建呢?这可能吗?

如果我理解正确,图像base 是在 Ubuntu 上构建的,我想尝试使用 Debian 图像。另外,我想真正了解 Docker 是如何工作的,base 镜像对我来说仍然是一个黑匣子。


编辑: official documentation on creating a base image

【问题讨论】:

  • 没关系。 :-) 根据网站指南,这里的问题仍然必须是主题。它们在help centertour 页面上都有介绍。 (那里的链接似乎也与 Docker 容器的开发人员有关。)如果您要询问自己的容器映像,有一个工具可以解决该问题on their site
  • @KenWhite:相关元问题:meta.stackexchange.com/questions/179249/…
  • :-) 相关meta answer 在这个时间点,这是你上面的答案。 (尤其是我链接的答案的第二条评论,关于你的问题的明确性。)
  • @Ken White:问题是如何“制作”基础镜像,而不是如何部署“镜像”。 Flimm 正在尝试编写一些可以在之后由他或其他人部署的东西。 Amazon EC2 与部署相关,但我认为他们仍然有几个程序员在编写程序内容:)。创建基础图像是我想说的程序化的一个例子。
  • @qkrijger:链接的元问题中正在讨论这个问题。由于该讨论是公开的,请在此处发布任何关于该话题的讨论(共识似乎不是“程序化的东西”主题)。

标签: docker


【解决方案1】:

您可以查看基本图像的创建方式并从那里开始。

您可以在这里找到它们:https://github.com/dotcloud/docker/tree/master/contrib。 有mkimage-busybox.sh、mkimage-unittest.sh、mkimage-debian.sh

【讨论】:

  • mkimage-* 脚本已被移动并重命名(与官方仓库一样)为here
【解决方案2】:

引用Solomon Hykes:

您可以使用“docker import”从任何 tarball 轻松创建新容器。例如:

debootstrap raring ./rootfs
tar -C ./rootfs -c . | docker import - flimm/mybase

【讨论】:

  • 也许在评论中发布编辑/更新,以便其他人可以看到它,也许有人可以重新提交编辑。
  • @Flimm 为什么在这种情况下我需要使用 sudo?在您的用户目录中运行这些命令,您应该没有理由提升权限。您正在创建映像,而不是安装它。
  • 你甚至不需要root来正常使用Docker;只需将自己添加到docker 组即可。
  • 但是 Flimm 推荐的导入命令中的连字符是必需的:docker import - flimm/mybase 而不是 docker import flimm/mybase
  • tar 中文件的所有权将受到您是否以 root 身份运行的影响。如果不是root,那么debootstraptar至少应该在fakeroot下运行。
【解决方案3】:

(感谢fatherlinux)从https://developers.redhat.com/blog/2014/05/15/practical-introduction-to-docker-containers/获取信息,这解释得更好

  1. 为您的文件系统创建 tar 文件,可以是

    tar --numeric-owner --exclude=/proc --exclude=/sys -cvf centos6-base.tar /
    
  2. 如果本地没有安装并且import它,请将tar文件传输到其他docker系统

    cat centos6-base.tar | docker import - centos6-base
    
  3. 现在你可以通过运行来验证了。

    docker run -i -t centos6-base cat /etc/redhat-release
    

scripts from dotcloud 将前两个步骤组合在一起,这让我感到困惑,一开始看起来很复杂。

使用debootstrap 的docker official guideline 也尝试制作干净的文件系统。

您可以自行判断如何执行第 1 步。

【讨论】:

    【解决方案4】:

    如果您想制作自己的基本图像,我会先看看 Official Images,特别是该仓库中的 stackbrew

    否则,docker repo 本身中有一些关于最小操作系统映像的很好的参考。

    例如,这里有一个script,用于制作最小的拱形图像,还有更多here

    【讨论】:

      【解决方案5】:

      要从头开始构建自己的映像,您可以使用scratch 映像。

      使用临时“映像”向构建过程发出信号,您希望 Dockerfile 中的下一个命令成为映像中的第一个文件系统层。

      FROM scratch
      ADD hello /
      CMD ["/hello"]
      

      http://docs.docker.com/engine/articles/baseimages/#creating-a-simple-base-image-using-scratch

      【讨论】:

      • 这加上来自 tar 文件的 import 是两个规范答案,该链接是规范资源。
      猜你喜欢
      • 2020-07-24
      • 2020-01-20
      • 2017-04-24
      • 1970-01-01
      • 1970-01-01
      • 2016-11-11
      • 2020-02-26
      • 2017-12-31
      • 1970-01-01
      相关资源
      最近更新 更多