我正在查看manylinux1
上的https://github.com/pypa/manylinux股票图像构建脚本,特别是调用链:
.travis.yml
<...>
script:
- docker build --rm -t quay.io/pypa/manylinux1_$PLATFORM:$TRAVIS_COMMIT -f docker/Dockerfile-$PLATFORM docker/
docker/Dockerfile-<arch>
:
COPY build_scripts /build_scripts
RUN bash build_scripts/build.sh
docker/build_scripts/build.sh
:
<a bunch of variables>
sed -i 's/enabled=1/enabled=0/' /etc/yum/pluginconf.d/fastestmirror.conf
<...>
该脚本假定已存在基本的CentOS 5文件系统(例如/etc/yum
)。它从何而来?
我没有看到任何对库存图像的引用,或者从某个地方下载它或使用安装ISO的任何内容。在代码库中的任何地方都没有/etc
。
看看Dockerfile的manylinux图像,你可以看到它是基于centos:5.11
FROM centos:5.11
MAINTAINER The ManyLinux project
...
/etc/yum
文件夹已经是centos图像的一部分,可以通过运行来验证:docker run -it centos:5.11 ls /etc/yum
更新:
Docker镜像是在Dockerfile中定义的层结构中构建的。通过在Dockerfile中使用FROM syntax,图像构建在彼此之上。
在这种情况下,图像基于centos:5.11
图像。语法在docker tag | Docker Documentation(go figure)中解释。在这种情况下,没有目录地址,这意味着它是从centos
entry中检索到的默认Docker Hub registry,5.11
tag。
CentOS的Dockerfile非常简单。它只是将基本CentOS文件结构的tarball扩展为scratch
(空)docker镜像。在最新版本的情况下,这个tarball,centos-7-docker.tar.xz
包含/etc/yum
文件夹等。