简介
在本实验中,你将学习如何使用 docker container update
命令动态修改运行中 Docker 容器的资源限制和重启策略。首先,你将创建一个带有初始 CPU 和内存限制的容器。
创建容器后,你将探索如何更新容器的 CPU 份额和内存限制以调整其资源分配。最后,你将学习如何修改容器的重启策略,控制 Docker 在不同场景下处理容器重启的方式。通过这个动手实践,你将体验到 Docker 管理容器资源的灵活性和强大功能。
在本实验中,你将学习如何使用 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
值将以字节为单位显示。
在本步骤中,你将学习如何使用 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
命令在容器创建后微调资源分配和行为的实践经验。