GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Cómo actualizar las imágenes de Docker a la última versión

Las imágenes de Docker son la base de los contenedores de Docker. Dado que las imágenes son la base, ¿alguna vez se ha preguntado cómo actualizar los contenedores de Docker cuando se lanza una nueva versión de una imagen?

¡Extrañar más! En este tutorial, aprenderá cómo actualizar su repositorio de imágenes local de Docker y actualizar sus contenedores a una nueva versión sin estropear las cosas.

Requisitos

Este tutorial será una demostración práctica. Si desea seguirnos, asegúrese de tener lo siguiente:

  • Entorno Linux:el tutorial usa Linux (Ubuntu Focal) para ejecutar Docker, pero también puede aplicar los mismos pasos generales a Windows o macOS.
  • Instale Docker Engine 20.10.8 (Linux) o Docker Desktop 3.5.2 (macOS y Windows).

Ejecutar imágenes de Docker idempotentes

Una imagen de Docker contiene todo el software necesario para ejecutar la aplicación asociada, incluidos los paquetes y las dependencias del sistema operativo. Docker ensambla imágenes a través de instrucciones dentro de un archivo llamado Dockerfile , que contiene instrucciones de instalación idempotentes.

Una instrucción idempotente implica que la imagen resultante de ejecutar la instrucción de instalación siempre dará como resultado la misma salida.

La ventaja de construir imágenes idempotentes es que son independientes del sistema:la imagen resultante siempre será la misma. La ejecución del contenedor siempre será la misma, sin importar dónde tenga lugar la ejecución.

Una nueva versión de la imagen suele implicar algunas mejoras en las instrucciones para construir la base del contenedor Docker, por ejemplo:

  • Una versión más nueva del código fuente de la aplicación puede reemplazar a la anterior;
  • Mejor gestión de dependencias:menos espacio requerido o mejor rendimiento;
  • Mejor seguridad:la imagen tiene parches de seguridad para evitar vulnerabilidades.

Para obtener los últimos beneficios de cualquier actualización en las imágenes de Docker, debe saber cómo actualizarlas y aplicar esas actualizaciones a sus contenedores.

Actualización de imágenes de Docker local

Para empezar, empiece por actualizar una imagen de Docker local. La aplicación del ejemplo python El contenedor ejecuta aplicaciones de código Python. Actualizar la imagen local de Docker significa que las aplicaciones pueden confiar en la imagen recién actualizada.

Primero necesita saber qué imágenes están disponibles actualmente en su entorno local. Ejecute el siguiente comando para verificar sus imágenes locales. La ETIQUETA columna indica la versión disponible de la imagen.

docker images

Ahora que tiene su versión local de la imagen, debe buscar la última imagen disponible en un registro remoto. Hay varios registros remotos de Docker (repositorios de imágenes de Docker) que el motor de Docker consulta para actualizar sus imágenes locales. Docker extrae imágenes de DockerHub de forma predeterminada, pero existen múltiples alternativas, la mayoría privadas. Algunos repositorios alternativos se enumeran a continuación.

  • Galería pública de ECR de Amazon Web Service (AWS)
  • Sonatipo Nexus
  • Puerto VM

Navegue por la página del repositorio y busque la imagen deseada:una imagen oficial de Python que actualizará como ejemplo. Escribe python para buscar la imagen deseada en DockerHub y abrirla para encontrar las etiquetas disponibles. Los ejemplos de este tutorial son de una imagen de Python.

Cada etiqueta también tiene una fecha de inserción. La fecha de inserción es la fecha en que se cargó la imagen en el registro. Toma nota de la etiqueta de la imagen y nombre , los cuales necesitará en los siguientes pasos.

Ahora que tiene la etiqueta de versión más reciente, es hora de actualizar la imagen. Para actualizar a una imagen más nueva, primero debe extraer la nueva versión. Ejecute docker pull comando seguido de dos puntos y el nombre y la etiqueta de la imagen más nueva:el nombre y la etiqueta de los que tomó nota anteriormente. El nombre y la etiqueta del ejemplo es python:slim-buster . El comando completo y la salida resultante se muestran a continuación.

docker pull python:slim-buster 

Para extraer la imagen del registro de imágenes de Docker no predeterminado (DockerHub), debe proporcionar el URI completo de la imagen. Por ejemplo:para sacar Python de (AWS) Galería pública de ECR, ejecute dockerpull public.ecr.aws/bitnami/python:3.7

Aprender a actualizar contenedores Docker

Una vez que crea un contenedor, la imagen del contenedor no puede cambiar. Dado que la imagen no puede cambiar, realmente no puede actualizar un contenedor en ejecución. Lo que hace es recrear cualquier contenedor en ejecución con contenedores de reemplazo utilizando la versión de imagen más nueva.

Como ya tiene la versión más reciente, es hora de recrear los contenedores con las imágenes antiguas que necesitan actualizarse.

Para encontrar qué contenedores necesita volver a crear, enumere los contenedores existentes que ejecutan la imagen anterior. El docker ps el comando enumera los contenedores. Con el --filter marca, usted especifica qué contenedores enumerar. Hay varias opciones disponibles para filtrar y el ancestor filtros de bandera por la imagen utilizada como base para construir el contenedor. Los contenedores iniciales en los ejemplos son para Python 3.7.2, que aplicará como filtro. El -a el interruptor muestra todos los contenedores disponibles.

docker ps -a --filter "ancestor=python:3.7.2"

Puede usar la salida de docker ps como entrada para ejecutar docker stop Comando en todos los contenedores enumerados. La bandera -q está incluido, por lo que el comando de listado solo devuelve los ID de los contenedores. El resultado del comando es la lista de ID de los contenedores detenidos.

docker stop $(docker ps -aq  --filter "ancestor=python:3.7.2")

Después de detener los contenedores, debe pedirle a Docker que los elimine del sistema antes de eliminar la imagen obsoleta.

docker rm $(docker ps -aq --filter "ancestor=python:3.7.2")

Después de eliminar todos los contenedores asociados con la imagen obsoleta, puede eliminar la imagen antigua con docker rmi comando.

docker rmi python:3.7.2

Creación de nuevos contenedores con las imágenes actualizadas

Ahora es el momento de reemplazar finalmente los contenedores antiguos, los que se eliminaron anteriormente, con nuevos contenedores basados ​​en la imagen actualizada. Esta vez, creará los contenedores utilizando la versión de imagen más nueva. Dado que los contenedores son idempotentes, puede esperar que todo funcione como antes.

Ejecute el nuevo contenedor con docker run comando y el nombre y la etiqueta de la imagen actualizada que necesitará el contenedor. En este ejemplo, -it flag le dice a Docker que ejecute el contenedor en modo interactivo, para que pueda ejecutar comandos dentro del contenedor para verificar cualquier funcionalidad actualizada.

docker run -it python:slim-buster

Tenga en cuenta que el nuevo contenedor de Docker está ejecutando una versión de Python más reciente:la versión 3.9.7.

Conclusión

En este tutorial, echó un vistazo detrás de las cubiertas y aprendió la magia detrás de cómo actualizar los contenedores Docker:¡humo y espejos! ¡No hay actualización! En su lugar, elimine todos los rastros de la versión anterior y reemplácelos con nuevos contenedores utilizando una versión más nueva. Y, gracias a la idempotencia, los contenedores siguen funcionando como de costumbre:¡TA-DA!

Entonces, ¿cuáles son los contenedores que planea actualizar a continuación?


Docker
  1. Cómo mover imágenes de Docker entre hosts

  2. Cómo actualizar Sendmail a la última versión en CentOS

  3. Cómo compartir imágenes de Docker con otros

  4. Cómo actualizar/agregar un archivo en la imagen de Docker

  5. ¿Cómo reinstalar la última versión de cmake?

¿Cómo obtener la última versión de vim en Ubuntu 20.04?

¿Cómo instalar la última versión de GCC en Ubuntu 20.04?

Cómo usar Docker Commit para cambiar imágenes de contenedores

Cómo actualizar Linux Mint a la última versión

Cómo compilar y enviar una imagen de Docker al repositorio de Docker Hub

Cómo listar/buscar/extraer imágenes de la ventana acoplable en Linux