• 翻译docker官方文档(残缺版)


    Build with docker(使用 Docker 技术构建应用程序或系统镜像)

    Overview (概述)

    介绍(instruction)

    层次结构(Layers)

    The order of Dockerfile instructions matters. A Docker build consists of a series of ordered build instructions. Each instruction in a Dockerfile roughly translates to an image layer. The following diagram illustrates how a Dockerfile translates into a stack of layers in a container image.

    Dockerfile指令的顺序很重要。Docker构建由一系列有序的构建指令组成。Dockerfile中的每条指令都大致对应为一个镜像层次。下图说明了Dockerfile如何转换为容器镜像中的层堆栈。

    缓存层(Cached Layers)

    当你运行构建(build)时,构建器(builder)会尝试重用之前构建的层。如果镜像的某个层自上次构建以来没有变化,构建器会从构建缓存中获取该层。但是,如果某个层在上次构建后发生了变化,那么该层及其后续的所有层都必须重新构建

    在上一节的示例中,Dockerfile 首先使用 COPY . . 指令将所有项目文件复制到容器中。然后,在下一步中,它使用 RUN go mod download 命令下载应用程序的依赖项。如果你修改了任何项目文件,例如添加、修改或删除文件,它将使得 COPY的缓存无效,并且也会使得所有后续的层的缓存无效。

    当缓存无效时,Docker 将重新构建受影响的层和所有后续的层。这确保新的更改在生成的镜像中正确反映出来。在使用 Docker 时,需要注意这种缓存行为,以确保你的更改在构建过程中得到正确应用。

    由于 Dockerfile 指令的当前顺序,构建器必须重新下载 Go 模块,尽管自上次构建以来没有任何包发生更改。

    更新指令顺序(Update the instruction  order)

    你可以通过重新排列Dockerfile中的指令来避免这种冗余。将指令的顺序更改为在将源代码复制到容器之前下载和安装依赖项。这样,构建器可以从缓存中重用“dependencies”层,即使你对源代码进行了更改。

    Go使用两个文件,称为go.mod和go.sum,来跟踪项目的依赖关系。这些文件对于Go来说就像package.json和package-lock.json对于JavaScript一样重要。为了让Go知道要下载哪些依赖项,你需要将go.mod和go.sum文件复制到容器中。在运行`RUN go mod download`之前添加另一个`COPY`指令,这次只复制go.mod和go.sum文件。

    现在,如果你编辑了源代码,构建镜像不会导致构建器每次都下载依赖项。`COPY . .` 指令出现在包管理指令之后,因此构建器可以重用 `RUN go mod download` 层。

    总结(Summary)

    正确地排序你的DockerFile指令 会帮你在构建时避免不必要的工作。

    相关信息:

  • 相关阅读:
    Dev-C++ 实用安装教程
    贝叶斯分类(朴素)
    B083-SpringCloud-eureka ribbon feign hystrix
    Jmeter安装(快速入门)
    【OpenCV】Chapter1.图像的基本操作
    泛型擦除机制
    linux-配置服务器之间 ssh免密登录
    京东JD开放平台API接口调用采集商品详情数据获取商品规格信息、销量、卖家信息抓取案例
    git的安装和基本配置以及基本命令.
    网络安全——SQLMAP基础
  • 原文地址:https://blog.csdn.net/qq_64071349/article/details/133777848