99

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

显然, Docker 索引中有很多图像可供选择,但如果我想构建自己的呢?那可能吗?

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


编辑: 关于创建基础镜像的官方文档

4

5 回答 5

37

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

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

于 2013-08-16T17:27:10.360 回答
34

引用所罗门海克斯的话

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

debootstrap raring ./rootfs
tar -C ./rootfs -c . | docker import - flimm/mybase
于 2013-08-20T16:55:28.607 回答
23

(感谢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
    

来自 dotcloud的脚本 将前两个步骤结合在一起,这让我一开始感到困惑并且看起来很复杂。

docker官方指南usingdebootstrap也尝试制作干净的文件系统。

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

于 2014-06-02T02:07:01.947 回答
15

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

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

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

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

于 2015-11-11T09:22:56.950 回答
7

如果你想制作自己的基础图像,我会先看看 Official Images,特别是stackbrew在那个 repo 中。

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

例如,这里是一个用于制作最小拱形图像的脚本,这里还有更多。

于 2015-02-17T18:06:02.347 回答