Show Table of Contents
第 12 章 Linux 容器
12.1. 使用 Docker 技术的 Linux 容器
Red Hat Enterprise Linux Atomic Host 7.1.4 包括以下更新:
将 docker 软件包升级为 upstream 版本 1.7.1,该版本中包含对版本 1.7 的改进,即包括对 Red Hat Enterprise Linux Atomic Host 7.1.3 中版本 1.6 的各种改进。有关版本 1.6 和 1.7.1 之间修复及功能完整列表日志变更,请查看:https://github.com/docker/docker/blob/master/CHANGELOG.md。另外,Red Hat Enterprise Linux Atomic Host 7.1.4 包含以下变更:
- Docker 容器现在支持 firewalld。如果在该系统中运行 firewalld,则可通过 firewalld 添加规则。如果重新载入 firewalld,则会重新应用该配置。
- Docker 现在将具体容器的 cgroup 信息挂载到
/sys/fs/cgroup目录下。有些应用程序是根据其可用资源量做决定。例如:Java 虚拟机(JVM)会检查它们可以使用的内存,以便分配足够大的池,提高其性能。这样可通过读取/sys/fs/cgroup/memory文件让应用程序了解其最多可使用的内存。 - 现在如果在环回设备中使用设备映射器,
docker run命令会弹出一条警告信息。强烈建议在产品环境中使用dm.thinpooldev作为存储选项。请勿在产品环境中使用loopback。 - 现在可以使用
--init=systemd标签中 systemd 模式中运行容器。如果要将 systemd 作为 PID 1 运行容器,则这个标签会启动所有 systemd 功能,允许其在非特权容器中运行。将container_uuid设定为环境变量,以便 systemd 了解/etc/machine-id文件中保存的内容 。这个文件将容器内的 journald 与外部日志链接。将主机目录挂载到容器中以便 systemd 在将主机日志目录挂载到容器时不需要特权。如果在容器中运行 journald,则主机中的 journalctl 程序就可以显示其内容。将/run目录作为 tmpfs 挂载。然后如果指定--systemd选项,则会在容器中将/sys/fs/cgroup目录自动挂载为只读。 - 改进在容器中使用
docker search命令搜索的体验:- 现在可以在搜索结果中预置索引。
- 可使用注册名作为远程名称前缀。
- 如果不是 IP 地址则可缩短索引名称。
- 添加
--no-index选项避免列出索引名称。 - 更改保留索引后的条目排序方式:可根据
index_name、start_count、registry_name、name和description排序。 - 更改省略索引后的条目排序方式:可根据
registry_name、star_count、name和description排序。
- 可使用 Docker 信息 API 显示配置的注册列表。
Red Hat Enterprise Linux Atomic Host 7.1.3 包括以下更新:
- docker-storage-setup
- docker-storage-setup 现在依赖逻辑卷管理器(LVM)自动扩展其精简池。默认情况下,卷组中 60% 的剩余空间会用于精简池,并根据 LVM 的大小自动增长。精简池占用 60% 后,会以 20% 的速度增长。
- 现在 docker-storage-setup 的默认配置文件为
/usr/lib/docker-storage-setup/docker-storage-setup。可编辑/etc/sysconfig/docker-storage-setup文件覆盖默认配置文件中的设置。 - 删除为创建精简池而为 docker 服务提供裸块设备的支持。现在 docker-storage-setup 服务会创建 LVM 精简池,并将其提供给 docker。
- 将精简池的区块大小从 64K 增加到 512K。
- 默认情况下,root 用户的分区表不会增长。可通过在
/etc/sysconfig/docker-storage-setup文件中设定GROWPART=true选项改变这一行为。 - 现在使用
skip_block_zeroing功能设置精简池。就是说在池中提供新块时,不会将其归零。这样做是出于性能考虑。使用--zero选项可改变这一行为。lvchange --zero y thin-pool - 默认情况下,使用 devicemapper 圆形驱动器的 docker 存储会在环回设备中运行。强烈建议不要使用这个设置,因为它尚不可用于产品环境。会为用户显示警告信息。使用这个选项的用户可使用
dm.no_warn_on_loop_devices=true标签跳过这个警告。
- 有关在使用 Docker 格式化的容器中处理存储的关系:
- 添加使用 SELinux 验证的 NFS 卷插件。这包括在以 NFS 挂载的 GlusterFS 中使用 NFS 卷插件。
- 添加只为 NFS 卷插件验证的持久卷支持。
- 添加使用 SELinux 验证的本地存储(HostPath 卷插件)。(需要本文档中描述的临时解决方案)
- 添加使用 SELinux 验证的 iSCSI 卷插件。
- 添加使用 SELinux 验证的 GCEPersistentDisk 卷插件。(需要本文档中描述的临时解决方案)
Red Hat Enterprise Linux Atomic Host 7.1.2 包括以下更新:
- docker-1.6.0-11.el7
- 完全重新架构后的注册表以及 Docker 支持的注册表 API,可显著提高性能及可靠性。
- 新的日志驱动程序 API 可让您向添加到 docker 程序的其他系统发送容器日志。在
docker run命令中添加--log driver选项,该选项可使用三个子选项:JSON 文件、syslog 或 none。可在包含非重要详细日志的应用程序中使用none选项。 - 现在可在提交和导入时使用 Dockerfile 说明。这样还添加了在运行的映像中进行修改而无需创建整个映像的功能。可使用
commit --change和import --change选项指定应用于新映像的标准变更。这些是 Dockerfile 句法中的表达式,并可用于修改映像。 - 这个发行本添加了自定义 cgroup 支持。可使用
--cgroup-parent标签提供运行容器的具体 cgroup。这样就可以创建并管理 cgroup 本身。可为那些 cgroup 规定自定义资源,并将容器放在通用上级组中。 - 现在可在配置 Docker 守护进程时,使用这个更新为所有容器指定默认无限设置。例如:
这个命令为所有容器设定了一个子进程软限制(1024)和一个子进程硬限制(2048)。可为不同的无限值多次设定这个选项,例如:docker -d --default-ulimit nproc=1024:2048
可在创建类似如下容器时覆盖这些设置:--default-ulimit nproc=1024:2408 --default-ulimit nofile=100:200
这样就会覆盖守护进程使用的默认 nproc 值。docker run -d --ulimit nproc=2048:4096 httpd - 使用
--block-registry标签阻止注册表的功能。 - 支持一次搜索多个注册表。
- 将本地映像推入公共注册表时需要确认。
- 短名称会在本地根据按顺序配置的注册表列表解析,docker.io 注册表在最后。永远使用完全限定域名提取。
Red Hat Enterprise Linux Atomic Host 7.1.1 包括以下更新:
- docker-1.5.0-28.el7
- IPv6 支持:可用于全局路由及本地链接地址支持。
- 只读容器:这个选项只用于防止将容器中的应用程序写入整个文件系统。
- 统计 API 及端点:现在可统计容器串流实时 CPU、内存、网络 IO 及块 IO 数据。
- 使用
docker build -f docker_file命令指定用于 docker 构建的 dockerfile 以外的其他文件。 - 可在非限定请求和搜索中指定要使用的附加注册表。之前只能在公用 Docker 集线器中搜索非限定名称。
- 可使用
--block-registry=<registry>标签阻断与某些注册表之间的沟通。这包括阻断公用 Docker 集线器的功能,以及阻断指定注册表以外的所有集线器的功能。 - 推入公共注册表时要求确认。
- 现在列出时所有存储库均为完全限定。
docker images输出结果会为所有请求的映像列出源注册表名称。docker search输出会为所有结果列出源注册表名称。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.