¿Qué es Docker?
Docker es una herramienta diseñada para crear, implementar y ejecutar aplicaciones mediante el uso de contenedores. Los contenedores permiten a un desarrollador empaquetar una aplicación con todos los componentes necesarios como bibliotecas y otras dependencias, y enviarlo todo como un solo paquete. Al hacerlo, el desarrollador puede estar seguro de que la aplicación se ejecutará en cualquier otra máquina, independientemente de cualquier configuración personalizada que pueda tener la máquina y que podría diferir de la máquina utilizada para escribir y probar el código.
Beneficios de Docker
- Reproducibilidad : similar a una aplicación Java, que se ejecutará exactamente igual en cualquier dispositivo capaz de ejecutar una máquina virtual Java, se garantiza que un contenedor Docker sea idéntico en cualquier sistema que pueda ejecutar Docker. Las especificaciones exactas de un contenedor se almacenan en un Dockerfile. Al distribuir este archivo entre los miembros del equipo, una organización puede garantizar que todas las imágenes creadas a partir del mismo Dockerfile funcionarán de manera idéntica. Además, tener un entorno constante y bien documentado facilita el seguimiento de la aplicación y la identificación de problemas.
- Aislamiento: las dependencias o configuraciones dentro de un contenedor no afectarán ninguna instalación o configuración en tu ordenador, o en cualquier otro contenedor que pueda estar ejecutándose. Al utilizar contenedores separados para cada componente de una aplicación (por ejemplo, un servidor web, una interfaz y una base de datos para alojar un sitio web), puedes evitar el conflicto de dependencias. También puedes tener varios proyectos en un solo servidor sin preocuparte de posibles conflictos que puedan existir en tu sistema.
- Seguridad: con importantes salvedades, separar los diferentes componentes de una aplicación grande en diferentes contenedores puede tener beneficios de seguridad: si un contenedor se ve comprometido, los otros no se ven afectados.
- Docker Hub: para casos de uso comunes o simples, como un stack LAMP, la capacidad de guardar imágenes y enviarlas a Docker Hub significa que ya hay muchas imágenes disponibles i bien mantenidas . Ser capaz de extraer rápidamente una imagen prediseñada o compilar a partir de un Dockerfile mantenido oficialmente puede hacer que este tipo de proceso de configuración sea extremadamente rápido y simple.
- Gestión del entorno: Docker facilita el mantenimiento de diferentes versiones de, por ejemplo, un sitio web que utiliza nginx.
- Integración continua: Docker funciona bien como parte de los flujos de trabajo de integración continua con herramientas como Travis, Jenkins y Wercker. Cada vez que se actualiza el código fuente, estas herramientas pueden guardar la nueva versión como una imagen de Docker, etiquetarla con un número de versión y enviarla a Docker Hub, y posteriormente ejecutarla en producción.
Cuándo usar Docker
Si tu aplicación encaja en una o más de las siguientes categorías, Docker puede ser una buena opción:
- Aprendizaje de nuevas tecnologías: para comenzar con una nueva herramienta sin perder tiempo en instalación y configuración, Docker ofrece un entorno aislado y desechable. Muchos proyectos mantienen imágenes de Docker con sus aplicaciones ya instaladas y configuradas.
- Casos de uso básicos: extraer imágenes de Docker Hub también es una buena solución si tu aplicación es lo suficientemente básica o estándar para trabajar con una imagen de Docker predeterminada. Casos como alojar un sitio web usando una pila LAMP, usar un proxy inverso o configurar un servidor de Minecraft a menudo tienen una imagen oficial o bien mantenida disponible en DockerHub. Si la configuración predeterminada de estas imágenes es aceptable para tus necesidades, extraer la imagen puede ahorrarte mucho tiempo que de otro modo dedicarías a configurar el entorno e instalar las herramientas necesarias.
- Aislamiento de aplicaciones: si deseas ejecutar varias aplicaciones en un servidor, mantener los componentes de cada aplicación en contenedores separados evitará problemas con la gestión de dependencias.
- Equipos de desarrolladores: si tienes desarrolladores que trabajan con diferentes configuraciones, Docker proporciona una forma conveniente de tener entornos de desarrollo locales que coincidan estrechamente con el entorno de producción, sin necesidad de acceder mediante ssh a un equipo remoto.
Cuándo no usar Docker
- Tu aplicación es complicada y no eres o no tienes un administrador de sistemas.
- El rendimiento es fundamental para tu aplicación.
- No quieres problemas al realizar actualizaciones.
- La seguridad es fundamental para tu aplicación.
- Utilizas múltiples sistemas operativos.