编写Dockerfiles的优秀实践
副问题[/!--empirenews.page--]
本文档先容了构建高效镜像的优越实践和要领。 Docker通过从Dockerfile(按次序包括构建给定镜像所需的全部呼吁的文本文件)读取呼吁来自动构建镜像。Dockerfile遵循特定的名目和一组呼吁,您可以在Dockerfile reference中找到这些呼吁。 Docker镜像由只读层构成,每个只读层暗示Dockerfile指令。这些层被堆叠起来,每一层都是前一层变革的增量。思量一下这个Dockerfile:
每一个指令会建设一个层:
当您运行一个镜像并天生一个容器时,您将在底层之上添加一个新的可写层("容器层")。对正在运行的容器所做的全部变动,譬喻写入新文件、修改现有文件和删除文件,都被写入这个可写容器层。 通用概览和提议建设姑且容器 Dockerfile界说的镜像应该天生尽也许"短暂"的容器。所谓"姑且性",是指容器可以遏制和烧毁,然后用绝对最小的配置和设置从头构建和替代。 领略构建上下文 当您发出docker构建呼吁时,当前事变目次称为构建上下文。默认环境下, Dockerfile在当前目次,可是您可以行使file符号(-f)指定一个差异的位置。无论Dockerfile现实位于那里,当前目次中文件和目次的全部递归内容都作为构建上下文发送到Docker保卫历程。 构建上下文: 为构建上下文建设一个目次并将cd放入个中。将"hello"写入一个名为hello的文本文件中,并建设一个运行cat的Dockerfile。从构建上下文中构建镜像(.):
将Dockerfile和hello移到单独的目次中,并构建镜像的第二个版本(不依靠于上一个构建的缓存)。行使-f指向Dockerfile并指定构建上下文的目次:
有时中包括了构建镜像所不必要的文件,会导致构建上下文和镜像巨细变大。这可以增进构建镜像的时刻、拖放镜像的时刻和容器运行时巨细。要查察构建上下文的巨细,请在构建Dockerfile时查察相同这样的动静:
通过stdin行使Dockerfile 管道 Docker可以或许通过行使当地或长途构建上下文通过stdin管道传输Dockerfile来构建镜像。通过stdin管道传输Dockerfile对付执行一次性构建很是有效,不必要将Dockerfile写入磁盘,可能在天生Dockerfile的环境下,不该该在天生后生涯Dockerfile。 为了利便起见,本节中的示例行使here文档【http://tldp.org/LDP/abs/html/here-docs.html】,可是可以行使在stdin上提供Dockerfile的任何要领。 譬喻: 下面的呼吁是等价的:
您可以用您喜好的要领可能最得当您用例的要领来更换这些例子。 行使STDIN中的DOCKERFILE构建镜像,而不发送构建上下文 行使此语法可以从stdin顶用Dockerfile构建映像,而不必要发送特另外文件作为构建上下文。连字符(-)占有路径的位置,指示Docker从stdin而不是目次中读取构建上下文(个中只包括Dockerfile):
下面的示例行使通过stdin转达的Dockerfile构建一个镜像。没有文件作为构建上下文发送到保卫历程。
在Dockerfile不必要将文件复制到镜像中的环境下,省略构建上下文长短常有效的,而且可以进步构建速率,由于没有文件被发送到保卫历程。 留意:假如行使这种语法,实行构建行使COPY或ADD的Dockerfile将会失败。下面的例子声名白这一点:
行使STDIN中的DOCKERFILE从当地构建上下文构建 (编辑:河北网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |