Estoy usando Docker-Compose en un entorno de desarrollo con un docker-compose.yml
archivo donde enumero todos los contenedores que necesito.
También tengo un repositorio de git centralizado, un servidor Jenkins y otro servidor donde mantendré tanto la preparación como la producción.
Entonces la pregunta es cómo organizar mejor el proceso de implementación.
Ahora, git push
en el lado del servidor git, se activa un trabajo de compilación de Jenkins. Dependiendo del nombre de la sucursal (ensayo o producción), se activarán diferentes trabajos.
Un trabajo de compilación utiliza docker-compose para mostrar todo el entorno y ejecutar pruebas. Entonces, ¿cómo envío nuevos contenedores al entorno de ensayo/producción?
Una forma es enviarlos al registro de Docker público o privado, pero ¿cuál es la mejor práctica para actualizar contenedores en producción? ¿El servidor Jenkins debería simplemente hacer ssh y ejecutar comandos raw kill
, rm
y pull
? run
No veo ejemplos alrededor.
Respuesta1
Kubernetes, Docker Swarm o Rancher son probablemente las mejores formas de implementar lo que se llama una actualización continua.
Básicamente, una actualización continua tomará una colección de contenedores (conocido como servicio) y los actualizará uno por uno. Entonces, imagine que tiene tres contenedores ejecutando su aplicación, una actualización continua desactivará el primer contenedor y lo actualizará, y así sucesivamente hasta que el servicio esté completamente actualizado. Esto significa que efectivamente no tendrá tiempo de inactividad en la aplicación, ya que los balanceadores de carga de estos productos son inteligentes y no se redirigirán a contenedores de actualización.
Este enlace le brinda una implementación básica de Swarm ejecutando un servicio y luego actualizándolo.
Actualización continua del enjambre
Para algunas de las configuraciones e implementaciones más sencillas, en mi experiencia, Rancher es un buen punto de partida para dominar todos estos conceptos. Básicamente es una interfaz además de diferentes tecnologías Docker como Kubernetes.