¿Actualizaciones de aplicaciones dentro de contenedores Docker?

9

Normalmente en un servidor, se configuran actualizaciones automáticas de parches relacionados con la seguridad. Por lo tanto, si estoy ejecutando MySQL 5.5 y sale un nuevo parche de seguridad, Ubuntu Server aplicará la actualización y reiniciará MySQL para mantenerme protegido de manera automatizada. Obviamente, esto se puede desactivar, pero es útil para aquellos de nosotros que somos un poco vagos;)

¿Existe tal concepto dentro de un contenedor Docker? Si estoy ejecutando MySQL en un contenedor Docker, ¿necesito detener constantemente el contenedor, abrir un shell en él y luego actualizar y actualizar MySQL?

Naftuli Kay
fuente
Esta es Docker, y no es una pregunta de LXC. Como los contenedores LXC en sí mismos son solo otra distribución de Linux que se ejecuta bajo el mismo kernel, solo usaría los mismos comandos para actualizar el sistema de contenedores LXC.
phoops

Respuestas:

13

No estoy de acuerdo con la respuesta aceptada. Primero, debe diseñar sus contenedores teniendo en cuenta la separación de estado (en el caso de MySQL, esto significa que al menos /var/lib/mysqlva en su propio volumen ). En segundo lugar, debe determinar una estrategia para las actualizaciones; lo último en tecnología sería crear imágenes versionadas para cada conjunto de actualización de paquetes apt y hacer que se prueben antes de cambiar el volumen de datos del contenedor en ejecución al nuevo. Esto puede incluir un tiempo de inactividad o ningún tiempo de inactividad si usa algo como hipache .

Esta configuración, aunque es más costosa que la configuración inicial, es la misma que usan las empresas con una escala masiva de contenedores y será más barata de mantener con el tiempo.

Además, las actualizaciones de paquetes eventualmente pueden romper sus contenedores en ejecución, por lo que aplicarlos a contenedores en ejecución no es una práctica recomendada, ya que no es para ejecutar software obsoleto.

Deim0s
fuente
+1 esta es la mejor práctica. Almacenar datos en un contenedor de servidor es solo pedir problemas.
booyaa
4

TL; DR : Si no lo construyes en ti mismo, no va a suceder.

La forma efectiva de hacerlo es simplemente escribir un script de inicio personalizado para su contenedor especificado CMDen su Dockerfile. En este archivo, ejecute un apt-get update && apt-get upgrade -qqyantes de comenzar lo que sea que esté ejecutando.

Luego tiene un par de formas de garantizar que las actualizaciones lleguen al contenedor:

  1. Defina un trabajo cron en su sistema operativo host para reiniciar el contenedor en una programación, y así actualizarlo y actualizarlo en una programación.
  2. Suscríbase a las actualizaciones de seguridad de las piezas de software, luego, al actualizar un paquete afectado, reinicie el contenedor.

No es lo más fácil de optimizar y automatizar, pero es posible.

Naftuli Kay
fuente
1
Sigue leyendo la página. deim0s tiene una mejor respuesta.
mc0e