docker 镜像构建上下文理解
发布日期:2021-05-06 23:58:26 浏览次数:20 分类:技术文章

本文共 1191 字,大约阅读时间需要 3 分钟。

1.Dockerfile 中上下文的理解

利用Dockerfile build镜像的时候 末尾总是有一个 .

. 表示当前目录,而 Dockerfile就在当前目录

首先要说明一下docker build 的工作原理。 引用百度的一段话:

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

当我们进行镜像构建的时候,经常会需要将一些本地文件复制进镜像。而 docker build 命令构建镜像,其实并非在本地构建,而是在服务端,也就是 Docker 引擎中构建的。

 这就引入了上下文的概念。当构建的时候,用户会指定构建镜像上下文的路径, docker build 命令得知这个路径后,会将路径下的所有内容打包,然后上传给 Docker 引擎。这样Docker 引擎收到这个上下文包后,展开就会获得构建镜像所需的一切文件。

1.1当前路径为上下文路径

举例1:

如果不额外指定 Dockerfile 的话,会将上下文目录下的名为 Dockerfile 的文件作为 Dockerfile。
这只是默认行为,实际上 Dockerfile 的文件名并不要求必须为 Dockerfile ,而且并不要求必须位于上下文目录中,比如可以用 -f /文件路径 参数指定某个文件作为 Dockerfile 。
在这里插入图片描述

我们现在利用当前路径下的Dockerfile 构建镜像,

docker build  -t mycentos/centos:1.0 .

-t 为命名空间 为将来的镜像起一个名字

centos:1.0 表示为1.0版本
. 表示当前路径就是上下文路径。会从当前路径搜索有没有Dockerfile文件

在这里插入图片描述

可以看到Sendding build context to Docker daemon .
**一般来说,应该会将 Dockerfile 置于一个空目录下,或者项目根目录下。**如果该目录下没有所需文件,那么应该把所需文件复制一份过来。
因为如果你当前路径下有过多文件,打包发到docker deamon服务器端可能会有几个G的文件,时间过长!我这里仅仅只有几KB 。

1.2指定路径为上下文

根目录下,创建dockerFileContext 文件,下面有一个dockerfile.txt

在这里插入图片描述
回到/root 下

docker build -f /dockerFileContext/dockerfile.txt -t mycentos/centos:2.0 /dockerFileContext/

在这里插入图片描述

上一篇:Golang互斥锁和读写锁的性能差异
下一篇:MySQL数据库四种隔离级别的演示

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2025年03月23日 11时16分56秒