Docker构build上下文的目的是什么?

Docker构build上下文的目的是什么? 我从文档中了解到,这是将整个内容发送到docker守护程序的“入口”点。 但是,假设实例中提供了默认的用例,当我们还必须在Dockerfile中明确包含COPY或ADD指令时,发送当前目录的全部内容有什么意义呢?ACTUALLY包含生成的图像中当前目录的内容? 如果上下文发送到守护进程以包含在映像中,那么为什么我们需要做这个额外的步骤。 为什么压缩上传/发送/拷贝任务默认不包含指定目录的内容?

例如给定这个目录结构

-rw-r--r-- 1 me me 7 Jun 8 18:52 .dockerignore -rw-r--r-- 1 me me 1.1K Jun 9 12:42 Dockerfile drwxr-xr-x 13 me me 4.0K Jun 8 19:43 myproject 

当我运行这个命令docker build -t user / myproject:2.3。

然后,我希望看到一个myproject目录在生成的图像中的某个地方。 但是,我必须包括

  ADD myproject / 

情况就是如此。

如果构build过程压缩当前目录内容并将其发送到守护程序,那么它会发生什么? 为什么它没有使内容可用于图像?

TL; DR:“因为客户端和守护进程甚至可能不在同一台机器上运行”

dockerd命令是dockerd 客户端 ,它是可以直接在PC(linux)或OSX或Windows下的Linux VM下运行的服务。

问:Docker构build上下文的目的是什么?

从这里 :

如果没有这个“上下文”,守护进程将不会有任何其他的方式来获取ADD或者文件,这可能是好的,因为客户端和守护进程甚至可能不会在同一台机器上运行。除此以外


问:如果构build过程压缩当前目录内容并将其发送到守护进程,那么它会去哪里?

docker守护进程接收压缩的目录并对其进行处理; 在那个时刻存储在哪里并不重要。

问:为什么不让这些内容可用于图像?

想一想:docker怎么知道想把每个文件/目录放在目标映像中? 通过COPY/ADD指令,您可以控制每个指令的放置位置。 你提到的情况只是一个简单的例子,你只有目录,只有目标。