Docker
Con la irrupción de la nube y los servidores cloud, Docker apareció como una solución que permite crear en un ordenador zonas aisladas donde se ejecutan aplicaciones.
Última actualización
Con la irrupción de la nube y los servidores cloud, Docker apareció como una solución que permite crear en un ordenador zonas aisladas donde se ejecutan aplicaciones.
Última actualización
Docker es una plataforma de código abierto para desarrollar, enviar y ejecutar aplicaciones. Es una tecnología que permite incorporar y almacenar su código y sus dependencias en un pequeño paquete llamado imagen.
Docker funciona por un aislamiento a nivel de kernel de sistema. Al compartir el kernel y las librerias, conseguimos que al ejecutar las máquinas consuman poco. Los recursos usados para conseguir ese aislamiento son cgroups y namespaces.
Docker-engine es la aplicación cliente-servidor y tiene 3 componentes:
Docker Daemon
Una REST API que nos permite comunicarnos con el Docker daemon o con otros softwares
Una interfaz de línea de comandos (CLI) con la que utilizamos el servicio (comando docker).
Un Dockerfile
es un archivo de texto que contiene una colección de comandos o procedimientos. Considera este archivo como un script que define cómo se construirá nuestra imagen de contenedor.
Una docker image
es una instancia ejecutable y empaquetada de una aplicación o entorno. Parecido a una iso, contiene todo lo necesario para ejecutar un software (o un sitio web en nuestro caso), incluido el código, un tiempo de ejecución, bibliotecas, variables de entorno y archivos de configuración. Una imagen acoplable es una plantilla de solo lectura para crear contenedores. En resumen:
Plantilla de solo lectura
Sistema de ficheros y parámetros listos para ejecutar
Basadas en sistemas operativos Linux
Un docker container
es un paquete de software ejecutable, liviano e independiente que incluye todo lo necesario para ejecutar el software. Los contenedores aíslan las aplicaciones entre sí y de la infraestructura subyacente, al tiempo que proporcionan una capa adicional de protección para la aplicación. La contenederización resuelve el problema relacionado con la implementación y la escalabilidad de las aplicaciones, ayuda a promover la coherencia y la eficiencia en el desarrollo y las operaciones de software. En resumen:
Instancia de una imagen
Es un directorio dentro del sistema, similar a los “jail root”
Pueden ser ejecutados, reiniciados, parados...
El registro de Docker es un servicio que permite almacenar imágenes, estos registros pueden ser públicos o privados.
Docker ofrece una serie de funcionalidades de red:
Mapeo de puertos
Comunicación container-container
Resolución DNS o uso de DNS externo
Inspección de redes
Reglas de firewall
Integración con Plugins de red
Soporte IPv6
Cuando se instala Docker, crea tres redes automáticamente: Bridge, Host y None. De los cuales, Bridge es la red predeterminada a la que se conecta un contenedor cuando se ejecuta. Para adjuntar el contenedor a cualquier otra red, puede usar el indicador --network del comando ejecutar.
Los adaptadores de red de docker son:
Bridge network: El modo de red predeterminado en Docker permite que los contenedores se comuniquen dentro del mismo host. Por ejemplo dos contenedores compartiendo información.
Controlled bridge network: Crear redes aisladas para contenedores, controlando la conectividad. Por ejemplo, para aislar contenedores para diferentes aplicaciones.
Host network: Los contenedores comparten la red del host, lo que hace que se comporten como procesos nativos lo cual mejora el rendimiento de la red pero crea menos aislamiento.
Overlay network: Permite la comunicación entre contenedores que se ejecutan en diferentes hosts Docker. Por ejemplo, la creación de un servicio Swarm de múltiples hosts.
MACVLAN: Proporciona contenedores con direcciones MAC e IP únicas en la red física. Por ejemplo, contenedores expuestos directamente en una red.
Para revisar la configuración de red:
Para más info sobre container networking mirate el siguiente artículo:
Algunos comandos útiles de docker:
docker images
Listado de imágenes
docker history <nombre>
Muestra el historial de la imagen
docker ps
Listado de contenedores activos.
docker inspect <nombre>
Revisamos las propiedades del contenedor
docker container ls -a
Listado de todos los contenedores (aunque estén parados).
docker exec -it [CONTAINER ID] [comando]
Ejecuta un comando en el contenedor.
docker exec -it [CONTAINER ID] sh
Conecta al shell del contenedor
docker container restart [CONTAINER ID]
Reinicia un contenedor.
docker stats
Métricas de los contenedores.
docker container stop [CONTAINER ID]
Parada de un contenedor.
docker logs [CONTAINER ID]
Permite ver los logs asociados al contenedor.
docker build -t <image_name>
Construir una imagen a partir de un archivo docker
docker build -t <image_name> . -no-cache
Construir una imagen de Dockerfile sin la caché
docker images
Listar las imagenes locales
docker rmi <image_name>
Borrar imagen de Docker
docker image prune
Borrar todas las imagenes no usadas
docker login -u <username>
Login al hub
docker push <username>/<image_name>
Publicar una imagen al Docker Hub
docker search <image_name>
Buscar una imagen en el hub
docker pull <image_name>
Pull una imagen del Docker Hub
docker push <image_name>
Push una imagen del Docker Hub
docker logout
Logout del Hub
Comandos de contenedores
docker run --name <container_name> <image_name>
Crear y ejecutar un contenedor a partir de una imagen con un nombre customizado.
docker run -p <host_port>:<container_port> <image_name>
Ejecutar un contenedor y publicarlo con los puertos del host
docker run -d <image_na
me>
Ejecutar un contenedor en segundo plano
docker start stop <container_name> (or <container-id>)
Arrancar o parar un contenedor existente
docker rm <container_name>
Eliminar un contenedor parado
docker exec -it <container_name> sh
Abrir una terminal dentro del contenedor ejecutado
docker logs -f <container_name>
Recuperar y seguir los logs de un contenedor
docker inspect <container_name> (or <container_id>)
Inspeccionar un contenedor en ejecución
docker ps
Listar los contenedores actuales
docker ps --all
Listar todos los contenedores, incluidos los parados
docker container stats
Ver estadísticas de uso de recursos de los contenedores
Los parámetros más utilizados de terminal son:
-d
Inicia un contenedor como proceso en segundo plano (background).
-it
Conecta a un contenedor de forma interactiva
--rm
Borra el contenedor cuando se pare.
-p
Mapea un puerto del host a un puerto del contenedor.
--mount
Crea un volumen persistente controlado por Docker
-v
Monta un directorio compartido entre el host y el contenedor
-e
Define una variable de entorno.
Vamos a buscar y descargar la imagen de hello-world
de Docker Hub
Podemos ver la imagen directamente en:
A continuación vamos a ejecutarla con una serie de parámetros:
Para revisar que esta ejecutándose podemos verlo en:
Para acceder al contenido de la imagen accedemos a través de la ip local con el puerto especificado antes:
Si necesitáramos pararlo o reanudarlo ahora:
Y para borrarlo:
𝗦𝗲𝗹𝗳-𝗰𝗼𝗻𝘁𝗮𝗶𝗻𝗲𝗱 𝗦𝘆𝘀𝘁𝗲𝗺𝘀 (𝗦𝗖𝗦) es un enfoque de arquitectura de software que prioriza la descentralización de aplicaciones en sistemas independientes, cada uno con su lógica de dominio, UI y almacenamiento de datos.
A diferencia de los microservicios, servicios más pequeños centrados únicamente en la lógica empresarial, los SCS son más grandes y abarcan un alcance más amplio dentro de un dominio específico. SCS son sistemas que representan 𝗮𝘂𝘁𝗼𝗻𝗼𝗺𝗼𝘂𝘀 𝘄𝗲𝗯 𝗮𝗽𝗽𝗹𝗶𝗰𝗮𝘁𝗶𝗼𝗻𝘀, que incluyen interfaz de usuario web, lógica de negocios y base de datos, y podría tener una API de servicio.
Las principales ventajas de dichos sistemas son:
Autonomía: cada SCS opera de forma independiente con su base de datos, lógica empresarial e interfaz de usuario.
Alineado con dominios: SCS está estructurado en torno a dominios comerciales específicos, lo que garantiza que cada unidad represente un conjunto de funcionalidades coherente y significativo.
Gestión de la información descentralizada: las bases de datos individuales por SCS garantizan la coherencia de los datos dentro su límite, reduciendo las dependencias entre servicios.
Diversidad de tecnología: permite utilizar diferentes pilas de tecnología en otros SCS, satisfaciendo las necesidades específicas de cada dominio.
Interfaces correctas: Interfaces bien definidas para interacciones con otros sistemas, manteniendo un contrato claro y preservando la encapsulación.
Actualización completa: cada SCS se puede implementar, escalar y actualizar de forma independiente sin afectar a otros sistemas.
Es el caso del registro oficial de Docker:
La información sobre redes entre contenedores la tienes .
Más información sobre el funcionamiento puedes encontrarla aquí: