Docker actualmente está en la boca de todos ya que este software hace posible que haya muchas más aplicaciones ejecutándose en los mismos servidores antiguos y también hace que sea muy fácil empaquetar y enviar programas.
¿Qué es Docker?
Docker es una herramienta diseñada para facilitar la creación, implementación y ejecución de aplicaciones mediante el uso de contenedores. Los contenedores le permiten a un desarrollador empaquetar una aplicación con todas las partes que necesita, como bibliotecas y otras dependencias, y distribuirla como un solo paquete. Al hacerlo, gracias al contenedor, el desarrollador puede estar seguro de que la aplicación se ejecutará en cualquier otra máquina Linux, independientemente de cualquier configuración personalizada que pueda tener y que pueda diferir de la máquina utilizada para escribir y probar el código.
En cierto modo, Docker es un poco como una máquina virtual. Pero a diferencia de una máquina virtual, en lugar de crear un sistema operativo virtual completo, Docker permite que las aplicaciones usen el mismo kernel de Linux que el sistema en el que se ejecutan y solo requiere que las aplicaciones se envíen con cosas que aún no se ejecutan en la computadora host. Esto le da un aumento de rendimiento significativo y reduce el tamaño de la aplicación.
Y lo más importante, Docker es de código abierto. Esto significa que cualquier persona puede contribuir a Docker y extenderlo para satisfacer sus propias necesidades si necesita funciones adicionales que no están disponibles de forma inmediata.
¿Para quién es Docker?
Docker es beneficia tanto a los desarrolladores como a los administradores de sistemas, por lo que forma parte de muchas cadenas de herramientas DevOps (desarrolladores + operaciones). Para los desarrolladores, significa que pueden centrarse en escribir código sin preocuparse por el sistema en el que finalmente se ejecutará. También les permite obtener una ventaja al usar uno de los miles de programas que ya están diseñados para ejecutarse en un contenedor Docker como parte de su aplicación. Para el personal de operaciones, Docker ofrece flexibilidad y reduce potencialmente la cantidad de sistemas necesarios debido a su tamaño reducido y menores gastos generales.
Docker y la seguridad
Docker brinda seguridad a las aplicaciones que se ejecutan en un entorno compartido, pero los contenedores por sí mismos no son una alternativa para tomar las medidas de seguridad adecuadas.
Historia de Docker
Hace cinco años, Solomon Hykes ayudó a fundar una empresa, Docker, que buscaba que los contenedores fueran fáciles de usar. Con el lanzamiento de Docker 1.0 en junio de 2014, el zumbido se convirtió en un rugido. Y, a lo largo de los años, solo se hizo más fuerte.
Todo el ruido está sucediendo porque las empresas están adoptando Docker a un ritmo notable. En julio de 2014, en OSCon, muchas empresas ya habían trasladado sus aplicaciones de servidor de máquinas virtuales (VM) a contenedores.
De hecho, James Turnbull, entonces vicepresidente de servicios y soporte de Docker, comunicó en la conferencia que tres de sus principales clientes de bancos beta lo estaban pasando a producción. Eso es un movimiento seguro para cualquier tecnología 1.0, pero es casi inaudito en el mundo financiero que es primero en seguridad.
Hoy en día, Docker y su padre de código abierto ahora llamado Moby, es más grande que nunca. Según Docker, más de 3.5 millones de aplicaciones se han colocado en contenedores utilizando la tecnología Docker y se han descargado más de 37 mil millones de aplicaciones en contenedores.
No es solo Docker quien piensa que están en algo grande. 451Research también considera que la tecnología Docker es tremendamente exitosa. Predice que «el mercado de contenedores de aplicaciones explotará en los próximos cinco años. Se espera que los ingresos anuales aumenten en 4x, aumentando de $ 749 millones en 2016 a más de $ 3,4 mil millones en 2021, lo que representa una tasa de crecimiento anual compuesta (CAGR) del 35 por ciento.»
Lee este articulo: ¿Quieres saber mas sobre ciberseguridad?
Los datos del mundo real respaldan la conclusión de que Docker está siendo ampliamente adoptado. DataDog, un sistema de monitoreo en la nube descubrió que, para marzo de 2016, «el 13.6 por ciento de los clientes de Datadog habían adoptado Docker. Un año después, ese número creció a 18.8 por ciento. Eso es casi un 40 por ciento de crecimiento de participación de mercado en 12 meses». RightScale observó en su informe RightScale 2018 State of the Cloud que la adopción de Docker por parte de la industria aumentó en un 49 por ciento desde un 35 por ciento en 2017.
Docker, una tecnología de código abierto, no es solo el favorito de los poderes de Linux como Red Hat y Canonical. Compañías de software propietario, como Oracle y Microsoft, también han adoptado Docker. Hoy en día, casi todas las empresas de TI y de la nube han adoptado Docker.
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 es 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 su 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 su computadora, o en cualquier otro contenedor que pueda estar ejecutándose. Al usar 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), puede evitar las dependencias conflictivas. También puede tener múltiples proyectos en un solo servidor sin preocuparse por crear conflictos en su sistema.
- Seguridad: con advertencias importantes (que se explican a continuación), la separación de 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 verán afectados.
- Docker Hub: para casos de uso comunes o simples, como una pila LAMP, la capacidad de guardar imágenes y enviarlas a Docker Hub significa que ya hay muchas imágenes en buen estado disponibles. Ser capaz de extraer rápidamente una imagen prefabricada o compilar desde un archivo Dock de mantenimiento oficial puede hacer que este tipo de proceso de configuración sea extremadamente rápido y simple.
- Administración del medio ambiente: Docker facilita el mantenimiento de diferentes versiones de, por ejemplo, un sitio web que utiliza nginx. Puede tener un contenedor separado para pruebas, desarrollo y producción en el mismo Linode e implementar fácilmente en cada uno.
- Integración continua: Docker funciona bien como parte de las tuberías de integración continua con herramientas como Travis, Jenkins y Wercker. Cada vez que se actualiza su 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, luego implementarla en producción.
¿Cuándo usar Docker?
Si su aplicación se ajusta a 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 la 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 su aplicación es lo suficientemente básica o estándar para trabajar con una imagen de Docker predeterminada. Los casos como el alojamiento de un sitio web con una pila LAMP, un proxy inverso o la configuración de un servidor de Minecraft a menudo tienen una imagen oficial o bien compatible disponible en Docker Hub. Si la configuración predeterminada en estas imágenes es aceptable para sus necesidades, entonces extraer la imagen puede ahorrar mucho tiempo que de lo contrario se dedicaría a configurar su entorno e instalar las herramientas necesarias.
Aislamiento de la aplicación: si desea ejecutar varias aplicaciones en un servidor, mantener los componentes de cada aplicación en contenedores separados evitará problemas con la administración de dependencias.
Equipos de desarrolladores: si tiene desarrolladores que trabajan con diferentes configuraciones, Docker proporciona una manera conveniente de tener entornos de desarrollo local que se ajusten estrechamente al entorno de producción, sin necesidad de SSH en una caja remota.
¿Cuándo no usar Docker?
También hay ocasiones en que Docker no es la mejor solución. Aquí hay unos ejemplos:
Su aplicación es complicada y usted no es/no tiene un administrador de sistemas. Para aplicaciones grandes o complicadas, no será suficiente usar un Dockerfile prefabricado o extraer una imagen existente. Construir, editar y administrar la comunicación entre múltiples contenedores en múltiples servidores es una tarea que requiere mucho tiempo.
El rendimiento es crítico para su aplicación. Docker brilla en comparación con las máquinas virtuales cuando se trata de rendimiento porque los contenedores comparten el núcleo del host y no emulan un sistema operativo completo. Sin embargo, Docker impone costos de rendimiento. Los procesos que se ejecutan dentro de un contenedor no serán tan rápidos como los que se ejecutan en el sistema operativo nativo. Si necesita obtener el mejor rendimiento posible de su servidor, es posible que desee evitar Docker.
No quieres problemas de actualización. Docker es una nueva tecnología que aún está en desarrollo. Para obtener nuevas funciones, es probable que tenga que actualizar las versiones con frecuencia, y no se garantiza la compatibilidad con versiones anteriores.
La seguridad es fundamental para su aplicación. Como se mencionó anteriormente, mantener los diferentes componentes de una aplicación en contenedores separados brinda algunos beneficios de seguridad, ya que un compromiso en un contenedor no puede afectar fácilmente al resto de su sistema. Sin embargo, el enfoque de contenedorización de Docker plantea sus propios desafíos de seguridad, especialmente para aplicaciones más complicadas. Estos problemas son solucionables, pero requieren la atención de un ingeniero de seguridad experimentado.
Múltiples sistemas operativos. Dado que los contenedores Docker comparten el sistema operativo del equipo host, si desea ejecutar o probar la misma aplicación en diferentes sistemas operativos, deberá usar máquinas virtuales en lugar de Docker.
Clústeres. Los contenedores Docker en servidores separados se pueden combinar para formar un clúster con Docker Swarm. Sin embargo, Docker no reemplaza las herramientas de aprovisionamiento o automatización, como Ansible, SaltStack y Chef. Además, Docker ha anunciado recientemente el soporte para Kubernetes, dando a entender que Docker Swarm puede no ser suficiente como un administrador de clúster independiente.
Curso de Docker gratis
Ya saben que me encanta aprender y que sobre todo, ustedes también aprendan y es por eso que les comparto este link de Udemy a un Curso de Docker, donde podrán aprender más sobre esta grandiosa herramienta.
Lo que aprenderás
- Crear, implementar y desplegar Containers con Docker
- Crear Containers con Apache, Nginx y otras soluciones en Docker
¿Hay requisitos para crear un curso?
- Conocimientos generales de Linux
¿Para quién es este curso?
- Desarrolladores
- Profesionales de TI