对于我遇到的所有 Dockerfiles(当然不是很多),它们都使用了一个FROM
子句来建立一个现有的镜像,即使它是FROM scratch
.
这个条款是必须的吗?是否可以有一个没有FROM
子句的 Dockerfile ?这样创建的容器是否能够做任何事情?
编辑
我读过
没有 FROM 指令的 Dockerfile 没有父镜像,称为基础镜像。
https://docs.docker.com/glossary/?term=parent%20image
但我认为这可能是一个错误。
简短的回答是肯定的,FROM 子句是必需的。但如果您稍微考虑一下图像构建过程,就更容易得出这个结论。
Dockerfile 只是描述 Docker 构建子系统创建映像时要执行的一系列命令的一种方式。镜像只是一堆常规文件,最值得注意的是特定 Linux 发行版的用户空间文件,但上面可能还有一些额外的文件。每个 Docker 镜像都基于父镜像,并将自己的文件添加到父镜像集中。每个图像都必须从某些东西开始,即指定其父图像。所有父项的父项是一个scratch
定义为 的图像noop
,即一组空文件。
看一下busybox
图像:
FROM scratch
ADD busybox.tar.xz /
CMD ["sh"]
Run Code Online (Sandbox Code Playgroud)
它从头开始,即一组空文件,并向该组添加(即复制)来自存档的一堆文件busybox.tar.xz
。
现在,如果您想创建自己的图像,您可以从busybox
图像开始并描述要添加哪些文件(以及如何添加):
FROM busybox:latest
ADD myfile.txt /
Run Code Online (Sandbox Code Playgroud)
但每次新的图像都必须从某些东西开始。
根据官方文档,它需要:
该FROM指令初始化一个新的构建阶段,并设置基本映像用于随后的指令。因此,有效的 Dockerfile必须 以FROM指令开头。镜像可以是任何有效的镜像——从公共存储库中提取镜像特别容易。
https://docs.docker.com/engine/reference/builder/#from
归档时间: |
|
查看次数: |
1701 次 |
最近记录: |