其他分享
首页 > 其他分享> > Dockerfile(10) - ADD 指令详解

Dockerfile(10) - ADD 指令详解

作者:互联网

一段话总结完 ADD

 

两种格式

ADD [--chown=<user>:<group>] <src>... <dest>
ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]

  

--chown

仅适用于 linux 上的 dockerfile,在 window 上没有用户、组的概念

 

ADD 作用

 

简单栗子

* 通配符

把所有 hom 开头的文件添加到镜像文件系统的 /mydir/ 目录下

ADD hom* /mydir/

 

? 通配符

? 匹配 0 或 1 个字符,比如会把 home.txt 文件添加到 /mydir/ 目录下

ADD hom?.txt /mydir/

  

重点

<dest> 是绝对路径,或相对于 WORKDIR 的路径,源将在目标容器内复制到该路径中

 

使用相对路径的栗子

ADD test.txt relativeDir/

等价于

ADD test.txt <WORKDIR>/relativeDir/

 

使用绝对路径的栗子

将 test.txt 添加到 /absoluteDir/ 目录下

ADD test.txt /absoluteDir/

 

包含特殊字符的文件

添加名为 arr[0].txt 的文件

ADD arr[[]0].txt /mydir/

  

ADD 遵循的规则

<src> 路径必须在构建的上下文中

不能添加  ../something 、 /something ,因为 docker 构建的第一步是将上下文目录(和子目录)发送到 docker 守护进程

# test.txt 是相对路径,相对于构建上下文
ADD test.txt /mkdir/

# 错误写法,文件均不在上下文目录中,并不会被找到
# 这个找的就是构建上下文的上级目录的 test.txt
ADD ../test.txt /mkdir/

# 这个找的是本机根目录下的 test.txt
ADD /test.txt /mkdir/

 

<src> 是一个 URL

ADD http://example.com/foobar /

 

<src> 是目录

ADD dir /mydir/

 

<src> 是压缩格式(gzip、bzip2、identity、xz)的本地 tar 文件

 

<src> 是任何其他类型的文件

 

指定了多个 <src> 资源,或者由于使用了通配符

则 <dest> 必须是一个目录,并且必须以斜杠 / 结尾

ADD test1.txt test2.txt /mydir/

  

<dest> 不以斜杠结尾

它将被视为常规文件,并且 <src> 的内容将写入 <dest>

ADD test.txt /mytext

 

<dest> 不存在

路径中所有缺失的目录都会自动创建

ADD test.txt /dir/test/my/

 

注意事项

<src> 的内容发生变化,第一个遇到的 ADD 指令将使来自 Dockerfile 的所有后续指令的缓存无效,这包括使 RUN 指令的缓存无效

 

完整练习的 dockerfile

FROM centos
# 添加文件到目录下
ADD test.txt /mydir/

# 将文件内容写入 mytest
ADD test.txt /mytest

# 压缩文件,自动解压
ADD jmeter.log.zip /myzipdir/

# 添加目录
ADD TeamFile /

# 其他文件
ADD jmeter.log /mydir/

# 多个文件
ADD test1.txt test2.txt /mydir/

# 通配符,dest 不存在自动创建
ADD test*.txt /mydir/test/

# 特殊字符串
ADD add[[]0].txt /mydir/

WORKDIR /data

# 相对路径
ADD test.txt test/

 

ADD 和 COPY 的区别和使用场景

 

注意

 

标签:10,文件,mydir,ADD,test,txt,Dockerfile,目录
来源: https://www.cnblogs.com/poloyy/p/15475100.html