视频加载失败

Docker 镜像构建上下文

404 字
2 分钟
Docker 镜像构建上下文

如果注意,会看到 docker build命令最后有一个 .

docker build 命令构建镜像,其实并非在本地构建,而是在服务端,也就是 Docker 引擎中构建的。那么在这种客户端/服务端的架构中,如何才能让服务端获得本地文件呢?

这就引入了上下文的概念

  • 提供构建时所需文件
    • COPY、ADD 指令引用的文件路径都必须在上下文内。
  • 传输给 Docker daemon
    • 在 docker build 时,CLI 会把上下文打包成一个 tar 包,发送给后端守护进程。
  • 控制构建范围
    • 若不小心把整个大目录(如 / 或 ~)作为上下文,会严重拖慢构建。

一个具体例子#

Terminal window
# 上下文 = 当前目录(末尾的 .),Dockerfile 默认为 ./Dockerfile
docker build -t my-app .
# 上下文 = 当前目录,但指定别的 Dockerfile
docker build -f microservice.Dockerfile -t my-app .
# 上下文 = 指定目录(构建时路径都相对它解析)
docker build -t my-app ./backend

执行 docker build . 时终端里那一行 Sending build context to Docker daemon xx MB,就是把整个上下文目录打包成 tar 传给 daemon 的过程——这也解释了为什么 COPY 不能引用上下文之外的路径(如 COPY ../foo 是非法的)。

用 .dockerignore 收窄上下文#

上下文太大不仅拖慢构建,还会把不该进镜像的文件传进 daemon。在上下文根目录放 .dockerignore:

.git
node_modules
dist
*.log
.env

语法类似 .gitignore。被排除的文件不会进入 tar 包,COPY . 也就拿不到它们,同时避免密钥、构建产物意外进镜像。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Docker 镜像构建上下文
https://blog.81vm3.xyz/posts/docker-build-context/
作者
Blume
发布于
2026-01-15
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Blume
I build interesting things.
公告
欢迎来到我的博客!
分类
标签
最新动态
站点统计
文章
38
分类
5
标签
98
总字数
23,078
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录