介绍
在本实验中,你将学习如何使用 docker container update 命令动态修改运行中 Docker 容器的资源限制和重启策略。首先,你将创建一个带有初始 CPU 和内存限制的容器。
创建容器后,你将探索如何更新容器的 CPU 份额和内存限制以调整其资源分配。最后,你将学习如何修改容器的重启策略,控制 Docker 在不同场景下处理容器重启的方式。通过这个动手实践,你将体验到 Docker 管理容器资源的灵活性和强大功能。
创建带初始资源限制的容器
在本步骤中,你将学习如何创建 Docker 容器并为其设置初始的 CPU 和内存资源限制。资源限制对于防止单个容器占用主机上的所有可用资源非常重要,这可能会影响其他容器和主机本身的性能。
首先,让我们从 Docker Hub 拉取 ubuntu 镜像。该镜像将作为我们容器的基础。
docker pull ubuntu:latest
你应该能看到显示镜像正在被拉取和提取的输出信息。
现在,让我们创建一个名为 my-limited-container 的容器并设置特定的资源限制。我们将使用 docker run 命令配合 --cpus 和 --memory 参数。
--cpus 参数用于限制容器可以使用的 CPU 资源量。该值是一个浮点数,表示 CPU 核心数。例如 --cpus 0.5 表示容器最多可以使用半个 CPU 核心。
--memory 参数用于限制容器可以使用的内存量。该值可以指定为字节(bytes)、千字节(k)、兆字节(m)或千兆字节(g)。例如 --memory 512m 表示限制容器使用 512 兆字节内存。
在本示例中,我们将创建一个运行 sleep infinity 命令的容器,该命令会使容器无限期保持运行状态。我们将限制其 CPU 使用量为 0.5 个核心,内存使用量为 256 兆字节。
docker run -d --name my-limited-container --cpus 0.5 --memory 256m ubuntu:latest sleep infinity
让我们分解这个命令:
docker run:该命令用于创建并启动一个新容器-d:该参数使容器在后台运行(分离模式)--name my-limited-container:为容器指定名称my-limited-container--cpus 0.5:限制容器的 CPU 使用量为 0.5 个核心--memory 256m:限制容器的内存使用量为 256 兆字节ubuntu:latest:指定要使用的 Docker 镜像(最新版 Ubuntu)sleep infinity:将在容器内执行的命令,使容器保持运行状态
运行命令后,Docker 将输出容器 ID。
要验证容器是否正在运行以及资源限制是否已应用,可以使用 docker inspect 命令。该命令提供关于容器的详细信息。
docker inspect my-limited-container
docker inspect 的输出是一个大型 JSON 对象。你可以在 HostConfig 部分查找 CpuShares 和 Memory 字段来查看应用的限制。注意 --cpus 0.5 会被转换为 CpuShares 值 512(默认情况下,1 个 CPU 对应 1024 份额)。Memory 值将以字节为单位显示。
更新容器的 CPU 份额
在本步骤中,你将学习如何使用 docker update 命令更新运行中容器的 CPU 份额。CPU 份额是一种在系统负载较高时优先分配 CPU 资源的方式。较高的份额值意味着该容器相比份额较低的容器能获得更多的 CPU 时间。
在前一步骤中,我们创建了一个名为 my-limited-container 的容器,其 CPU 限制为 0.5 个核心,对应 512 CPU 份额。现在,让我们将其 CPU 份额更新为 768。这将使该容器相比使用默认份额(1024)或更低份额的其他容器获得更高的 CPU 资源优先级。
要更新 CPU 份额,我们使用带有 --cpu-shares 参数的 docker update 命令,后跟容器名称和新的份额值。
docker update --cpu-shares 768 my-limited-container
你应该能看到输出中打印的容器名称,这表示更新操作已成功执行。
要验证 CPU 份额是否已更新,你可以再次使用 docker inspect 命令并检查 HostConfig 部分中的 CpuShares 字段。
docker inspect my-limited-container
在输出中查找 CpuShares 字段,其值现在应为 768。
需要注意的是,更新 CPU 份额不需要重启容器。这些更改会动态应用到正在运行的容器上。
更新容器内存限制
在本步骤中,你将学习如何使用 docker update 命令更新运行中容器的内存限制。限制内存使用对于防止容器消耗过多 RAM 至关重要,这可能导致主机出现性能问题甚至系统不稳定。
在第一步中,我们创建了内存限制为 256 兆字节的 my-limited-container。现在,让我们将其内存限制增加到 512 兆字节。
要更新内存限制,我们使用带有 --memory 参数的 docker update 命令,后跟容器名称和新的内存限制值。
docker update --memory 512m my-limited-container
你应该能看到输出中打印的容器名称,这表示更新操作已成功执行。
要验证内存限制是否已更新,你可以使用 docker inspect 命令并检查 HostConfig 部分中的 Memory 字段。
docker inspect my-limited-container
在输出中查找 Memory 字段,其值现在应为 536870912(即 512 兆字节对应的字节数)。
与更新 CPU 份额类似,更新运行中容器的内存限制不需要重启容器。这些更改会动态应用到正在运行的容器上。
更新容器重启策略
在本步骤中,你将学习如何使用 docker update 命令更新容器的重启策略。重启策略决定了容器在退出或 Docker 守护进程重启时的行为方式,这对于确保容器中运行应用的可用性非常重要。
默认情况下,容器的重启策略为 no,这意味着它们在退出后不会自动重启。现在让我们将 my-limited-container 的重启策略更新为 on-failure。该策略仅在容器以非零退出代码(表示错误)退出时才会重启容器。
要更新重启策略,我们使用带有 --restart 参数的 docker update 命令,后跟容器名称和期望的策略。
docker update --restart on-failure my-limited-container
你应该能看到输出中打印的容器名称,这表示更新操作已成功执行。
要验证重启策略是否已更新,你可以使用 docker inspect 命令并检查 HostConfig 部分中的 RestartPolicy 字段。
docker inspect my-limited-container
在输出中查找 RestartPolicy 字段,其中的 Name 字段现在应为 on-failure。
其他常见的重启策略包括:
no:不自动重启容器on-failure[:max-retries]:仅在容器以非零退出代码退出时重启(可选限制重启尝试次数)always:只要容器停止就始终重启unless-stopped:始终重启容器,除非被显式停止
更新重启策略同样不需要重启容器,更改会动态生效。
最后,让我们清理创建的容器。
docker stop my-limited-container
docker rm my-limited-container
这将停止并移除容器。
总结
在本实验中,你学习了如何使用 docker update 命令管理 Docker 容器资源。首先,你通过 docker run 命令配合 --cpus 和 --memory 参数创建了带有初始 CPU 和内存限制的容器,这展示了如何在容器创建时设置资源限制以防止主机资源耗尽。
随后,你探索了如何动态修改运行中容器的资源限制。你学会了使用 docker update --cpu-shares 更新容器的 CPU 份额,以及通过 docker update --memory 调整内存限制。最后,你实践了使用 docker update --restart 更改容器的重启策略,演示了如何控制容器在故障情况下的行为。这些步骤为你提供了使用 docker update 命令在容器创建后微调资源分配和行为的实践经验。



