使用dockerfile创建镜像时,肯定会涉及到文件复制、文件下载等操作,这时需要COPY指令来完成。

  COPY 语法

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

  COPY 语义

  · 第二种形式要求路径包括空格。

  · --chown仅支持dockerfile构建Linux容器,Windows容器并不适用。由于LinuxWindows中的用户和用户组不同,因此使用/etc/passwd/etc/group将用户和组名称转换为ID时限制了此功能仅适用于基于Linux操作系统的容器。

  · COPY指令从复制文件、目录到镜像文件系统的。

  · 可以指定多个资源,但如果它们是文件或目录,则它们的路径被解释为相对于构建上下文的源。

  · 每个可以包含通配符,匹配将使用Go语言的filepath.Match规则进行。例如:

  1) *配合任意多个任意字符,匹配hom开头的任意文件。

ADD hom* /mydir/

  2) ?用于匹配单个字符,匹配home.txthoms.txt等等文件。

ADD hom?.txt /mydir/

  · 是一个绝对路径或者相对于WORKDIR的路径,将被复制到目标容器中。例如:

  1) 的值是:/relativeDir/

COPY test.txt relativeDir/

  2) 的值是:绝对路径/absoluteDir/

COPY test.txt /absoluteDir/

  · 当复制文件或目录包含特殊字符(例如:[]),需要进行转义。

  1) 如果为arr[0].txt,则需进入如下转义:

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

  · 除非可选的--chown标志指定给定的用户名、组名或UID/GID组合来请求复制内容的特定所有权,否则所有新文件和目录都将使用UIDGID为0创建。--chown标志的格式允许usernamegroupname字符串,也可以是任意组合的整数UIDGID。提供没有groupname的用户名或没有GIDUID将使用与GID相同的数字UID。如果提供了用户名或组名,容器root文件系统的/etc/passwd/etc/group文件将分别用于执行从名称到整数UIDGID的转换。

ADD --chown=55:mygroup files* /somedir/
ADD --chown=bin files* /somedir/
ADD --chown=1 files* /somedir/
ADD --chown=10:11 files* /somedir/

  · 如果容器root文件系统不包含/etc/passwd/etc/group文件,并且--chown标志中使用了用户名或组名,则~操作将失败。使用数字标识不需要查找,也不依赖于容器根文件系统内容。

  · COPY遵循以下规则:

  1) 路径必须在构建的上下文中;不能复制../something/something,因为docker构建的第一步是将上下文目录(和子目录)发送到docker守护进程。

  2) 如果是一个目录,复制目录的整个内容,包括文件系统元数据。目录本身不被复制,只复制其内容。

  3) 如果是任何其他类型的文件,则单独复制它及其元数据。在这种情况下,如果以一个斜杠/结尾,它将被视为一个目录,的内容将写入/base()。

  4) 如果直接或由于使用通配符指定了多个资源,则必须是一个目录,并且必须以斜杠/结尾。

  5) 如果没有以尾随斜杠结尾,它将被视为常规文件,的内容将写入。

  6) 如果不存在,则会连同路径中所有丢失的目录一起创建。

  COPY 示例

  · 指定为带通配符文件,指定绝对目录。

  1) 进入/securitit/dockerfile/copy目录(根据个人选择,这是本文使用的目录),新增redis.confnginx.confkeepalived.conf,用于dockferfile

  2) 进入/securitit/dockerfile/目录,创建dockerfile文件。

FROM nginx
MAINTAINER Securitit
COPY /copy/*.conf /securitit/
CMD /bin/bash

  3) 执行如下的构建命令,基于dockerfile构建镜像。

docker build -f /securitit/dockerfile/dockerfile -t securitit-nginx-copy:1.0.0.1 .

  4) 查看镜像信息。

docker images

  5) 指定通过dockerfile生成的镜像启动容器。

docker run --name securitit-nginx-copy -it -d -p 80:80 securitit-nginx-copy:1.0.0.1

  6) 查看容器信息。

docker ps -a

  7) 进入容器,确认文件是否已添加到容器内/securitit/目录下。

  从结果可见,redis.confnginx.confkeepalived.conf已从宿主机的/securitit/dockerfile/copy/目录下复制到了容器/securitit/目录下。

  总结

  dockerfile指令中,COPYADD非常相似,实现的功能也十分接近。ADD相比COPY,做了功能增强,可以’完成压缩文件解压并添加到镜像中’和’从URL下载文件到镜像中’。COPY是精简版的ADD指令,如果可以熟练的使用ADD指令,那么COPY指令其实已无太大用处。

  若文中存在错误和不足,欢迎指正!

Dockerfile COPY指令 语法解析相关推荐

  1. Dockerfile ARG指令 语法解析

      无论何种编程语言或脚本中,都不可避免的会应用到变量.dockerfile中使用ARG来定义变量,本文来对ARG指令定义变量进行解析.   ARG 语法: ARG <name>[=< ...

  2. Dockerfile RUN指令 语法解析

      Docker通过dockerfile创建镜像时,RUN和CMD是相当重要的命令,本文对这RUN指令进行解析.   RUN 语法 # shell形式,命令在shell中运行,默认情况下,Linux是 ...

  3. Dockerfile ENV指令 语法解析

      某些应用场景下,需要对Dokcer镜像加入环境变量,这时需要ENV指令.本文本来具体对ENV指令进行解析.   ENV 语法 ENV <key>=<value> ...   ...

  4. Dockerfile ENTRYPOINT指令 语法解析

      系列博文之前讲解过RUN和CMD,其中CMD可以作为容器启动时的默认命令使用,而ENTRYPOINT是位于CMD之上的命令,同样可以可以设置容器启动时的入口点,可以使用ENTRYPOINT做许多系 ...

  5. Dockerfile配置指令详解

    Dockerfile配置指令详解 一.FROM 二.RUN 三.CMD 四.EXPOSE 五.ENV 六.ADD 七.COPY 八.ENTRYPOINT 九.VOLUME 十.USER 十一.WORK ...

  6. Dockerfile文件万字全面解析

    Dockerfile是一个文本文件,包含一些Docker指令.执行docker build,Docker就会执行Dockerfile里面的指令,来自动创建镜像. 用法 Dockerfile里面的指令可 ...

  7. dockerfile 执行原理_DockerFile解析

    一.简介 Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本 构建三步: DockerFile文件 ==> docker build ==> dock ...

  8. Dockerfile常用指令

    FROM FROM指令是最重要的一个并且必须为Dockerfile文件开篇的第一个非注释行,用于为镜像文件构建过程指定基础镜像,后续的指令运行于此基础镜像提供的运行环境 这个基础镜像可以是任何可用镜像 ...

  9. Boost学习之语法解析器--Spirit

    Boost.Spirit能使我们轻松地编写出一个简单脚本的语法解析器,它巧妙利用了元编程并重载了大量的C++操作符使得我们能够在C++里直接使用类似EBNF的语法构造出一个完整的语法解析器(同时也把C ...

最新文章

  1. 教你如何处理Nginx禁止ip加端口访问的问题
  2. WEB文档在线预览解决方案
  3. tp剩余未验证内容-8
  4. html ajax提交表单实例,Ajax提交表单并接收json实例代码
  5. Swagger+AutoRest 生成web api客户端(.Net)
  6. [CQOI2016]手机号码 数位DP
  7. a commit git 参数是什么意思_深入理解Git - 一切皆commit
  8. c++ 共享内存_关于Linux共享内存的实验 [二] - 原因
  9. 32路视频光端机性能指标及视频特性介绍
  10. Atom Latex Settings
  11. IDA动态调试Android的DEX文件
  12. 区块链共识机制优缺点对比都是什么
  13. wordpress插件之baidu-sitemap-generator
  14. python处理时间的标准函数库_使用Python的datetime库处理时间(RPA流程)
  15. 简单易学!一步步带你理解机器学习算法——马尔可夫链蒙特卡罗(MCMC)
  16. python科研向论文检索篇——提取PDF文字以供全文信息检索
  17. 月薪达到1万的web前端工程师,都会些什么呢?(附路线资料)
  18. 各种加密模式在TLS协议中的运用 2 (AEAD:CCM模式)
  19. 博士应该采取什么策略读文献?
  20. ctf web3 30 flag就在这里快来找找吧http://123.206.87.240:8002/web3

热门文章

  1. CSS前端基础知识梳理
  2. Matlab在算法中进行数字比较常用Max函数及Find函数的组合用法
  3. UML设计系列(8):数据库关联关系图
  4. 什么时候是换工作的最佳时机?
  5. Override,OverWrite和Overload的区别和含义
  6. 农产品土特产商城销售网站java ssm毕业设计项目介绍
  7. 论文笔记-infocomm2021-Maximizing the Benefit of RDMA at End Hosts
  8. vue组件间传值: 父传子、子传父、非父子组件传值
  9. 优秀平面设计师的创意思维的训练技巧
  10. 深入浅出的给大家分析下现在做抖音短视频还来得及吗?