作者:林秋伟左婷_894 | 来源:互联网 | 2023-02-01 16:52
Docker构建上下文的目的是什么?我从文档中了解到,它是将整个内容发送到docker守护程序的"入口"点.但是,假设在示例中提供的默认用例,当我们还必须在Dockerfile中显式包含COPY或ADD指令时,以及在生成的图像中包含当前目录的内容时,发送当前目录的全部内容的重点是什么? ?如果将上下文发送到守护程序以包含在映像中,那么为什么我们需要执行此额外步骤.为什么压缩的上传/发送/复制任务默认不包含指定目录的内容?
例如,给定这个目录结构
-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> Robert..:
TL; DR:"因为客户端和守护进程甚至可能无法在同一台机器上运行"
该docker
命令是Docker客户端,该dockerd
服务可以直接在您的PC(Linux)或OSX或Windows下的Linux VM下运行.
问:Docker构建上下文的目的是什么?
从这里:
也许会提到这必须以这种方式发生,因为客户端和守护进程甚至可能不在同一台机器上运行,因此如果没有这个"上下文",守护进程机器将没有任何其他方式来获取ADD文件或除此以外
问:如果构建过程压缩当前目录内容并将其发送到守护程序,那么它在哪里?
docker守护程序接收压缩目录并动态处理它; 在那个时刻存储在哪里并不重要.
问:为什么不将该内容用于图像?
想一想:docker如何知道您希望将每个文件/目录放在目标映像中的哪个位置?使用COPY/ADD
指令,您可以控制每个指令的位置.你提到的情况只是一个简单的例子,你只有目录和目标.
"因为客户端和守护进程可能甚至不能在同一台机器上运行",即使情况并非如此,这似乎是一个不好的理由,尤其是在AIUI之后,它们大部分时间都在同一台机器上.Docker也可以只根据`COPY`命令发送文件.