如何为Docker创建自己的基本映像?

时间:2013-08-16 13:08:56

标签: docker

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

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

如果我理解正确的话,图片base是建立在Ubuntu之上的,我想试验Debian图像。另外,我想真正了解Docker的工作原理,base图片对我来说仍然是一个黑盒子。


修改: official documentation on creating a base image

5 个答案:

答案 0 :(得分:33)

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

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

答案 1 :(得分:30)

引用Solomon Hykes

  

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

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

答案 2 :(得分:20)

(感谢fatherlinux)从http://developerblog.redhat.com/2014/05/15/practical-introduction-to-docker-containers/获取信息,更好地解释

  1. 为您的文件系统创建tar文件,只需

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

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

    docker run -i -t centos6-base cat /etc/redhat-release
    
  4. scripts from dotcloud将前两个步骤结合在一起,这让我感到困惑,并且在开始时看起来很复杂。

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

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

答案 3 :(得分:12)

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

  

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

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

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

答案 4 :(得分:6)

如果你想制作自己的基本图像,我首先来看看 Official Images,特别是该回购邮箱内的stackbrew

否则docker repo本身对于最小的OS图像有一些很好的参考。

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