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

Cómo actualizar los contenedores de Docker automáticamente al actualizar las aplicaciones web dockerizadas

Imagina este escenario. Aloja algunos servicios web que se ejecutan en contenedores Docker. Cuando el servicio web tiene un lanzamiento de nueva versión, busca la imagen de Docker y actualiza los contenedores para actualizar el servicio.

He discutido la actualización de contenedores Docker sin tiempo de inactividad anteriormente, pero este artículo no trata sobre la actualización de las aplicaciones web. Este trata sobre la actualización de los propios contenedores del sistema operativo.

Actualizar manualmente el sistema operativo que se ejecuta en el contenedor puede ser una tarea desalentadora de vez en cuando. Debe ejecutar los comandos de actualización relevantes usted mismo en un contenedor en ejecución por separado para que eso suceda.

¿Qué tal eliminar este paso adicional y combinar la actualización del sistema operativo junto con la actualización del servicio?

Este es un truco de automatización que uso cuando actualizo un servicio web que se implementó con Docker Compose.

Usaremos Ghost CMS como un ejemplo del mundo real basado en esta implementación.

DigitalOcean:la nube para desarrolladoresAyuda a millones de desarrolladores a crear, probar, administrar y escalar fácilmente aplicaciones de cualquier tamaño, más rápido que nunca.Logotipo de DigitalOceanRoxana Ciobanu, CTO

Actualización automática de contenedores de SO mientras se actualiza el servicio web

Puedes leer este artículo para entender lo que estoy haciendo. Pero si quieres seguirlo, también puedes hacerlo.

Mostraré dos ejemplos diferentes:

  1. Para contenedores Docker basados ​​en Debian
  2. Para contenedores Docker basados ​​en Alpine

Actualización automática de contenedores Debian

El procedimiento necesita que te ocupes de dos pasos:

Paso 1:tenga en cuenta la instrucción CMD

Tome nota de la instrucción CMD que se especifica finalmente dentro del Dockerfile de la aplicación web.

Para hacer esto, debe verificar el Dockerfile con el que se construyó la imagen (Ghost para este ejemplo):

Por lo tanto, el comando real aquí es node current/index.js .

Paso 2:agregue la configuración de "Actualización automática"

Agregue los comandos de actualización y la instrucción CMD anotada dentro de la sección de servicio de Ghost del archivo Docker Compose:

command: sh -c "apt update && apt -y upgrade && node current/index.js"

Veamos cómo se vería finalmente. Digamos, por ejemplo, que considera las entradas de Docker Compose para el servicio Ghost de la guía citada anteriormente. Una versión actualizada basada en nuestro tutorial sería:

    ghost:
      image: ghost:4.20.4
      volumes:
        - ghost:/var/lib/ghost/content
        - ./config.json:/var/lib/ghost/config.production.json
      command: sh -c "apt update && apt -y upgrade && node current/index.js"
      env_file:
        - ./ghost-mariadb.env
      restart: on-failure
      depends_on: 
        - ghostdb
      networks:
        - net
        - ghost

Aquí, he especificado el comando justo después de volumes sección.

Actualización automática de contenedores Alpine

Una vez más, este procedimiento requiere que se ocupe de dos pasos similares:

Paso 1:tenga en cuenta la instrucción CMD

Tome nota de la instrucción CMD que se especifica finalmente dentro del Dockerfile de la aplicación web.

Para hacer esto, debe verificar el Dockerfile (Ghost Alpine para este ejemplo):

Aparentemente, el comando aquí es el mismo que se vio en la versión anterior de Debian:node current/index.js .

Paso 2:agregue la configuración de "Actualización automática"

Agregue los comandos de actualización y la instrucción CMD anotada dentro de la sección de servicio de Ghost del archivo Docker Compose:

command: sh -c "apk update && apk add --upgrade apk-tools && apk upgrade --available && node current/index.js"

Referencia de actualización de Alpine.

Veamos cómo se vería finalmente (tenga en cuenta que esta vez usaré la imagen alpina para Ghost). Digamos, por ejemplo, que considera las entradas de Docker Compose para el servicio Ghost de la guía citada anteriormente. Una versión actualizada basada en nuestro tutorial sería:

    ghost:
      image: ghost:4.20.4-alpine
      volumes:
        - ghost:/var/lib/ghost/content
        - ./config.json:/var/lib/ghost/config.production.json
      command: sh -c "apk update && apk add --upgrade apk-tools && apk upgrade --available && node current/index.js"
      env_file:
        - ./ghost-mariadb.env
      restart: on-failure
      depends_on: 
        - ghostdb
      networks:
        - net
        - ghost

Eso es entonces. A partir de este momento, cada vez que actualice sus aplicaciones web sin tiempo de inactividad, los comandos de actualización del contenedor se invocarán automáticamente y luego se ejecutarán sus aplicaciones web.

Nota:Al actualizar cualquier aplicación cambiando el número de versión de la imagen en el archivo de composición de la ventana acoplable, debe deshabilitar temporalmente la opción de comando que se analiza aquí con un hashtag. Una vez que se haya realizado la actualización para la aplicación web, vuelva a habilitar la misma línea para actualizar el contenedor. Ambos pasos (actualizar la aplicación y el contenedor) se pueden lograr sin ningún tiempo de inactividad a través del escalado.

Consejos adicionales

Aquí hay una lista de comandos para otras aplicaciones populares como Nextcloud y Rocket.Chat. Recuerde, estos deben agregarse tal como vio en el ejemplo de Ghost.

Nextcloud

Para Debian:

command: sh -c "apt update && apt -y upgrade && apache2-foreground"

Para alpino:

command: sh -c "apk update && apk add --upgrade apk-tools && apk upgrade --available && apache2-foreground"

Rocket.Chat

command: sh -c "apt update && apt -y upgrade && node main.js"

Espero que este artículo le ayude en sus actividades diarias de administrador de sistemas. Si tiene alguna consulta, comentario o sugerencia, deje sus pensamientos en la sección de comentarios a continuación.


Docker
  1. Cómo actualizar automáticamente los contenedores Docker en ejecución

  2. Cómo exportar e importar contenedores Docker

  3. Cómo usar Docker Compose

  4. Cómo mantener los contenedores Docker funcionando cuando el daemon se detiene

  5. Cómo listar contenedores Docker

Cómo reducir el tamaño de la imagen de Docker en los contenedores de Docker

Cómo ejecutar contenedores Docker

Cómo eliminar contenedores Docker

Cómo detener los contenedores de Docker

Cómo nombrar o renombrar contenedores Docker

Cómo configurar espacios de nombres de red en contenedores Docker