【docker】docker build上下文

金歌  金牌会员 | 2024-12-1 15:20:27 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 861|帖子 861|积分 2583

什么是 Docker Build 上下文?

在 Docker 中,构建上下文(Build Context) 是指在执行 docker build 命令时,Docker 会发送给 Docker 引擎的所有文件和目次的集合。构建上下文包含了 Dockerfile 和用于构建镜像的所有文件、资源以及相关的配置。通过上下文,Dockerfile 中的指令可以或许访问并操纵这些文件,以构建镜像。
简朴来说,Docker build 上下文就是构建镜像时,Docker 引擎用来天生镜像的所有文件和目次的集合。
如何指定构建上下文?

构建上下文是通过 docker build 命令中的路径参数指定的。通常,路径参数是你本地的一个文件夹,它将作为构建上下文的根目次。Docker 将会发送该路径下的所有文件到 Docker 引擎。
  1. docker build -t <image-name> <context-path>
复制代码


  • <context-path> 是你希望作为构建上下文的文件夹路径。可以是一个本地目次或一个 Git 仓库的 URL。
  • <image-name> 是你想要构建的镜像名称。
示例:
  1. docker build -t myapp:latest .
复制代码
在上面的例子中,. 体现当前目次作为构建上下文。当前目次下的所有文件将会被 Docker 引擎发送给构建过程。
Docker Build 上下文的结构

Docker 构建上下文包含以下部分:


  • Dockerfile:这个文件界说了镜像构建的步骤,通常是上下文目次中的一个文件。
  • 其他文件和目次:除了 Dockerfile,本地上下文目次中的所有文件(例如代码、配置文件、脚本、数据等)都会被发送给 Docker 引擎。 Dockerfile 中的 COPY 和 ADD 指令会用到这些文件。
示例:
假设我们有如下的文件结构:
  1. myapp/
  2. ├── Dockerfile
  3. ├── app/
  4. │   ├── main.py
  5. │   └── requirements.txt
  6. └── config/
  7.     └── config.json
复制代码
如果在 myapp 目次下执行 docker build -t myapp .,那么 Docker 会将整个 myapp 目次(包括 Dockerfile、app、config 等文件)作为上下文发送给 Docker 引擎。
构建上下文的工作流程


  • 选择上下文路径:首先,执行 docker build 命令时,Docker 会确定构建上下文的路径。
  • 将上下文发送给 Docker 引擎:Docker 会将整个构建上下文目次(包括所有文件和子目次)发送到 Docker 引擎。
  • 执行 Dockerfile 指令:Docker 引擎会根据 Dockerfile 中的指令进行镜像构建,涉及到的文件(如 COPY、ADD)会从上下文中获取。
  • 天生镜像:Docker 会根据 Dockerfile 的界说,逐步构建镜像,最后输出一个可以运行的镜像。
构建上下文的巨细和性能

由于 Docker 会将整个构建上下文发送给 Docker 引擎,因此上下文的巨细会影响构建的性能。如果上下文中包含了很多不必要的文件(比如大文件、日志文件等),它们将被发送到 Docker 引擎并参与构建过程,从而影响构建速度,以致导致不必要的错误。
影响构建上下文的因素:


  • 不必要的大文件:如果上下文包含了不必要的大文件(例如 node_modules 或 log 文件夹),这些文件会被发送给 Docker,引擎会浪费时间处理它们。
  • .dockerignore 文件:为了避免将不需要的文件添加到上下文中,我们可以使用 .dockerignore 文件来清除某些文件或文件夹。这将有助于镌汰构建上下文的巨细,进步构建服从。
示例 .dockerignore 文件:
  1. node_modules/
  2. *.log
  3. .git/
复制代码
在这个 .dockerignore 文件中,我们清除了 node_modules/ 文件夹、所有 .log 文件以及 .git/ 目次,这样它们就不会被发送到 Docker 引擎。
使用 Git 仓库作为构建上下文

Docker 还支持使用 Git 仓库作为构建上下文。在这种情况下,Docker 会直接从 Git 仓库拉取文件作为上下文,而不需要本地文件夹。
  1. docker build -t myapp https://github.com/myusername/myapp.git
复制代码
在这种情况下,Docker 会从指定的 Git 仓库拉取文件,并使用该仓库的内容作为构建上下文。
上下文与 Dockerfile 的位置关系

Dockerfile 通常位于构建上下文目次的根目次,也可以指定 Dockerfile 的位置。如果 Dockerfile 不在构建上下文的根目次,可以通过 -f 参数指定 Dockerfile 的路径。
  1. docker build -f ./path/to/Dockerfile -t myapp .
复制代码
在这种情况下,-f 后面指定的路径是 Dockerfile 的位置,构建上下文仍旧是当前目次(.)。
如何优化 Docker Build 上下文

为了优化构建性能和镌汰不必要的资源斲丧,可以考虑以下计谋:

  • 使用 .dockerignore:清除不需要的文件和目次。
  • 拆分构建过程:将构建过程拆分成多个阶段,镌汰每个阶段的上下文巨细。
  • 最小化上下文文件:只将构建所需的最小文件集发送给 Docker 引擎。例如,在多阶段构建中,可以通过将构建依赖和运行时依赖分开来镌汰最终镜像的巨细。
优化后的文件结构:
  1. myapp/
  2. ├── Dockerfile
  3. ├── src/
  4. │   ├── main.py
  5. │   └── requirements.txt
  6. └── .dockerignore
复制代码
.dockerignore 文件:
  1. tests/
  2. logs/
复制代码
通过这种方式,我们将不必要的 tests/ 和 logs/ 文件从构建上下文中清除。
总结

Docker build 上下文是构建 Docker 镜像时传递给 Docker 引擎的所有文件和目次的集合。上下文包括 Dockerfile 和它所需要的所有资源文件。公道管理构建上下文,可以进步构建服从,避免无用文件的传输,同时确保镜像构建过程的顺利进行。使用 .dockerignore 文件可以有用镌汰上下文的巨细,优化构建性能。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金歌

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表