首页 文章

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

提问于
浏览
22

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 回答

  • 19

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

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

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

    来自here

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


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

    docker守护程序接收压缩目录并动态处理它;在那个时刻存储在哪里并不重要 .

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

    想一想:docker怎么知道 you 想要将每个文件/目录放在目标图像中?使用 COPY/ADD 指令,您可以控制每个指令的放置位置 . 你提到的情况只是一个简单的例子,你只有目录和目标 .

相关问题