您的位置:首页 > 运维架构 > Docker

Dockerfile文件编写注意事项

2020-02-05 06:12 190 查看

Dockerfile文件编写注意事项

1.什么是上下文

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

Docker是cs架构,也就是docker在运行时分为服务端(docker引擎)和客户端。用户 在客户端所输入的一系列以docker开头的命令都是在通过一组RestAPI在远程与docker 引擎交互。因此,虽然看起来我们是在本地直接操作docker,但是其实质是在远程调用 并执行。基于这样的设计,我们很轻松地操作远端服务器上的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 引擎无法获得这些位置的文件。如果真的需要那些文件,应该将它们复制到上下文目录中去。
/划重点/ build上下文的根目录应该就是指的是当前目录,如果加了 -f参数则表示 -f 后面所指的目录就是上下文的跟目录。

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

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

2.COPY

在使用 docker build 命令通过 Dockerfile 创建镜像时,会产生一个 build 上下文(context)。所谓的 build 上下文就是 docker build 命令的 PATH 或 URL 指定的路径中的文件的集合。在镜像 build 过程中可以引用上下文中的任何文件,比如我们要介绍的 COPY 和 ADD 命令,就可以引用上下文中的文件。

默认情况下 docker build -t testx . 命令中的 . 表示 build 上下文为当前目录。当然我们可以指定一个目录作为上下文,比如下面的命令:

$ docker build -t testx /home/nick/hc

我们指定 /home/nick/hc 目录为 build 上下文,默认情况下 docker 会使用在上下文的根目录下找到的 Dockerfile 文件。

COPY 和 ADD 命令不能拷贝上下文之外的本地文件
与 WORKDIR 协同工作

WORKDIR /app

该命令只表示指定container的指定目录为 /app,与build上下文目录没有关系

  • 点赞
  • 收藏
  • 分享
  • 文章举报
qq_35744742 发布了1 篇原创文章 · 获赞 0 · 访问量 11 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: