如何使用 docker container update 命令修改容器资源

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,你将学习如何使用 docker container update 命令动态修改运行中 Docker 容器的资源限制和重启策略。首先,你将创建一个带有初始 CPU 和内存限制的容器。

创建容器后,你将探索如何更新容器的 CPU 份额和内存限制以调整其资源分配。最后,你将学习如何修改容器的重启策略,控制 Docker 在不同场景下处理容器重启的方式。通过这个动手实践,你将体验到 Docker 管理容器资源的灵活性和强大功能。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555127{{"如何使用 docker container update 命令修改容器资源"}} docker/rm -.-> lab-555127{{"如何使用 docker container update 命令修改容器资源"}} docker/exec -.-> lab-555127{{"如何使用 docker container update 命令修改容器资源"}} docker/inspect -.-> lab-555127{{"如何使用 docker container update 命令修改容器资源"}} docker/pull -.-> lab-555127{{"如何使用 docker container update 命令修改容器资源"}} end

创建带有初始资源限制的容器

在本步骤中,你将学习如何创建 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 部分查找 CpuSharesMemory 字段来查看应用的限制。注意 --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 命令在容器创建后微调资源分配和行为的实践经验。