DevOps con Docker

Usualmente en una empresa que no tiene implementada la cultura DevOps hay un equipo encargado del desarrollo y otro de la infraestructura, sin embargo las relaciones entre estos no son muy optimas, y debido a esto surgen diferencias notables en varios aspectos de cada grupo:

Desarrollo:

  • equipos aislados
  • fricción entre equipos
  • baja automatización
  • uso de correo para una comunicación ágil

Infraestructura:

  • scripts rudimentarios
  • calendarios release fijos
  • puesta en producción mas lenta


Todo esto trae ineficiencia y aquí es donde DevOps ingresa a escena. Se busca crear sinergía para que los distintos grupos apliquen buenas prácticas a sus labores de manera que se alcance eficiencia.


Para empezar, que es DevOps?



Es la union de personas, procesos y tecnología con el fin de proporcionar Valor continuamente a los clientes.

Ciclo DevOps, porque todo empieza con un plan pero allí no termina


 

Ventajas

  • Mejores objetivos comerciales
  • Mayor satisfacción del cliente
  • Agilidad en las entregas y alto rendimiento
  • Armonía entre los equipos
  • Menos problemas en producción
  • Facilidad en el diagnostico y la resolución de incidentes



Aspectos fundamentales de DevOps

  • Control de versiones: Commits, manejo de versiones y repositorios(git, svn -> Github, gitlab, bitbucket, mercurial)
  • Integración continua: Automatizar validaciones (Pipelines jenkins -> Automatizar compilaciones y pruebas cuando se hace commit)
  • Entrega continua: Despliegue automatizado (Suministro de software rápido y confiable en cualquier lugar)
  • Infraestructura como código: En lugar de montar o desmontar un entorno simplemente usamos comandos para que recree la infraestructura de manera automatica (Terraform -> definición declarativa de la infraestructura mediante archivos de definición basados en texto, para revertir, desmontar y recrear entornos complejos)
  • Supervisión y registro: Mecanismos para supervisar y ajustar las aplicaciones y sus recursos (Prometheus, grafana -> Monitorización, recopilación de métricas y vinculación de datos de performance.
  • Aprendizaje validado: Análisis de datos para mejorar los procesos en cada nuevo ciclo.

 

 

La idea es llegar a ser incluso un Site Reliability Engineer(rol/tecnicismo, es quien vela porque se implementen las practicas en los diferentes frentes y equipos, asi como proveer conocimiento y apoyo).




Por parte de las operaciones empezamos preparando la infraestructura y contenedores (sirven para empaquetar las aplicaciones, luego la infraestructura con codigo y servidores (con Kubernetes por ejemplo podemos ejecutar los contenedores para llevar a cabo diferentes tareas), luego pasamos a la parte de Pipelines (gestión de tareas/procesos) y al final notificaciones y canales de comunicación.

Por parte del desarrollo se hablará del frente de desarrollo, la gestion de los repositorios, metodologías adecuadas para llevar un repositorio de git y tambien veremos microservicios(por su agilidad se suele usar en las empresas), y luego pruebas unitarias lo cual es importante dentro de DevOps.

DevOps no es solo uno de los puntos mencionados previamente, implica algo mucho ams ambicioso que es el uso de todas las herramientas y aplicacion de las buenas practicas para que funcionen bien.

Mejores productos en Menor tiempo con Mayor calidad.

Contenedores:


Glosario:

  • Contenedores: unidad de software que empaqueta el código y todas las dependecias(librerías) necesarias de una aplicación.
  • Imagenes: paquete ligero y ejecutable de software con todo lo necesario para la aplicación.
  • Docker Engine: Motor de ejecución de contenedores(de entrada debe estar en la maquina base/servidor).
  • Docker Hub: Repositorio por defecto para las imagenes de docker.
  • Podman: Alternativa opensoruce a Docker.
  • Docker Compose: Orquestador ligero de contenedores.
  • Docket Swarm: Orquestador de contenedores, permite manejar un cluster.
  • Kubernetes: Sistema para la administración de clusteres y Orquestador Empresarial de Contenedores.

 

Ejemplo de Comunicación externa e interna en un entorno de contenedores, mapeo de puertos





En resumen, tenemos un Host, tenemos diferentes mecanismos para administrar la comunicación, y lo mas importante de los contenedores es que son efímeros, podemos crearlos y recrearlos cuantas veces sea necesario y eso no debe afectar lo que es la información porque toda la información que necesitamos persistir o mantener como lo de bases de datos, logs, ficheros de configuración lo vamos a mantener en Volúmenes, y esos volúmenes pueden estar en el Host o en Cloud.


Comandos y ayudas en Docker:

https://gimtareas15.blogspot.com/2023/12/docker-comandos-de-instalacion-para-una.html



Explicación de la App base para crear imágenes y los contenedores de Docker

 

 Todo lo que requiera una interfaz gráfica de usuario no es buena practica meterlo en un contenedor.

Aquí vemos dos maneras donde como, de manera local y en red podemos desplegar una app, cada una tiene sus ventajas y desventajas

Este escenario se puede optimizar


Supongamos que como desarrollador creamos una aplicación y queremos compartirla o correrla en otro lugar, aunque normalmente la subiremos a un repositorio digamos que no queremos compartir código sino meramente la aplicación, así que en vez de eso lo que haremos es utilizar un Container Registry, lo que básicamente es un repositorio de contenedores, donde tenemos una imagen de Docker con todo lo que necesita y lo único que haremos es similar a Git, clonarnos esa imagen y con un comando inicializar el contenedor, de esta manera podemos correr una imagen idéntica a la que estábamos usando en nuestro entorno de desarrollo.


 

Crear un contenedor con la imágen billing App existente en el registry Dockerhub


Para empezar ejecutamos en PowerShell el comando:
'
docker image ls
'




El listado de imagenes que vemos (porque estamos usando Desktop) son por defecto así que se pueden ignorar.
Si ejecutamos el sgte comando veremos las imagenes que tenemos:
'
docker ps -a
'


Para este comando veremos como  le indicamos ... y luego le indicamos la imagen que correremos
'
docker run -p
8088:80 -p 7080:7080 --name conBilling sotobotero/billingapp
'

Primero el anuncia que no encuentra la imagen de manera local, y le pone la etiqueta latest', lo hace por defecto para hacer mejor seguimiento a los archivos.


podemos verificar que si descargó la imagen




Y ya para verificar que todo está en orden nos vamos a  http://localhost:8088/ , en nuestro caso este fué el puerto que dedicamos para esa app.



Ella redirecciona aquí, como vemos está normal la app.
Y si vamos a http://localhost:7080/ que es nuestra entrada al back entonces nos pedirá datos para logearnos.
Usemos 'admin' para usuario y contraseña




http://localhost:7080/swagger-ui/swagger-ui/index.html#/Billing%20API/list



Si ejecutamos ese GET nos devuelve lo que estabamos agregando por medio de la app:



Recomendado activar el Cliente Telnet para poder usar los comandos pertinentes:




Veremos como eliminar y recrear este contenedor:

Damos Ctrl + C en el Powershell para detener el localhost


Ejecutamos el comando docker ps -a
Esto nos devuelve la lista con nuestra app, podemos ver que la cerramos hace un rato.


Ahora mucha atención al comando
docker system prune --all

Es un comando muy peligroso, eliminará todas las imagenes y contenedores que se encuentren detenidos!!!



Ahora vamos a recrear la imagen de nuestra app

docker run -p 8088:80 -p 7080:7080 --name conBilling sotobotero/billingapp

 con el mismo comando que usamos hace un rato








Ahora, si cerramos el contenedor pero queremos arrancarlo de nuevo entonces ejecutamos

docker ps -a


para ver el estado de nuestros contenedores, luego lo corremos:

docker start conBilling



Que es una Imagen base: Práctica para crear un contenedor de PostgreSQL

 a

Comentarios

Entradas populares