Docker es una necesidad en las TI
El desarrollo de aplicaciones hoy en día requiere mucho más que escribir código. Múltiples lenguajes, marcos, arquitecturas e interfaces discontinuas entre herramientas para cada etapa del ciclo de vida crean una enorme complejidad. Docker simplifica y acelera su flujo de trabajo, al tiempo que brinda a los desarrolladores la libertad de innovar con su elección de herramientas, pilas de aplicaciones y entornos de implementación para cada proyecto, lo que lo esta convirtiendo hoy en dia en una necesidad en TI para que nuestros proyectos de software sean competitivos.
¿Qué es Docker?
Docker es una herramienta/utileria de codigo abierto, diseñada para facilitar la creación, implementación y ejecución de aplicaciones usando contenedores que permiten al desarrollador empaquetar una aplicación con todas las partes que necesita, como bibliotecas y otras dependencias, y desplegarla 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 que soporte Docker, independientemente de cualquier configuración personalizada que pueda tener la máquina que pueda diferir de la máquina utilizada para escribir y probar el código.
¿Qué es un contenedor?
Los contenedores son una unidad estandarizada de software que permite a los desarrolladores aislar su aplicación de su entorno, resolviendo el dolor de cabeza de "funciona en mi máquina". Para millones de desarrolladores de hoy, Docker es el estándar de facto para crear y compartir aplicaciones en contenedores, desde el escritorio hasta la nube. Estamos construyendo sobre nuestra experiencia conectada única desde el código hasta la nube para desarrolladores y equipos de desarrolladores. Las imágenes de contenedor se convierten en contenedores en tiempo de ejecución y, en el caso de los contenedores de Docker, las imágenes se convierten en contenedores cuando se ejecutan en Docker Engine. Disponible para aplicaciones basadas en Linux y Windows, el software en contenedores siempre se ejecutará de la misma manera, independientemente de la infraestructura. Los contenedores aíslan el software de su entorno y garantizan que funcione de manera uniforme a pesar de las diferencias, por ejemplo, entre el desarrollo y la puesta en escena.
¿Para quién es Docker?
Docker es una herramienta que está diseñada para beneficiar tanto a los desarrolladores como a los administradores de sistemas, lo que la convierte en parte de muchas cadenas de herramientas de DevOps (desarrolladores + operaciones). Para los desarrolladores, significa que pueden concentrarse en escribir código sin preocuparse por el sistema en el que finalmente se ejecutará. También les permite tener una ventaja inicial mediante el uso de uno de los miles de programas ya diseñados para ejecutarse en un contenedor Docker como parte de su aplicación. Para el personal de operaciones, Docker brinda flexibilidad y reduce potencialmente la cantidad de sistemas necesarios debido a su tamaño reducido y sus gastos generales más bajos.
Docker es de código abierto . Esto significa que cualquier persona puede contribuir a Docker y ampliarlo para satisfacer sus propias necesidades si necesita funciones adicionales que no están disponibles de forma inmediata.
¿Que beneficios tiene el uso de docker?
Los beneficios del uso de docker son muchos, que hoy en dia es una necesidad en las TI, tanto en cada desarrollador de software, como en todo el equipo en la cadena productiva del ciclo de desarrollo de software. Aqui menciono algunos:
Beneficios directos al desarrollador individual
Como desarrollador podemos enfrentarnos a este tipo de problemas:
- Tengo 2 sistemas operativos en mi entorno, y quiero probar mi aplicacion
- Mi organizacion me asigna a un proyecto que utiliza otras herramientas
- Necesito cambiar de equipo de computo y que funcione lo que tenia con poco esfuerzo y en forma rapida.
- Tengo un equipo de computo, uno en casa y otro en la oficina y pierdo tiempo en configurar cambios en la infraestructura.
- Necesito probar el manejo sincronizados mis entornos localmente
- Quiero hacer una rapida prueba de concepto de una tecnologia.
- Tengo problemas o conflictos en librerias y aplicaciones en mi maquina local.
- Neceisto automatizar mi despliegue para que lo pruebe el cliente.
- Necesito tener un ambiente aislado igual al de produccion.
Son muchos y muy buenos beneficios personales el poder con el uso de docker que con la vitualizacion no me permite porque consume muchos recursos. Poder resolver estos problemas, y ademas tener las habilidades para incorporarnos a un equipo que use docker que ya esten familiarizados.
Algunos beneficios en el equipo de desarrollo:
Retorno de la inversión y ahorro de costos
Estandarización y productividad
Esto significa que está ejecutando la aplicación exactamente en el mismo entorno en el que se ejecuta en producción.
Docker y seguridad
Docker brinda seguridad a las aplicaciones que se ejecutan en un entorno compartido, aunque los contenedores por sí mismos no son una alternativa para tomar las medidas de seguridad adecuadas, estos nos brindan el mismo potencial que una maquina virtual bien administrada en cuanto a capas de seguridad que se deseen incorporar, balanceando las mejores practicas de seguridad y rendimiento.
En el caso de la virtualización convencional de hardware, las vulnerabilidades del sistema operativo generalmente afectan a una sola máquina virtual, en una virtualización del sistema operativo tienen efecto sobre todos los contenedores, porque son ejecutados sobre el sistema operativo, incluso pueden ser ejecutado "dentro" de otros contenedores (docker-in-docker).
Pruebas de software
Como el tiempo es dinero, nos preguntamos,y ¿cómo hacer un entorno mucho más ligero, más fácil de escalar y más sencillo de portar?. Con el uso de contendores de docker.
– Monitorizar el repositorio de código fuente.
– Compilar el producto.
– Pasar los tests automáticos.
– Auditar el código de forma automática.
Recuperación de problemas
Retroceder (rolback)
Cuando ocurre un problema en producción con una aplicación no contenida en contenedores, puede ser difícil determinar dónde se introdujo el problema. Idealmente, siempre intentaríamos solucionar los problemas, pero en ciertas empresas, cualquier problema o tiempo de inactividad puede ser muy costoso y la reversión podría ser una solución temporal razonable. Sin embargo, esto puede ser difícil de hacer, especialmente si tiene varias aplicaciones hablando entre sí y dependencias externas como una base de datos.
Pero con una aplicación en contenedor, ¡simplemente puede volver a una imagen anterior de su aplicación y reiniciarla! Si su aplicación tiene almacenamiento externo, es posible que deba considerarlos, pero la reversión de la aplicación en sí es simple. También es más fácil averiguar a qué versión puede revertir de forma segura, ya que cada versión de la aplicación tendrá su propia imagen para que pueda ir a esa imagen específica y probarla localmente o en cualquier entorno antes de realizar cambios en la producción.
Imágenes públicas
En una canalización de CI normal, para
implementar la versión de su aplicación en muchos entornos, necesitaría
acceder al código de algún tipo de repositorio en diferentes etapas,
compilar ese código y luego intentar implementar los artefactos.
Alternativamente, puede compilar la aplicación una vez y pasar los
artefactos de compilación que aún deben descomprimirse e implementarse.
Qué contenedores puede construir su aplicación una vez, ejecutando la
automatización según corresponda y luego empaquetar esto como una imagen y pasarlo a diferentes etapas. Algunas imágenes excelentes estan listas y disponibles para CI y herramientas basadas en pruebas.
Algunos ejemplos que he usado antes son:
- AlpineLinux: imágenes basadas en Linux, que se han extendido para muchos lenguajes como Java, Python y Javascript.
- Bases de datos: múltiples tecnologías como Oracle, Cassandra y DB2, así como tecnologías en la nube como DynamoDB de AWS y tecnologías No-SQL como MongoDB
- Transmisión: las imágenes de la ventana acoplable de Kafka y RabbitMQ son las que he usado, pero otras tecnologías de transmisión también tienen imágenes de la ventana acoplable pública.
Hay
miles de muchas otras oficiales por empresas o personalizadas, en www.dockerhub.com
Utilidades y PoC
Otro uso de las imágenes disponibles públicamente es poner en marcha utilidades y servicios sobre los que tiene un control total. En lugar de tener que acceder a un servidor físico en algún lugar, puede descargar y utilizar estas imágenes de forma sencilla y gratuita. Algunos ejemplos de esto que he usado son:
Wiremock: si necesita tener algo que se ejecute y simule las llamadas de descanso, hay una imagen de Wiremock que puede descargar y ejecutar
FTP / SFTP: un conjunto de imágenes muy útil para cualquier momento en el que necesite ejecutar un servidor FTP o SFTP, que luego puede consultar e interrogar para verificar los archivos que se reciben
SMTP: he usado una imagen llamada MailHog para correos electrónicos antes, lo que significa que puede crear un contenedor a partir de esto y tener su propio servidor SMTP para acceder y recuperar los correos electrónicos, excelente para la automatización.
HTTP: una imagen simple que ejecuta un servidor http que abre rutas para solicitudes, lo que significa que cualquier lugar donde envíe solicitudes a un servicio externo se puede señalar aquí para verificaciones automáticas para garantizar que esos mensajes se envíen correctamente
Impresoras Zebra: muy útil para automatizar los cheques hacia y desde las impresoras en las que desea asegurarse de que se envían los datos correctos a una fuente de impresión externa.
Hay cientos más de este tipo de imágenes disponibles y, para mí, esta es la forma más importante en que las pruebas han sido revolucionadas por la contenedorización de dicjer.
Empezando
Fuentes:
https://opensource.com/resources/what-docker
https://www.docker.com/resources/what-container
Comentarios
Publicar un comentario