docker copy 和add的比较
来源:互联网 发布:超声波动物驱赶器,知乎 编辑:程序博客网 时间:2024/05/21 11:32
相比之下,ADD不会多加一层,会使得镜像的体积少一个JAR那么多,便于传输,特别是 那种网络环境不好的时候,更小的传输量可以说是很大的性能提升
http://blog.csdn.net/small_to_large/article/details/77435468
COPY 复制文件
格式:
COPY <源路径>... <目标路径>
COPY ["<源路径1>",... "<目标路径>"]
COPY
指令将从构建上下文目录中 <源路径>
的文件/目录复制到新的一层的镜像内的 <目标路径>
位置。比如:
COPY package.json /usr/src/app/
<源路径>
可以是多个,甚至可以是通配符,其通配符规则要满足 Go 的 filepath.Match
规则,如:
COPY hom* /mydir/COPY hom?.txt /mydir/
<目标路径>
可以是容器内的绝对路径,也可以是相对于工作目录的相对路径(工作目录可以用 WORKDIR
指令来指定)。目标路径不需要事先创建,如果目录不存在会在复制文件前先行创建缺失目录。
此外,还需要注意一点,使用 COPY
指令,源文件的各种元数据都会保留。比如读、写、执行权限、文件变更时间等。这个特性对于镜像定制很有用。特别是构建相关文件都在使用 Git 进行管理的时候。
ADD 更高级的复制文件
ADD
指令和 COPY
的格式和性质基本一致。但是在 COPY
基础上增加了一些功能。
比如 <源路径>
可以是一个 URL
,这种情况下,Docker 引擎会试图去下载这个链接的文件放到 <目标路径>
去。下载后的文件权限自动设置为 600
,如果这并不是想要的权限,那么还需要增加额外的一层 RUN
进行权限调整,另外,如果下载的是个压缩包,需要解压缩,也一样还需要额外的一层 RUN
指令进行解压缩。所以不如直接使用 RUN
指令,然后使用 wget
或者 curl
工具下载,处理权限、解压缩、然后清理无用文件更合理。因此,这个功能其实并不实用,而且不推荐使用。
如果 <源路径>
为一个 tar
压缩文件的话,压缩格式为 gzip
, bzip2
以及 xz
的情况下,ADD
指令将会自动解压缩这个压缩文件到 <目标路径>
去。
在某些情况下,这个自动解压缩的功能非常有用,比如官方镜像 ubuntu
中:
FROM scratchADD ubuntu-xenial-core-cloudimg-amd64-root.tar.gz /...
但在某些情况下,如果我们真的是希望复制个压缩文件进去,而不解压缩,这时就不可以使用 ADD
命令了。
在 Docker 官方的最佳实践文档中要求,尽可能的使用 COPY
,因为 COPY
的语义很明确,就是复制文件而已,而 ADD
则包含了更复杂的功能,其行为也不一定很清晰。最适合使用 ADD
的场合,就是所提及的需要自动解压缩的场合。
另外需要注意的是,ADD
指令会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。
因此在 COPY
和 ADD
指令中选择的时候,可以遵循这样的原则,所有的文件复制均使用 COPY
指令,仅在需要自动解压缩的场合使用 ADD
。
参考地址(https://yeasy.gitbooks.io/docker_practice)
- docker copy 和add的比较
- docker学习笔记16:Dockerfile 指令 ADD 和 COPY介绍
- docker学习笔记16:Dockerfile 指令 ADD 和 COPY介绍
- Dockerfile中的COPY和ADD指令详解与比较
- copy constructor 和copy assignment operator的比较
- Dockerfile COPY指令和ADD指令的区别
- ArrayList和LinkedList add和remove方法的比较
- Fragment切换 replace 和 add 的比较 以及最佳方案
- Docker和Vagrant的各方面比较[普及分享]
- Dockerfile: ADD vs COPY
- layers.add 和 layers.insert 比较
- OC的深Copy和浅Copy
- shallow copy 和 deep copy 的示例
- BeanUtils和Cglib的Java Bean属性copy功能的性能比较
- 新手入门 介绍ORACLE的Copy命令和create table,insert into的比较
- 新手入门 介绍ORACLE的Copy命令和create table,insert into的比较
- ORACLE的Copy命令和create table,insert into的比较
- ORACLE的Copy命令和create table,insert into的比较
- android插件化,热修复,热更新。
- 【活动】今晚“吃鸡”还是“农药”,游戏背后的程序员告诉你如何造就一个好游戏?
- 为tinycolinux制作应用包
- CSS3动画之loading-3
- C语言ASM汇编内嵌语法zz
- docker copy 和add的比较
- 为tinycolinux创建应用包-toolchain和编译方法
- Innodb间隙锁,细节讲解
- 全面前端资源(1)
- [随手写写] 减少代码的“复制粘贴”——关于函数
- [启发式合并 DP] Atcoder ARC086E. Smuggling Marbles
- python学习之字典
- 杨辉三角
- socket单客户端与服务器