Docker构建上下文

转载注明出处[ https://www.jianshu.com/p/5f79b573c2fb ]

很多新手对于编译镜像时所输入命令中的 . 表示很疑惑,其实这个是在编译时构建docker上下文路径。

什么是上下文?

首先需要理解build命令的工作原理。

Docker是cs架构,也就是docker在运行时分为服务端(docker引擎)和客户端。用户在客户端所输入的一系列以docker开头的命令都是在通过一组RestAPI在远程与docker引擎交互。因此,虽然看起来我们是在本地直接操作docker,但是其实质是在远程调用并执行。基于这样的设计,我们很轻松地操作远端服务器上的Docker引擎。

dockerfile中经常会有ADD或是COPY这样拷贝文件的指令。而build的过程中,服务端的docker引擎需要知道你本地文件的路径,因此引入了上下文概念。

当在build命令中指定了编译路径时,那么docker引擎会将该路径下的所有文件打包,然后上传至docker引擎,此时,docker服务端就收到了这个上下文的路径内容,对其展开便能够看到所有该路径下的文件。

COPY ./test.txt /etc/
COPY test.txt /etc/

上面的写法表达同样的意思,就是复制上下文目录中的test.txt文件到镜像下的etc目录中。

因此,COPY这类指令中的源文件的路径都是相对路径。这也是初学者经常会问的为什么 COPY ..test.txt /etc/或者 COPY /opt/xxxx /app 无法工作的原因,因为这些路径已经超出了上下文的范围,Docker 引擎无法获得这些位置的文件。如果真的需要那些文件,应该将它们复制到上下文目录中去。

注意事项

有人可能会觉得上下文路径就是Dockerfile所在的路径,并非如此。
默认情况下建议将Dockerfile和所需的各种文件以及包放在同一个目录下,理所当然此时所构建的上下文路径就是指Dockerfile所在的路径。但是并不是一定要这样做,-f 参数可以指定Dockerfile的所在路径以及名字,但是大多时候都是使用默认的名字即可。

使用时注意,不要将Dockerfile置于根目录下进行编译,你会发现整个镜像会将你的磁盘进行打包!!!
最佳实践是建一个空目录,创建Dockerfile,并将你要用的文件和所有包置于该目录下。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,853评论 18 139
  • 最近公司项目上线原因,一直加班。没有时间更新文章。隔壁部门需要我提供sdk的打包的支持,所以一直在学习docker...
    若与阅读 464评论 0 8
  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 10,529评论 0 120
  • 老师: 顾神钢,你的蜗牛为啥长得这么怪? 学生: 蜗牛慢慢长大,有时要脱壳,就暂时居住在田螺壳,或者其它壳里。我的...
    曹老师画室阅读 301评论 0 1
  • 前段时间陪同学去看《我的少女时代》,觉得挺有意思的一部电影,跟《那些年》风格有些像不过又不尽相同。望着台下为男神出...
    July碎碎念阅读 450评论 0 0