docker copy 和add的比较
2017-12-11 20:38
232 查看
相比之下,ADD不会多加一层,会使得镜像的体积少一个JAR那么多,便于传输,特别是 那种网络环境不好的时候,更小的传输量可以说是很大的性能提升
http://blog.csdn.net/small_to_large/article/details/77435468
格式:
此外,还需要注意一点,使用
Git 进行管理的时候。
比如
引擎会试图去下载这个链接的文件放到
如果
在某些情况下,这个自动解压缩的功能非常有用,比如官方镜像
但在某些情况下,如果我们真的是希望复制个压缩文件进去,而不解压缩,这时就不可以使用
在 Docker 官方的最佳实践文档中要求,尽可能的使用
另外需要注意的是,
因此在
参考地址(https://yeasy.gitbooks.io/docker_practice)
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 scratch ADD 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)
相关文章推荐
- Dockerfile 指令 ADD 和 COPY介绍
- docker学习笔记16:Dockerfile 指令 ADD 和 COPY介绍
- Dockerfile中ADD和COPY的简单区分
- Dockerfile: ADD vs COPY
- docker copy vs add
- docker学习笔记16:Dockerfile 指令 ADD 和 COPY介绍
- Dockerfile中的COPY和ADD指令详解与比较
- docker学习笔记16:Dockerfile 指令 ADD 和 COPY介绍
- Docker Dockerfile COPY vs ADD
- Dockerfile 中的 COPY 与 ADD 命令
- 详解Dockerfile 中的 COPY 与 ADD 命令
- Dockerfile创建自定义Docker镜像以及CMD与ENTRYPOINT指令的比较
- copy_to_user,copy_from_user,get_user,put_user函数用法比较
- Hadoop put、copyFromLocal文件传输命令性能比较
- 关于string::copy()的比较详细的示例
- C# 方便的复制/比较物件内数据的方法(Object Copy / Compare)
- ORACLE的Copy命令和create table,insert into的比较
- list.add并不是copy
- Fragment切换 replace 和 add 的比较 以及最佳方案
- mysql批量插入addBatch()与addBatch(sql)比较