Al implementar aplicaciones en servidores, generalmente hay una separación entre lo que la aplicación agrupa consigo misma y lo que espera de la plataforma (sistema operativo y paquetes instalados). Un punto de esto es que la plataforma se puede actualizar independientemente de la aplicación. Esto es útil, por ejemplo, cuando las actualizaciones de seguridad deben aplicarse con urgencia a los paquetes proporcionados por la plataforma sin reconstruir toda la aplicación.
Tradicionalmente, las actualizaciones de seguridad se han aplicado simplemente ejecutando un comando del administrador de paquetes para instalar versiones actualizadas de paquetes en el sistema operativo (por ejemplo, "yum update" en RHEL). Pero con el advenimiento de la tecnología de contenedores, como Docker, donde las imágenes de contenedores esencialmente agrupan tanto la aplicación como la plataforma, ¿cuál es la forma canónica de mantener actualizado un sistema con contenedores? Tanto el host como los contenedores tienen sus propios conjuntos de paquetes independientes que deben actualizarse y actualizar en el host no actualizará ningún paquete dentro de los contenedores. Con el lanzamiento de RHEL 7, donde los contenedores Docker se presentan especialmente, sería interesante saber cuál es la forma recomendada por Redhat para manejar las actualizaciones de seguridad de los contenedores.
Reflexiones sobre algunas de las opciones:
- Dejar que el administrador de paquetes actualice los paquetes en el host no actualizará los paquetes dentro de los contenedores.
- Tener que regenerar todas las imágenes del contenedor para aplicar actualizaciones parece romper la separación entre la aplicación y la plataforma (la actualización de la plataforma requiere acceso al proceso de creación de la aplicación que genera las imágenes de Docker).
- La ejecución de comandos manuales dentro de cada uno de los contenedores en ejecución parece engorrosa y los cambios corren el riesgo de sobrescribirse la próxima vez que los contenedores se actualicen desde los artefactos de lanzamiento de la aplicación.
Por lo tanto, ninguno de estos enfoques parece satisfactorio.
docker pull debian/jessie
actualizar la imagen, luego reconstruir mis imágenes existentes, luego detener los contenedores y ejecutarlos nuevamente ( con la nueva imagen). Las imágenes que construyo tienen el mismo nombre que las anteriores, por lo que el inicio se realiza a través del script. Luego elimino las imágenes "sin nombre". Seguramente agradecería un mejor flujo de trabajo.