翻译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指令 会帮你在构建时避免不必要的工作。

相关信息:

相关推荐
RisunJan10 小时前
Linux命令-rlogin(远程登录)
linux·运维
深圳恒讯10 小时前
菲律宾云服务器与传统VPS的架构差异
运维·服务器·架构
蓝天下的守望者10 小时前
svt_apb_if里的宏定义问题
运维·服务器·数据库
小林ixn10 小时前
从“玩具工具”到“跨语言利器”:MCP 协议实战解析
运维·服务器·网络
小顿的企业观察11 小时前
中企出海战略规划,正在从“走出去”转向“走进去”
大数据·运维·人工智能·产品运营·制造
数智化转型推荐官12 小时前
2026统一身份管理系统五大发展趋势解读
java·运维·微服务
看菜鸡互12 小时前
探索用 SlideML 让大模型生成 PPT 的实验方法
java·运维
liguojun202514 小时前
篮球馆自动计时收费系统:从规则配置到自动结算的全流程拆解
java·大数据·运维·人工智能·物联网·1024程序员节
Promise微笑14 小时前
红外分辨率 160×120、320×240、384×288 与 640×480实战选型指南
大数据·运维·人工智能·物联网
云飞云共享云桌面15 小时前
单机建模卡顿运维繁琐!中小型机械制造厂云飞云 3D 云桌面落地
运维·服务器·网络·3d·自动化·电脑·负载均衡