点击蓝色“DevOps架构实战”关注我哟
分享到“朋友圈”,每天上午 07:30,干货推送!
ADD指令的功能是将主机构建环境(上下文)目录中的文件和目录、以及一个URL标记的文件 拷贝到镜像中。
其格式是:ADD 源路径 目标路径
ADD<src>...<dest>
ADD ["<src>"..."<dest>"]
ADD指令和copy的使用格式一致,不同这处:
ADD的优点:在执行源文件 为tar压缩文件的话,压缩格式为gzip,bzip的情况下会自动复制并解压到目录路径,
ADD的缺点: 在不解压的前提下,无法复制tar的压缩文件,会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。
注意事项:
1、如果源路径是个文件,且目标路径是以 结尾, 则docker会把目标路径当作一个目录,会把源文件拷贝到该目录下。
如果目标路径不存在,则会自动创建目标路径。
2、如果源路径是个文件,且目标路径是不是以 / 结尾,则docker会把目标路径当作一个文件。
如果目标路径不存在,会以目标路径为名创建一个文件,内容同源文件;
如果目标文件是个存在的文件,会用源文件覆盖它,当然只是内容覆盖,文件名还是目标文件名。
如果目标文件实际是个存在的目录,则会源文件拷贝到该目录下。注意,这种情况下,最好显示的以 / 结尾,以避免混淆。
3、如果源路径是个目录,且目标路径不存在,则docker会自动以目标路径创建一个目录,把源路径目录下的文件拷贝进来。
如果目标路径是个已经存在的目录,则docker会把源路径目录下的文件拷贝到该目录下。
4、如果源文件是个归档文件(压缩文件),则docker会自动帮解压。
ADD包含类似tar的解压功能,如果只是复制文件 推荐使用copy,如替换
替换/usr/share/nginx/html/下的index.html
[root@k8s-node2 ~]# cat dockerfile
FROM centos7
MAINTAINER hahashen
RUN yum -y install nginx
COPY index.html /usr/share/nginx/html/
EXPOSE 8088
ENTTRYPOINT ["/usr/sbin/nginx", "-g","daemon off;"]
[root@k8s-node2 ~]# docker build -t="dockerfile/nginx:v1" .
[root@k8s-node2 ~]# docker run -itd -p 80 dockerfile/nginx:v1 /bin/bash
如果是源码安装nginx.tar.gz ,只能使用:
ADD nginx.tar.gz /opt
