赞
踩
除了 docker pull/push 等常用的命令外,Docker 中操作镜像的一些其它常用操作命令如下,更多镜像操作, 可参考 Docker 官方文档 [19]。
(1)docker export 将容器导出到本地。
- docker images
REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 3c5a05123222 4 days ago 109MB redis latest 71a81cb279e3 2 weeks ago 83.4MB
- docker save nginx redis -o test.tar
- ls
test.tar
在 Linux系统中 Docker 的数据默认存放在 /var/lib/docker 中,基于不同的系统又有不同的存储驱动、不同 的目录结构。本文以 OCI标准格式来了解镜像存储的内容。
镜像每一层的 ID是该文件内容的哈希校验值,作为该层的唯一标识。获取镜像后,会使用以下方式索引镜像: 首先读取镜像的 manifests,根据 manifests 文件中 config 的 sha256 码,得到镜像 config 文件,遍历 manifests 里面的所有 layer,根据其 sha256 码在本地查找,拼出完整的镜像。
理想情况下,使用挂载卷来存储高读写的目录,很少将数据直接写入容器的可写层。但是,总有些特殊需求 需要直接写入容器的可写层。这时候就需要存储驱动来作为容器和宿主机之间的媒介。Docker 依靠驱动技术来 管理镜像和运行它们的容器间的存储和交互。
目前,Docker 支持 AUFS、BtrFS、Device Mapp
er、OverlayFS、ZFS 五种存储驱动 [20]。没有单一的存储驱 动适合所有的应用场景,要根据不同的场景选择合适的存储驱动,才能有效提高 Docker 的性能。
特点 | 优点 | 缺点 | 适用场景 | |
---|---|---|---|---|
AUFS | 联合文件系统 未并入内核主线 文件级存储 | Docker 的第一个存储驱动,比 较稳定,且在大量的生产环境 中实践过,有较强的社区支持 | 有多层,写时复制操作时,如果文 件比较大且存在比较低的层,可能 会慢一些 | 大并发、少 I/O 的场景 |
OverlayFS | 联合文件系统 并入内核主线 文件级存储 | 只有两层 | 不管修改的内容大小,都会复制整 个文件。对大文件进行修改要比小 文件修改消耗更多的时间 | 大并发、少 I/O 的场景 |
Device Mapper | 并入内核主线 块级存储 | 无论是大文件还是小文件,修 改时都复制需要修改的块,并 不是整个文件 | 不支持共享存储,当有多个容器读 同一个文件时,需要生成多个副本。 在很多容器启停的情况下可能会导 致硬盘溢出 | 适合 I/O 密集 的场景 |
BtrFS | 并入内核主线 文件级存储 | 直接操作底层设备,支持动态 添加设备 | 不支持共享存储,标识当有多个容 器读同一个文件时,需要生成多个 副本 | 不适合在高容 器密度的 PaaS 平台上使用 |
ZFS | 把所有设备集中 到一个存储池中 进行管理 | 支持多个容器共享一个缓存 块,适合大内存的环境 | 写时复制使碎片化问题更加严重, 文件在硬盘上的物理地址会变得不 再连续,顺序读会变得性能比较差 | 适合 PaaS 和 高密度的场景 |
通常,有状态的容器都有数据持久化存储的需求。前一节提到过,文件系统的改动都是发生在最上面的可读 写层。在容器的生命周期
内,它是持续的,包括容器被停止后。但是,当容器被删除后,该数据层也随之被删除了。因此,Docker 采用数据卷(Volume)的形式向容器提供持久化存储。数据卷是 Docker 容器数据持久化存储 的首选机制。绑定挂载(Bind Mounts)依赖于主机的目录结构,但数据卷是由 Docker 管理。与绑定挂载相比, 数据卷有以下几个优点:
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。