dockerfiles

时间:2018-02-01 04:07:45

标签: docker dockerfile

我看到dockerfiles通常有一行以“from”关键字开头,例如:

FROM composer/composer:1.1-alpine AS composer

据我所知,dockerfiles是一组有助于在docker中构建和运行许多容器的命令。

如上例所示,docker使用来自docker hub的名为 composer / composer:1.1-alpine 的图像。 As composer 只是做一个别名,所以我们可以更方便地使用它。

当我查找图片时,我找到了链接enter link description here,然后找到了enter link description here

我真正理解的是:

我想docker会使用图片构建一些东西,但它究竟是如何使用图片的? docker是运行图像还是准备在需要时使用它。有时我不会看到dockerfiles使用下一行中的图像(例如,除了第一行之外,没有使用关键字“composer”的行)。这让我感到困惑。

任何帮助将不胜感激。 谢谢。

2 个答案:

答案 0 :(得分:1)

DockerFiles描述了图层:每个命令都会创建自己的图层。例如: RUN touch test.txt RUN cp test.txt foo.txt 会创建两个层 - 第一个层有文件test.txt,第二层没有test.txt但有foo.txt

每个图层都会向容器添加内容。当我们向上“走”层时,我们发现第一层是空层,例如,它只包含linux(或windows)内核本身 - 没有别的。但这并不是很有用 - 我们需要很多工具(例如bash)才能运行应用程序。所以常见的基础图像如alpine添加了成功工具和核心操作系统功能。

如果我们必须在每个容器中进行此设置,那么会有很多基本图像,这正是这种设置。 如果你想看看基本图像的作用,只需在hub.docker.com上搜索名称 - 在那里你会找到描述构建过程的Dockerfile。

另外,容器可以是伸长的,例如您使用elasticsearch容器作为基本映像,并添加您自己的功能 - 这是基本映像的第二个用例。

对于第二个问题:您必须决定是否必须复制基本图像中的步骤。如果你继承了一般的操作系统映像,比如apline - 可能不是,因为linux通常附带这些工具。如果你从一个更专业的容器继承,它取决于 - 如果你的机器与容器中的环境匹配,你不需要,但如果不是,你也必须将这些步骤应用到你的机器上。例如。如果您没有安装elasticsearch,则必须安装它。

对于一个Dockerfile中的多个froms:请查看Multi Stage版本的文档。实质上,它们将多个容器封装在一个dockerfile中。如果您需要一个不同的集来构建应用程序并运行应用程序,这可能非常有用。第一个容器负责构建您的应用程序,而第二个容器负责编译源代码并运行它。 注意COPY --from = lines,这些是将文件从一个容器复制到另一个容器。

答案 1 :(得分:0)

FROM指令初始化新的构建阶段并为后续指令设置基本映像。因此,有效的Dockerfile必须以FROM指令开头。图像可以是任何有效的图像 - 通过从公共存储库中提取图像开始特别容易。

FROM可以在单个Dockerfile中多次出现以创建多个映像,或者使用一个构建阶段作为另一个构建阶段的依赖项。只需在每个新的FROM指令之前记下提交输出的最后一个图像ID。每个FROM指令都清除先前指令创建的任何状态。

(可选)通过将AS名称添加到FROM指令,可以将名称赋予新的构建阶段。该名称可用于后续的FROM和COPY --from =指令,以引用此阶段构建的图像。

标记或摘要值是可选的。如果省略其中任何一个,则构建器默认采用最新标记。如果找不到标记值,构建器将返回错误。

取自:https://docs.docker.com/engine/reference/builder/#from