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

时间:2017-06-09 19:49:29

标签: docker build dockerfile

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

e.g。鉴于此目录结构

-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 /

就是这样。

如果构建过程压缩当前目录内容并将其发送到守护程序,那么它在哪里?为什么不在图像中使用该内容?

1 个答案:

答案 0 :(得分:24)

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

docker命令是dockerd docker client ,它是可以直接在您的PC(linux)或OSX下的Linux VM下运行的服务,或者视窗。

  

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

来自here

  

也可能会提到这必须以这种方式发生,因为客户端和守护进程可能甚至不能在同一台机器上运行,因此如果没有这个“上下文”,守护进程机器将没有任何其他方式来获取文件对于ADD或其他

  

问:如果构建过程压缩当前目录内容并将其发送到守护程序,它会在哪里发生?

docker守护程序接收压缩目录并动态处理它;在那一刻存储的地方并不重要。

  

问:为什么不能在图像中使用该内容?

想一想:docker如何知道想要将每个文件/目录放在目标图像中?使用COPY/ADD指令,您可以控制每个指令的放置位置。您提到的案例只是一个简单的例子,您只有目录而且只有目标。