Как использовать команду docker container update для изменения ресурсов контейнера

DockerDockerBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этой лабораторной работе вы научитесь динамически изменять ограничения ресурсов и политику перезапуска работающего контейнера Docker с помощью команды docker container update. Вы начнёте с создания контейнера с начальными ограничениями 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 и памяти. Ограничения ресурсов важны для предотвращения ситуации, когда один контейнер потребляет все доступные ресурсы хоста, что может повлиять на производительность других контейнеров и самого хоста.

Сначала загрузим образ ubuntu из Docker Hub. Этот образ будет использоваться как основа для нашего контейнера.

docker pull ubuntu:latest

Вы должны увидеть вывод, указывающий на загрузку и извлечение образа.

Теперь создадим контейнер с именем my-limited-container с определёнными ограничениями ресурсов. Мы используем команду docker run с флагами --cpus и --memory.

Флаг --cpus ограничивает количество ресурсов CPU, которые может использовать контейнер. Значение представляет собой число с плавающей точкой, указывающее количество ядер CPU. Например, --cpus 0.5 означает, что контейнер может использовать не более половины ядра CPU.

Флаг --memory ограничивает объём памяти, доступный контейнеру. Значение можно указать в байтах, килобайтах (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: Этот флаг запускает контейнер в detached mode (фоновом режиме).
  • --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 shares). Значение Memory будет указано в байтах.

Обновление CPU shares контейнера

На этом шаге вы узнаете, как обновить CPU shares работающего контейнера с помощью команды docker update. CPU shares (доли CPU) определяют приоритет доступа контейнера к ресурсам процессора при высокой нагрузке системы. Более высокое значение означает, что контейнер получит большую долю процессорного времени по сравнению с контейнерами, имеющими меньшие значения.

На предыдущем шаге мы создали контейнер my-limited-container с ограничением CPU в 0.5 ядра, что соответствует 512 CPU shares. Теперь обновим его долю CPU до 768. Это даст ему более высокий приоритет к ресурсам CPU по сравнению с другими контейнерами, имеющими стандартные (1024) или меньшие доли.

Для обновления CPU shares используем команду docker update с флагом --cpu-shares, указав имя контейнера и новое значение доли:

docker update --cpu-shares 768 my-limited-container

В выводе вы должны увидеть имя контейнера, что подтверждает успешное обновление.

Чтобы проверить, что CPU shares были обновлены, снова воспользуемся командой docker inspect и проверим поле CpuShares в разделе HostConfig:

docker inspect my-limited-container

В выводе найдите поле CpuShares - теперь его значение должно быть 768.

Важно отметить, что обновление CPU shares не требует перезапуска контейнера. Изменения применяются динамически к работающему контейнеру.

Обновление ограничения памяти контейнера

На этом шаге вы узнаете, как обновить ограничение памяти работающего контейнера с помощью команды docker update. Ограничение использования памяти критически важно для предотвращения потребления контейнерами чрезмерного объема RAM, что может привести к проблемам производительности или даже нестабильности системы на хосте.

На первом шаге мы создали контейнер my-limited-container с ограничением памяти в 256 мегабайт. Теперь увеличим его лимит памяти до 512 мегабайт.

Для обновления ограничения памяти используем команду docker update с флагом --memory, указав имя контейнера и новое значение ограничения:

docker update --memory 512m my-limited-container

В выводе вы должны увидеть имя контейнера, что подтверждает успешное обновление.

Чтобы проверить обновление ограничения памяти, используйте команду docker inspect и проверьте поле Memory в разделе HostConfig:

docker inspect my-limited-container

В выводе найдите поле Memory - теперь его значение должно быть 536870912 (что соответствует 512 мегабайтам в байтах).

Как и при обновлении CPU shares, изменение ограничения памяти работающего контейнера не требует его перезапуска. Изменения применяются динамически.

Обновление политики перезапуска контейнера

На этом шаге вы узнаете, как обновить политику перезапуска контейнера с помощью команды docker update. Политика перезапуска определяет поведение контейнера при его завершении или перезапуске демона Docker. Это важно для обеспечения доступности приложений, работающих в контейнерах.

По умолчанию контейнеры имеют политику перезапуска no, что означает отсутствие автоматического перезапуска после завершения. Давайте обновим контейнер my-limited-container, установив политику on-failure. Эта политика будет перезапускать контейнер только в случае завершения с ненулевым кодом выхода (указывающим на ошибку).

Для обновления политики перезапуска используем команду docker update с флагом --restart, указав имя контейнера и желаемую политику:

docker update --restart on-failure my-limited-container

В выводе вы должны увидеть имя контейнера, что подтверждает успешное обновление.

Чтобы проверить обновление политики перезапуска, используйте команду docker inspect и проверьте поле RestartPolicy в разделе HostConfig:

docker inspect my-limited-container

В выводе найдите поле RestartPolicy. Поле Name внутри RestartPolicy теперь должно содержать значение on-failure.

Другие распространённые политики перезапуска:

  • no: Не перезапускать контейнер автоматически
  • on-failure[:max-retries]: Перезапускать только при ошибках (с возможностью ограничения количества попыток)
  • always: Всегда перезапускать контейнер при остановке
  • unless-stopped: Всегда перезапускать, если контейнер не был явно остановлен

Обновление политики перезапуска также не требует перезапуска контейнера. Изменение применяется динамически.

Наконец, удалим созданный контейнер:

docker stop my-limited-container
docker rm my-limited-container

Эти команды останавливают и удаляют контейнер.

Итоги

В этой лабораторной работе вы научились управлять ресурсами Docker-контейнеров с помощью команды docker update. Вы начали с создания контейнера с начальными ограничениями CPU и памяти, используя команду docker run с флагами --cpus и --memory. Это продемонстрировало, как устанавливать ограничения ресурсов при создании контейнера для предотвращения их истощения на хосте.

Затем вы изучили, как динамически изменять эти ограничения для работающего контейнера. Вы научились обновлять долю CPU с помощью docker update --cpu-shares и регулировать лимит памяти через docker update --memory. В завершение вы изменили политику перезапуска контейнера командой docker update --restart, что показало, как контролировать поведение контейнера при сбоях.

Эти шаги дали практический опыт использования команды docker update для точной настройки распределения ресурсов и поведения контейнеров после их создания.