Cómo usar el comando docker container update para modificar recursos de contenedores

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás a modificar dinámicamente los límites de recursos y la política de reinicio de un contenedor Docker en ejecución utilizando el comando docker container update. Comenzarás creando un contenedor con límites iniciales de CPU y memoria.

Después de crear el contenedor, explorarás cómo actualizar las acciones (shares) de CPU y el límite de memoria para ajustar su asignación de recursos. Finalmente, aprenderás a modificar la política de reinicio del contenedor, controlando cómo Docker maneja los reinicios en diferentes escenarios. Esta experiencia práctica demostrará la flexibilidad y potencia de la gestión de recursos en contenedores 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{{"Cómo usar el comando docker container update para modificar recursos de contenedores"}} docker/rm -.-> lab-555127{{"Cómo usar el comando docker container update para modificar recursos de contenedores"}} docker/exec -.-> lab-555127{{"Cómo usar el comando docker container update para modificar recursos de contenedores"}} docker/inspect -.-> lab-555127{{"Cómo usar el comando docker container update para modificar recursos de contenedores"}} docker/pull -.-> lab-555127{{"Cómo usar el comando docker container update para modificar recursos de contenedores"}} end

Crear un contenedor con límites iniciales de recursos

En este paso, aprenderás cómo crear un contenedor Docker y establecer límites iniciales de recursos para CPU y memoria. Los límites de recursos son importantes para evitar que un solo contenedor consuma todos los recursos disponibles en la máquina host, lo que podría afectar el rendimiento de otros contenedores y del propio host.

Primero, descarguemos la imagen ubuntu desde Docker Hub. Esta imagen servirá como base para nuestro contenedor.

docker pull ubuntu:latest

Deberías ver una salida que indica que la imagen se está descargando y extrayendo.

Ahora, creemos un contenedor llamado my-limited-container con límites específicos de recursos. Usaremos el comando docker run con las banderas --cpus y --memory.

La bandera --cpus limita la cantidad de recursos de CPU que el contenedor puede usar. El valor es un número decimal que representa la cantidad de núcleos de CPU. Por ejemplo, --cpus 0.5 significa que el contenedor puede usar como máximo la mitad de un núcleo de CPU.

La bandera --memory limita la cantidad de memoria que el contenedor puede usar. El valor puede especificarse en bytes, kilobytes (k), megabytes (m) o gigabytes (g). Por ejemplo, --memory 512m limita el contenedor a 512 megabytes de memoria.

En este ejemplo, crearemos un contenedor que ejecute el comando sleep infinity, lo que mantendrá el contenedor en ejecución indefinidamente. Limitaremos su uso de CPU a 0.5 núcleos y memoria a 256 megabytes.

docker run -d --name my-limited-container --cpus 0.5 --memory 256m ubuntu:latest sleep infinity

Analicemos el comando:

  • docker run: Este comando se usa para crear e iniciar un nuevo contenedor.
  • -d: Esta bandera ejecuta el contenedor en modo detached (desconectado), lo que significa que se ejecuta en segundo plano.
  • --name my-limited-container: Asigna el nombre my-limited-container al contenedor.
  • --cpus 0.5: Limita el uso de CPU del contenedor a 0.5 núcleos.
  • --memory 256m: Limita el uso de memoria del contenedor a 256 megabytes.
  • ubuntu:latest: Especifica la imagen Docker a usar (la última versión de Ubuntu).
  • sleep infinity: Este es el comando que se ejecutará dentro del contenedor. Mantiene el contenedor en ejecución.

Después de ejecutar el comando, Docker mostrará el ID del contenedor.

Para verificar que el contenedor está en ejecución y que los límites de recursos están aplicados, puedes usar el comando docker inspect. Este comando proporciona información detallada sobre un contenedor.

docker inspect my-limited-container

La salida de docker inspect es un objeto JSON extenso. Puedes buscar los campos CpuShares y Memory dentro de la sección HostConfig para ver los límites aplicados. Nota que --cpus 0.5 se traduce a un valor CpuShares de 512 (por defecto, 1 CPU equivale a 1024 shares). El valor Memory estará en bytes.

Actualizar las CPU shares de un contenedor

En este paso, aprenderás cómo actualizar las CPU shares (participaciones de CPU) de un contenedor en ejecución usando el comando docker update. Las CPU shares son un mecanismo para priorizar el acceso de los contenedores a ciclos de CPU cuando el sistema está bajo carga. Un valor más alto de shares significa que el contenedor obtendrá una mayor proporción de tiempo de CPU en comparación con contenedores que tengan shares más bajos.

En el paso anterior, creamos un contenedor llamado my-limited-container con un límite de 0.5 núcleos de CPU, lo que corresponde a 512 CPU shares. Ahora, actualicemos sus CPU shares a 768. Esto le dará mayor prioridad para acceder a recursos de CPU en comparación con otros contenedores que tengan shares por defecto (1024) o shares más bajos.

Para actualizar las CPU shares, usamos el comando docker update con la bandera --cpu-shares, seguido del nombre del contenedor y el nuevo valor de shares.

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

Deberías ver el nombre del contenedor como salida, lo que indica que la actualización fue exitosa.

Para verificar que las CPU shares se han actualizado, puedes usar nuevamente el comando docker inspect y revisar el campo CpuShares en la sección HostConfig.

docker inspect my-limited-container

Busca el campo CpuShares en la salida. Su valor ahora debería ser 768.

Es importante destacar que actualizar las CPU shares no requiere reiniciar el contenedor. Los cambios se aplican dinámicamente al contenedor en ejecución.

Actualizar el límite de memoria del contenedor

En este paso, aprenderás cómo actualizar el límite de memoria de un contenedor en ejecución usando el comando docker update. Limitar el uso de memoria es crucial para evitar que los contenedores consuman cantidades excesivas de RAM, lo que puede causar problemas de rendimiento o incluso inestabilidad del sistema en el host.

En el primer paso, creamos el contenedor my-limited-container con un límite de memoria de 256 megabytes. Ahora, incrementemos su límite de memoria a 512 megabytes.

Para actualizar el límite de memoria, usamos el comando docker update con la bandera --memory, seguido del nombre del contenedor y el nuevo valor de límite de memoria.

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

Deberías ver el nombre del contenedor como salida, lo que indica que la actualización fue exitosa.

Para verificar que el límite de memoria se ha actualizado, puedes usar el comando docker inspect y revisar el campo Memory en la sección HostConfig.

docker inspect my-limited-container

Busca el campo Memory en la salida. Su valor ahora debería ser 536870912 (que equivale a 512 megabytes en bytes).

Al igual que con la actualización de CPU shares, modificar el límite de memoria de un contenedor en ejecución no requiere reiniciar el contenedor. Los cambios se aplican dinámicamente.

Actualizar la política de reinicio del contenedor

En este paso, aprenderás cómo actualizar la política de reinicio (restart policy) de un contenedor usando el comando docker update. Una política de reinicio determina cómo debe comportarse un contenedor cuando finaliza o cuando el daemon de Docker se reinicia. Esto es importante para garantizar la disponibilidad de tus aplicaciones ejecutándose en contenedores.

Por defecto, los contenedores tienen una política de reinicio no, lo que significa que no se reiniciarán automáticamente después de finalizar. Actualicemos el contenedor my-limited-container para que tenga una política de reinicio on-failure. Esta política reiniciará el contenedor solo si finaliza con un código de salida distinto de cero (indicando un error).

Para actualizar la política de reinicio, usamos el comando docker update con la bandera --restart, seguido del nombre del contenedor y la política deseada.

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

Deberías ver el nombre del contenedor como salida, lo que indica que la actualización fue exitosa.

Para verificar que la política de reinicio se ha actualizado, puedes usar el comando docker inspect y revisar el campo RestartPolicy dentro de la sección HostConfig.

docker inspect my-limited-container

Busca el campo RestartPolicy en la salida. El campo Name dentro de RestartPolicy ahora debería ser on-failure.

Otras políticas de reinicio comunes incluyen:

  • no: No reiniciar automáticamente el contenedor
  • on-failure[:max-retries]: Reiniciar el contenedor solo si finaliza con código de error. Opcionalmente limitar el número de intentos
  • always: Reiniciar siempre el contenedor si se detiene
  • unless-stopped: Reiniciar siempre el contenedor a menos que sea detenido explícitamente

Actualizar la política de reinicio tampoco requiere reiniciar el contenedor. El cambio se aplica dinámicamente.

Finalmente, limpiemos el contenedor que creamos.

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

Esto detiene y elimina el contenedor.

Resumen

En este laboratorio, aprendiste a gestionar los recursos de contenedores Docker utilizando el comando docker update. Comenzaste creando un contenedor con límites iniciales de CPU y memoria usando docker run con los parámetros --cpus y --memory. Esto demostró cómo establecer restricciones de recursos durante la creación del contenedor para evitar el agotamiento de recursos en el host.

Posteriormente, exploraste cómo modificar dinámicamente estos límites de recursos en un contenedor en ejecución. Aprendiste a actualizar las CPU shares del contenedor usando docker update --cpu-shares y ajustar el límite de memoria con docker update --memory. Finalmente, practicaste el cambio de la política de reinicio del contenedor mediante docker update --restart, ilustrando cómo controlar el comportamiento del contenedor en caso de fallos. Estos pasos proporcionaron experiencia práctica en el uso del comando docker update para afinar la asignación de recursos y el comportamiento del contenedor después de su creación.