Docker 镜像构建上下文
404 字
2 分钟
Docker 镜像构建上下文
如果注意,会看到 docker build命令最后有一个 .
docker build 命令构建镜像,其实并非在本地构建,而是在服务端,也就是 Docker 引擎中构建的。那么在这种客户端/服务端的架构中,如何才能让服务端获得本地文件呢?
这就引入了上下文的概念
- 提供构建时所需文件
COPY、ADD指令引用的文件路径都必须在上下文内。
- 传输给 Docker daemon
- 在
docker build时,CLI 会把上下文打包成一个 tar 包,发送给后端守护进程。
- 在
- 控制构建范围
- 若不小心把整个大目录(如
/或~)作为上下文,会严重拖慢构建。
- 若不小心把整个大目录(如
一个具体例子
# 上下文 = 当前目录(末尾的 .),Dockerfile 默认为 ./Dockerfiledocker build -t my-app .
# 上下文 = 当前目录,但指定别的 Dockerfiledocker 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:
.gitnode_modulesdist*.log.env语法类似 .gitignore。被排除的文件不会进入 tar 包,COPY . 也就拿不到它们,同时避免密钥、构建产物意外进镜像。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
Docker 镜像构建上下文
https://blog.81vm3.xyz/posts/docker-build-context/相关文章智能推荐
1
Docker 镜像的分层与构建
云原生与运维Docker 镜像的分层结构、UnionFS 与构建缓存机制,以及 docker build 的多种用法。
2
Grafana 可视化与监控
云原生与运维Grafana 的定位、常见数据源与 Grafana + Prometheus 经典监控链路。
3
kubectl port-forward 端口转发
云原生与运维kubectl port-forward 转发 Pod/Service、让局域网访问以及常用排查命令。
4
kubectl 常用命令速查
云原生与运维kubectl 查看集群/资源/日志、进入容器、本地访问服务与部署删除的常用命令。
5
k8s Service:给一组 Pod 稳定入口
云原生与运维Service 解决的问题、关键字段、四种类型与排障要点。
随机文章随机推荐











