格式:
* COPY [--chown=<user>:<group>] <源路径>... <目标路径> * COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]
和 RUN 指令一样,也有两种格式,一种类似于命令行,一种类似于函数调用。
镜像的定制实际上就是定制每一层所添加的配置、文件
如果我们可以把一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像
那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决
这个脚本就是dockerfile
docker运行容器需要本地存在对应的镜像,如果本地不存在该镜像,docker会从镜像仓库下载该镜像
docker镜像是怎么实现增量的修改和维护的?
每个镜像都由很多层次构成,docker使用Union FS将这些不同的层结合到一个镜像中去
通常UnionFS有两个用户,一方面可以实现不借助LVM、RAID将多个disk挂到同一个目录下,另一个更常用的就是将一个只读的分支和一个可写的分支联合在一起,Live CD正是基于此方法可以允许在镜像不变的基础上允许用户在其上进行一些写操作
docker在OverlayFS上构建的容器也是利用了类似的原理
从docker镜像仓库获取镜像的命令是docker pull,其格式为:
由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。