Dockerfile(11) 您所在的位置:网站首页 创建工作目录怎么写 Dockerfile(11)

Dockerfile(11)

2024-06-28 19:52| 来源: 网络整理| 查看: 265

一段话总结完 COPY作用:复制内容到镜像格式:

COPY

详解:复制本地主机的 下内容到镜像中的 ,目标路径不存在时,会自动创建。:可以是 Dockerfile 所在目录的一个相对路径(文件或目录):可以是镜像内绝对路径,或者相对于工作目录(WORKDIR)的相对路径路径:支持正则表达式,

COPY test* /tmp

两种格式代码语言:javascript复制COPY [--chown=:] ... COPY [--chown=:] ["",... ""]--chown

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

COPY 作用COPY 指令从 复制新文件、目录或远程文件 URL,并将它们添加到路径 可以指定多个 资源,但如果它们是文件或目录,则它们的路径被解析为相对于构建上下文的源每个 可能包含通配符,匹配将使用 Go 的 filepath.Match 规则完成简单栗子* 通配符

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

代码语言:javascript复制COPY hom* /mydir/? 通配符

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

代码语言:javascript复制COPY hom?.txt /mydir/重点

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

使用相对路径的栗子代码语言:javascript复制COPY test.txt relativeDir/

等价于

代码语言:javascript复制COPY test.txt /relativeDir/使用绝对路径的栗子

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

代码语言:javascript复制COPY test.txt /absoluteDir/包含特殊字符的文件

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

代码语言:javascript复制COPY arr[[]0].txt /mydir/标志 --from=

将从 from 指定的构建阶段中寻找源文件

代码语言:javascript复制# 第一构建阶段:将仅用于生成 requirements.txt 文件 FROM tiangolo/uvicorn-gunicorn:python3.9 as requirements-stage # 将当前工作目录设置为 /tmp WORKDIR /tmp # 生成 requirements.txt RUN touch requirements.txt # 第二构建阶段,在这往后的任何内容都将保留在最终容器映像中 FROM python:3.9 # 将当前工作目录设置为 /code WORKDIR /code # 从第一个阶段复制 requirements.txt;这个文件只存在于前一个 Docker 阶段,这就是使用 --from-requirements-stage 复制它的原因 COPY --from=requirements-stage /tmp/requirements.txt /code/requirements.txt # 运行命令 RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt COPY 遵循的规则 路径必须在构建的上下文中

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

代码语言:javascript复制# test.txt 是相对路径,相对于构建上下文 COPY test.txt /mkdir/ # 错误写法,文件均不在上下文目录中,并不会被找到 # 这个找的就是构建上下文的上级目录的 test.txt COPY ../test.txt /mkdir/ # 这个找的是本机根目录下的 test.txt COPY /test.txt /mkdir/ 是目录则复制目录的全部内容,包括文件系统元数据不会复制目录本身,只会复制其内容代码语言:javascript复制COPY dir /mydir/ 是任何其他类型的文件则将其与其元数据一起单独复制 以斜杠 / 结尾,它将被视为一个目录,并且 的内容将写入

/base()

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

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

代码语言:javascript复制COPY test1.txt test2.txt /mydir/ 不以斜杠结尾

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

代码语言:javascript复制COPY test.txt /mytext 不存在

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

代码语言:javascript复制COPY test.txt /dir/test/my/注意事项

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

完整练习的 dockerfile代码语言:javascript复制FROM centos # 添加文件到目录下 COPY test.txt /mydir/ # 将文件内容写入 mytest COPY test.txt /mytest # 压缩文件,自动解压 COPY jmeter.log.zip /myzipdir/ # 添加目录 COPY TeamFile / # 其他文件 COPY jmeter.log /mydir/ # 多个文件 COPY test1.txt test2.txt /mydir/ # 通配符,dest 不存在自动创建 COPY test*.txt /mydir/test/ # 特殊字符串 COPY COPY[[]0].txt /mydir/ WORKDIR /data # 相对路径 COPY test.txt test/ADD 和 COPY 的区别和使用场景ADD 支持添加远程 url 和自动提取压缩格式的文件,COPY 只允许从本机中复制文件COPY 支持从其他构建阶段中复制源文件(--from)根据官方 Dockerfile 最佳实践,除非真的需要从远程 url 添加文件或自动提取压缩文件才用 ADD,其他情况一律使用 COPY注意ADD 从远程 url 获取文件和复制的效果并不理想,因为该文件会增加 Docker Image 最终的大小相反,应该使用 curl huo wget 来获取远程文件,然后在不需要它时进行删除


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有