许多同学不知道Dockerfile应该如何写,不清楚Dockerfile中的指令分别有什么意义,能达到什么样的目的,接下来我将在容器化专栏中详细的为大家解释每一个指令的含义以及用法。

专栏订阅传送门https://blog.csdn.net/qq_38220908/category_11989778.html

指令不区分大小写 。但是,按照惯例,它们应该是大写的,以便更容易地将它们与参数区分开来。(引用至官方文档>>>)

使用Dockerfile构建Springboot项目

Docker官方文档 - COPY

Dockerfile命令详解之 FROM

Dockerfile命令详解之 ARG


语法

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

或者

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

<src>:相对路径,指的是相对于宿主机(这里指的是安装有Docker引擎的那台服务器)上构建目录的文件路径

<dest>:指的是容器内的路径,如果是相对路径,则是相对于WORKDIR的路径

注意:

1、--chown选项只适用于构建liunx类型的容器,不适用于windows类型的容器,因为用户组和所有权的概念不能在liunx和windows之间做转换。

2、第二种命令格式主要用于路径中包含空格的情况!

3、<src>以相对路径指定文件,文件必须在当前上下文之内,不能使用COPY ../something  /something

举个例子:

如果我们有一个Dockerfile放在/usr/local目录下,这时候,我们需要将/usr/local/app/hello.jar拷贝到容器WORKDIR下的build目录中,我们的Dockerfile可以这样写:

FROM openjdk:11
WORKDIR /app
COPY app/hello.jar build/

这里的app/hello.jar是写的宿主机的相对路径,表示的是相对于构建目录的路径。此时构建目录是/usr/local,所以<src>实际上的绝对路径就是:/usr/local/app/hello.jar

这里的build/是写的容器内的相对路径,表示的是相对于WORKDIR的路径。此时WORKDIR的路径是/app,所以<dest>实际上的绝对路径就是:/app/build/

COPY指令路径通配符用法

COPY指令中也可以使用通配符,复制匹配到的文件。

比如:我要将/usr/local/app下的所有jar文件复制到容器中的/app/build/目录下,我们可以这样写Dockerfile

FROM openjdk:11
WORKDIR /app
# 匹配以jar为后缀的文件
COPY app/*.jar build/

我们也可以通过?符号,匹配单个字符,比如使用指令 COPY boo?.txt  /app/build ,就可以复制Dockerfile当前文件夹下 book.txt , boom.txt等等符合规则的文件。

注意:

如果文件中含有特殊字符,比如[或者]这样的字符,我们需要按照Golang的规则进行通配符的转换。比如文件arr[0].text 就需要写成COPY arr[[]0].txt /app/build/

关于[--chown]可选项

我们使用COPY指令,UID和GUI默认为0,等同于 COPY --chown=0:0  a.file b.file,我们可以利用--chown指定文件的用户ID和组ID,也可以直接指定用户名和组名,比如以下几种写法都是正确的:

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

当然,如果你的容器中压根没有/etc/passwd,也没有/etc/group,那么--chown的指定会导致COPY指令的失败。

增强语义之 COPY --link

COPY --link会将你复制的文件放在一个空目录中,并将此目录转换为一个独立的层,并链接到上一阶段的构建中。

比如:

FROM alpine
COPY --link /usr/local/app/*.jar /app/build/

就相当于:

FROM alpineFROM scratch
COPY /usr/local/app/*.jar /app/build/

并且将构建出来的两层合并到一起。

使用COPY --link将重用之前生成的构建并合并到新层之上。这也意味着,当基本映像收到更新时,您可以轻松地重新设置映像的基础,而不必再次执行整个构建!!

一般来说推荐使用COPY --link,以提供更好的构建体验。

[1]  感谢大佬 @kenllf 的斧正

Dockerfile命令详解之 COPY相关推荐

  1. Dockerfile命令详解

    使用docker就会避免不了的要做各种镜像,就会用到dockerfile,记录一下dockerfile的主要命令 1.主要组成部分     dockerfile执行build命令时,是从上倒下依次执行 ...

  2. Docker(三):Dockerfile 命令详解

    上一篇文章Docker(二):Dockerfile 使用介绍介绍了 Dockerfile 的使用,这篇文章我们来继续了解 Dockerfile ,学习 Dockerfile 各种命令的使用. Dock ...

  3. Dockerfile 命令详解

    使用 Docker 就会避免不了的要做各种镜像,就会用到 Dockerfile,记录一下 Dockerfile 的主要命令 1.主要组成部分 Dockerfile 执行 build 命令时,是从上到下 ...

  4. Dockerfile命令详解之 ARG

    许多同学不知道Dockerfile应该如何写,不清楚Dockerfile中的指令分别有什么意义,能达到什么样的目的,接下来我将在容器化专栏中详细的为大家解释每一个指令的含义以及用法. 专栏订阅传送门h ...

  5. linux cpio(copy in/out) 命令详解

    linux cpio(copy in/out) 命令详解 功能说明:备份文件. 语 法:cpio [-0aABckLovV][-C <输入/输出大小>][-F <备份档>][- ...

  6. Dockerfile中CMD和ENTRYPOINT命令详解

    原文:https://m.jb51.net/article/136264.htm Dockerfile中CMD和ENTRYPOINT命令详解 发布时间:2018-03-12 11:46:00 作者:s ...

  7. Dockerfile 指令详解1

    Dockerfile 指令详解 我们已经介绍了 FROM,RUN,还提及了 COPY, ADD,其实 Dockerfile 功能很强大,它提供了十多个指令.下面我们继续讲解其他的指令. COPY 复制 ...

  8. Docker - Docker Container及Container命令详解

    Docker - Docker Container及Container命令详解 什么是Docker容器(Docker Container) 上一篇博客介绍了Docker镜像(Docker Image) ...

  9. docker常用命令详解

    docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...

最新文章

  1. python列表元素交换位置_python删除列表元素5种方法,你会的是错误法还是最优解?...
  2. R.drawable 转 bitmap
  3. 近世代数--域--域的一些例子
  4. java实现续打功能_浅谈报表工具的打印方案
  5. SPI通信原理---STM32F4--HAL
  6. 计算机科学与技术科研论文,计算机科学与技术学院2007年度科研论文一览表
  7. 归纳下js面向对象的几种常见写法
  8. HCIE Security SSL 备考笔记(幕布)
  9. ADO.NET五大对象详解(转)
  10. 日记 [2008年01月05日]NTP 服务器
  11. Action为何要继承ActionSupport类
  12. 第一章 基于STM32核心板的电路设计与制作流程
  13. 大学计算机知识竞赛幽默主持词,知识竞赛幽默主持词.docx
  14. 《视觉SLAM十四讲》笔记摘抄
  15. win10安装jdk
  16. 某知名网络安全公司的渗透测试工程师面试题实战汇总
  17. 快速给网站加一个赞赏码功能
  18. FPGA之VGA转HDMI之编码模块的编写
  19. 有关推挽输出、开漏输出、复用开漏输出、复用推挽输出
  20. 解析信号与Matlab hilbert函数

热门文章

  1. Java基础教程更新
  2. friendly发音_friendly是什么意思_friendly的翻译_音标_读音_用法_例句_爱词霸在线词典...
  3. mysql dump csv_利用mysqldump命令导出为csv格式文件
  4. [Codeforces 997C]Sky Full of Stars(排列组合+容斥原理)
  5. I.MX6ULL裸机驱动开发四种方式总结
  6. linux 下字体修改
  7. 南邮计算机学院在哪里,南邮计算机学院 | 手游网游页游攻略大全
  8. 用纯JavaScript制作扫雷游戏-2
  9. WPF RichTextBox·绑定数据
  10. windows上,cmd终端上一次执行多条指令