Dockerfile文件编写注意事项
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上下文目录没有关系
- 点赞
- 收藏
- 分享
- 文章举报
- DOCKERFILE编写需要注意事项
- Dockerfile编写的注意事项
- DOCKERFILE注意事项
- springMVC + easyui + $.ajaxFileUpload实现文件上传注意事项
- dockerfile几点注意事项
- 8.[Docker学习]Dockerfile文件的编写
- DOCKERFILE学习及使用注意事项
- Flash中使用Filereference上传文件的一些注意事项
- 实现header file (.h)相应的source file (.cc/.cpp)文件时的注意事项
- Flash中使用Filereference上传文件的一些注意事项
- 脉冲云在线指定Dockerfile文件--如何编写Dockerfile文件
- 编写头文件注意事项
- 使用Docker Toolbox 创建v1.12.6版的Docker虚拟机的方法-注意正确使用本地文件 file:参数的路径名
- *_train_test.prototxt,*_deploy.prototxt,*_slover.prototxt文件编写时注意事项
- 3.docker学习笔记:编写Dockerfile文件
- Dockerfile注意事项
- tolua++ .pkg 文件编写注意事项
- 编写头文件的注意事项
- Dockerfile 文件的编写
- Dockerfile注意事项