编写Dockerfiles最佳技术实践.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE 2 编写Dockerfiles最佳技术实践 目 录 TOC \o 1-3 \h \z \u 1.理解构建上下文 3 2.基于stdin的构建上下文 4 3.使用stdin的Dockerfile从本地上下文构建镜像 5 4.使用stdin的Dockerfile从远程上下文构建镜像 5 5.通过.dockerignore排除文件 6 6.使用多阶段构建 6 7.解耦应用程序 7 8.最小化层数 7 10.利用构建缓存 8 11.Dockerfile指令 9 12.FROM 9 13.LABEL 9 14.RUN 10 15.官方镜像的例子 19 本文介绍了构建高效镜像的建议最佳实践和方法。 Docker通过读取Dockerfile中的指令自动构建镜像,一个文本文件包含构建镜像的所有指令。Dockerfile遵循特定的格式和指令集,您可以在Dockerfile中引用它们。 Docker镜像由只读层组成,每一层代表一个Dockerfile指令集。每一层都是前一层变化的增量。考虑这个Dockerfile: FROMubuntu:18.04COPY . /appRUN make /appCMD?python/app/app.py 每条指令创建一个层: FROM 从ubuntu:18.04基础镜像创建一个层。 COPY 从Docker客户端当前目录中添加文件。 RUN 使用make构建你的应用。 CMD 指定容器运行时执行的命令。 当你运行一个镜像生成一个容器,在底层的顶部添加一个可写层(容器层)。对正在运行容器所做的所有更改,比如写文件,修改已存在的文件,和删除文件,都被写入这个可写空口层。 Dockerfile定义的容器应该生成尽可能短暂的容器,通过“短暂”,我们的意思是容器可以被停止或销毁,然后重建并用最小的设置和配置。从而充分利用容器的分层存储。 1.理解构建上下文 执行dockerbuild命令时,当前工作目录称为构建上下文。 默认情况下,假定Dockerfile位于此处,但您可以使用文件标志(-f)指定其他位置。 无论Dockerfile实际存在于何处,当前目录中的所有文件和目录的递归内容都将作为构建上下文发送到Docker守护程序。 构建上下文件示例: 创建并CD进入构建上下文目录,将“hello”写入名为hello的文本文件中,并创建一个在其上运行cat的Dockerfile。从构建上下文(.)中构建镜像。 mkdirmyproject cd myprojectecho hello helloecho -e FROMbusyboxCOPY /hello /RUN cat /hello Dockerfiledocker build -t helloapp:v1 . 将Dockerfile和hello移动到单独的目录中并构建映像的第二个版本(不依赖于上一次构建的缓存)。使用-f指向Dockerfile并指定构建上下文的目录: mkdir -p dockerfiles contextmv Dockerfile dockerfiles mv hello contextdocker build --no-cache -t helloapp:v2 -f dockerfiles/Dockerfile context 无意中包含构建不必要的文件会导致更大的构建上下文和更大的镜像,这将增加构建时间,拉取和推送镜像的时间以及容器运行时占用更多的存储空间。查看构建上下文大小,在构建Dockerfile时查找类似信息。 Sending buildcontext to Docker daemon 187.8MB 2.基于stdin的构建上下文 Docker能通过stdin与本址或远程构建上下文管道Dockerfile来构建镜像。通过stdin管道Dockerfile对于执行一次性构建非常有用,无需将Dockerfile写入磁盘,或者在生成Dockerfile的情况下,并且之后不应该持久化。 例如,以下命令是等效的: echo -e FROMbusyboxRUN echo hello world | docker build – docker build-EOFFROM busyboxRUN echohello worldEOF 在Dockerfile不需要将文件复制到映像中并且提高构建速度的情况下,省略构建上下文非常有用,因为没有文件发送到守护程序。 注意:如果使用此语法,尝试构建镜像时使用COPY或ADD的Dockerfile将失败,以下示例说明了这一点: ? # create a directory to work inmkd

文档评论(0)

智慧IT + 关注
实名认证
内容提供者

微软售前技术专家持证人

生命在于奋斗,技术在于分享!

领域认证该用户于2023年09月10日上传了微软售前技术专家

1亿VIP精品文档

相关文档