Figura 1.7. Contenedores Linux.
Estos contenedores solo se pueden crear en los sistemas operativos Windows y Windows Server. Las imágenes que utilizan son imágenes específicas para contenedores Windows.
Los contenedores Windows disponen de dos modos de aislamiento en tiempo de ejecución:
Figura 1.8. Contenedores Windows.
1.13.3. Volúmenes
Los volúmenes son un mecanismo que nos ofrece Docker para implementar persistencia de datos en un contenedor. Los contenedores que no tienen volúmenes asociados perderán todos los datos cuando el contenedor finalice su ejecución y se elimine. Si queremos conservar los datos que se han generado durante la ejecución del contenedor, necesitamos utilizar volúmenes.
Un contenedor puede tener asociados uno o varios volúmenes. Estos permiten almacenar en el host de Docker los datos de los directorios del contenedor que queremos conservar cuando el contenedor se elimine. El ciclo de vida de los volúmenes es independiente del ciclo de vida de los contenedores. Por lo tanto, los volúmenes seguirán estando disponibles, aunque se eliminen los contenedores que los están utilizando.
En el capítulo 5, estudiaremos las posibilidades que nos ofrece Docker para implementar persistencia de datos entre los contenedores y el host de Docker.
1.13.4. Redes
Docker nos permite crear diferentes tipos de redes para que los contenedores puedan comunicarse entre ellos y con el exterior. El componente principal de Docker Engine que se encarga de la gestión de las redes en Docker es libnetwork
.
En el capítulo 6, estudiaremos los diferentes tipos de redes que podemos crear en Docker y los comandos básicos para poder gestionarlas.
1.14. Orquestación de contenedores
En muchas situaciones, vamos a necesitar que las aplicaciones se ejecuten sobre un cluster de servidores, para garantizar la alta disponibilidad y escalabilidad de los servicios.
Para desplegar una aplicación basada en contenedores en un cluster, vamos a necesitar el uso de herramientas adicionales, para realizar tareas que no se pueden hacer de forma manual. Estas herramientas son conocidas como «orquestadores de contenedores» y los más conocidos dentro del ecosistema Docker son Docker Swarm y Kubernetes.
Entre las tareas que suele realizar un orquestador de contenedores, podemos destacar las siguientes:
Docker Swarm
Docker Swarm es un orquestador que viene integrado de forma nativa en Docker Engine. Este orquestador está siendo desarrollado por Docker, Inc. y forma parte del proyecto Moby Project, con el nombre de SwarmKit.
Figura 1.9. Ejemplo de un cluster de Docker Swarm formado por tres nodos Managers y cuatro Workers.
Kubernetes
Kubernetes, también conocido como K8s, es el orquestador más utilizado en la actualidad. Este orquestador fue desarrollado originalmente por Google, pero fue donado a la Cloud Native Computing Foundation (CNCF), que actualmente es la encargada de su desarrollo.
Kubernetes puede utilizar diferentes container runtimes para ejecutar contenedores. El único requisito reside en que sean compatibles con una API llamada Container Runtime Interface (CRI), que es la que permite interaccionar al container runtime con Kubernetes.
Kubernetes es compatible con containerd, que es el container runtime que utiliza Docker Engine. Por lo tanto, en un cluster de Kubernetes, se pueden crear y ejecutar contenedores a partir de imágenes Docker, que son imágenes que cumplen con la especificación OCI.
La aplicación Docker Desktop para macOS y Windows incluye soporte para crear un cluster de Kubernetes de un único nodo, que se ejecuta de forma local. Esta funcionalidad está deshabilitada por defecto y solo se debe utilizar en un entorno local de pruebas.
Figura 1.10. Ejemplo de un cluster de Kubernetes formado por un nodo Master y tres nodos Workers.
1.15. Organizaciones y estándares
La Open Container Initiative (OCI) y la Cloud Native Computing Foundation (CNCF) son dos proyectos que forman parte de la Fundación Linux, que trabajan para el impulso de las tecnologías de contenedores y las tecnologías abiertas en la nube.