sistema de contenedores que corre sobre un kernel (En linux este kernel es el mismo, en windows tenemos que usar un sistema operativo de contenedor para usar el kernel del host)
Los sistemas de archivos en docker se basan en imagenes apilables, por ejemplo tenemos una imagen base y sobre esta otras imagenes que dependen de la base (estas imagenes son inmutables), al final tenemos una base grabable donde sus datos seran destruidos al destruir el contenedor
- Introduccion
- Aprende Docker ahora! curso completo gratis desde cero! (youtube.com)
- Ejemplos
- Introducción a los contenedores de Docker - Training | Microsoft Learn
- Compilación de una aplicación web en contenedores con Docker - Training | Microsoft Learn
Un Dockerfile es un archivo de texto que contiene las instrucciones que se usan para compilar y ejecutar una imagen de Docker. Define los siguientes aspectos de la imagen:
- La imagen base o primaria que usamos para crear la nueva imagen.
- Los comandos para actualizar el sistema operativo base e instalar software adicional.
- Los artefactos de compilación que se incluirán, como una aplicación desarrollada.
- Los servicios que se van a exponer, como la configuración de red y del almacenamiento.
- El comando que se ejecutará cuando se inicie el contenedor.
El almacenamiento en los contenedores es temporal, por esto se debe trabajar en la configuracion del mismo.
Los contenedores pueden usar dos opciones para conservar los datos. La primera consiste en hacer uso de volúmenes y la segunda es mediante montajes de enlace.
Un volumen se almacena en el sistema de archivos del host en una carpeta específica. Elija una carpeta donde sepa que los procesos que no son de Docker no van a modificar los datos.
Los volúmenes se almacenan en directorios en el sistema de archivos del host. Docker montará y administrará los volúmenes en el contenedor. Una vez montados, estos volúmenes están aislados de la máquina host.
Varios contenedores pueden usar simultáneamente los mismos volúmenes. Además, los volúmenes no se eliminan automáticamente cuando los contenedores dejan de usarlos.
Un montaje de enlace es conceptualmente lo mismo que un volumen; pero, en lugar de usar una carpeta específica, puede montar cualquier archivo o carpeta en el host. También espera que el host pueda cambiar el contenido de estos montajes. Igual que sucede con los volúmenes, un montaje de enlace se crea si lo monta y aún no existe en el host.
Los montajes de enlace tienen una funcionalidad limitada en comparación con los volúmenes y, aunque ofrecen más rendimiento, dependen de que el host tenga una estructura de carpetas específica.
La configuración de red predeterminada de Docker hace que sea posible aislar los contenedores en el host de Docker. Esta característica permite crear y configurar aplicaciones que pueden comunicarse de forma segura entre sí.
La red en Docker es un componente crucial que define cómo los contenedores dentro de un mismo host Docker interactúan entre sí y con redes externas.
Docker proporciona varios controladores de red:
- Bridge: El controlador predeterminado, usado para crear una red privada interna dentro del host.
- Host: Para eliminar el aislamiento de red entre el contenedor y el host de Docker.
- Overlay: Usado para conectar múltiples contenedores de Docker en hosts diferentes.
- Macvlan: Permite asignar una dirección MAC a un contenedor para que parezca un dispositivo físico en la red.
Para crear una red, usas el comando docker network create
. Por ejemplo, para crear una red:
docker network create bridge mi_red_bridge
Para listar redes disponibles:
docker network ls
Al crear un contenedor, puedes conectarlo a una red específica usando el flag --network
. Por ejemplo:
docker run -d --name mi_contenedor --network mi_red_bridge mi_imagen
Los contenedores en la misma red pueden comunicarse entre sí usando sus nombres como hostnames. Por ejemplo, si tienes dos contenedores en la misma red mi_red_bridge
, pueden comunicarse entre sí usando sus respectivos nombres.
Imagina que quieres que dos contenedores, uno con una aplicación web y otro con una base de datos, se comuniquen:
-
Crear la Red:
docker network create --driver bridge mi_red_app
. -
Ejecutar Contenedores:
- Contenedor de la Aplicación:
docker run -d --name app_container --network mi_red_app mi_imagen_app
. - Contenedor de la Base de Datos:
docker run -d --name db_container --network mi_red_app mi_imagen_db
.
- Contenedor de la Aplicación:
-
Comunicación: El contenedor
app_container
puede conectarse adb_container
usando el hostnamedb_container
.
Si necesitas que tu contenedor sea accesible desde fuera de tu host Docker, debes exponer puertos usando el flag -p
. Por ejemplo:
docker run -d -p 80:80 --name mi_web_container mi_imagen_web
Esto mapea el puerto 80 del contenedor al puerto 80 del host.
En docker-compose.yml
, puedes definir redes y especificar a qué red se conectará cada servicio. Docker Compose automáticamente establece una red por defecto donde todos los servicios pueden interactuar.
Vamos a crear un ejemplo práctico usando Docker Compose para configurar una imagen de MySQL que se comunique con una imagen de phpMyAdmin.
- Aislamiento y Seguridad: Las redes en Docker proporcionan aislamiento y seguridad entre contenedores.
- Facilidad de Comunicación: Facilitan la comunicación entre contenedores, tanto en el mismo host como en diferentes hosts.
- Flexibilidad: Ofrecen diversas opciones para diferentes escenarios, desde aplicaciones simples hasta despliegues complejos en múltiples hosts.