容器安全技术镜像的使用

镜像的使用

除了 docker pull/push 等常用的命令外,Docker 中操作镜像的一些其它常用操作命令如下,更多镜像操作, 可参考 Docker 官方文档 [19]。
(1)docker export 将容器导出到本地。

  • docker export redis-server -o redis.tar
  • ls
    redis.tar
    (2)docker import 将容器从本地以镜像的方式导入。
  • docker import -m import-test-redis redis.tar sha256:9cc818fc6b5d62f6d05fa0873885bb4b2cefa20aac5de0fb3cc7907086d166b7
  • docker images | grep 9cc
    9cc818fc6b5d 30 seconds ago 244MB
    (3)docker save
    将 ( 一个或多个 ) 镜像导出至本地。
- 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标准格式来了解镜像存储的内容。

容器安全技术镜像的使用_第1张图片
镜像每一层的 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 管理。与绑定挂载相比, 数据卷有以下几个优点:

  • 与绑定挂载相比,数据卷更容易备份或迁移;
  • 可以使用 Docker CLI命令或 Docker API 管理数据卷;
  • 数据卷在 Linux和 Windows 上均可使用;
  • 数据卷可以在多个容器之间更安全地共享;
  • 数据卷驱动程序允许在远程主机或云上存储数据卷、加密卷的内容或添加其它功能;
  • 新数据卷的内容可以由容器预填充。
    另外,与使用容器的读写层保存数据相比,数据卷通常是更好的选择。因为使用数据卷存储不会增加容器的 大小,并且数据卷是持久化的,不会依赖于容器的生命周期。
    14

容器安全技术镜像的使用_第2张图片

参考资料

绿盟 容器安全技术报告

友情链接

CSA 保护云中医疗健康数据隐私

你可能感兴趣的:(安全,docker,容器)