Docker en producción
Ya hemos visto a lo largo de todo el curso lo sencillo que es ejecutar aplicaciones con Docker y Docker Compose. Pero, de cara a producción, viene bien tener en cuenta algunas buenas prácticas para mejorar la resiliencia y seguridad de nuestras aplicaciones.
En este episodio vamos a ver como preparar el servidor instalando Docker Engine y compose, desplegar la aplicación de ejemplo y algunas buenas prácticas para tener en cuenta.
Dentro vídeo: https://youtu.be/eh4YS9x9CDU
Instalar docker engine
Me gusta utilizar el instalador de Docker en un solo comando, recuerda que tengo una sección dedicada a la instalación de Docker en el capítulo 2.
curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh
Instalar docker compose
En docker desktop, la herramienta compose viene incluida, pero en docker engine (en servidores) no viene incluida, por lo que debemos instalarla a parte, como un plugin de docker. Documentación oficial: Install Docker Compose
Desplegar una aplicación con docker compose
Como ya tenemos un fichero de compose en la aplicación de ejemplo, podemos desplegarla con un simple comando.
docker-compose up -d
Ojo, porque si usas el ejemplo del episodio anterior, la imagen del API se construye desde el dockerfile por lo que este fichero deberá estar también en el servidor para que compose pueda construir la imagen.
Lo más sencillo creo que es clonar el repositorio entero en el servidor y lanzar el compose. Así, más adelante cuando queráis actualizar la aplicación, solo tenéis que hacer un git pull en el servidor y volver a lanzar el compose.
Realmente, con esto ya tendríamos nuestra aplicación funcionando correctamente en producción, pero vamos a ver algunas buenas prácticas para tener en cuenta.
Buenas prácticas para Docker Compose
Vamos a partir del compose que tenemos para nuestra aplicación de ejemplo pabpereza/quotes
- Limitar los recursos de los contenedores
- Cargar variables de entorno desde fichero
- Persistir datos en volúmenes
- Habilitar reinicio automático
- Segregación de redes
- Monitorizar contenedores y recursos
- Actualizar contenedores y aplicaciones
Buenas prácticas para Linux anfitrión
- Vigilar puertos expuestos y firewall
- Control acceso SSH
- Deshabilitar acceso root
- Acceder solo con clave RSA
- Fail2ban
- Actualizar sistema operativo y docker engine
Bonus para próximos episodios
- Docker Swarm para alta disponibilidad
- Centralizar logs con Grafana o prometheus
Algunas solo las mencionamos en el vídeo, pero en futuros episodios profundizaremos en ellas o incluso haremos un vídeo dedicado a cada una.
- Lista de vídeos en Youtube: Curso de Docker