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
volumes y mapeo de puertos en docker: https://www.youtube.com/watch?v=GwnDA-oXShI
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
Publicar un comentario