Skip to main content

Conceptos de Docker

Plataforma de código abierto escrita en Golang. Como muchas otras, Golang es un lenguaje de programación de alto rendimiento. La mayoría de las aplicaciones que trabajan con contenedores están escritas en Go. Sirve para crear y administrar entornos aislados.

Podemos garantizar que los entornos de producción, homologación y desarrollo tengan los mismos componentes o versiones de aplicaciones. De esta forma minimizamos los impactos en la entrega de software, acabando con ese problema de "en mi máquina funciona".

vm vs container

  • Infraestructura es nuestro hardware o simplemente la base
  • Hypervisor es nuestro virtualizador de infraestructura

El escalado vertical es cuando aumentamos los recursos de las máquinas: más CPU, más memoria, más disco, etc. De esta forma permanecemos con menos máquinas pero más recursos.

El escalado horizontal es cuando en lugar de aumentar recursos, aumentamos los nodos, es decir, la cantidad de máquinas. Máquinas más pequeñas, pero en mayor cantidad.

Arquitectura​

Docker utiliza algunos recursos del Kernel de Linux para la gestión de contenedores y ofrece al usuario una forma más fácil de interactuar con contenedores.
Vale la pena recordar que los contenedores no son un recurso de Docker, sino de Linux. Docker necesita ejecutarse sobre un kernel Linux. Por eso también es posible ejecutar un contenedor sin utilizar Docker directamente.
¿Es posible ejecutar Docker en Windows? Directamente no. Pero la instalación de Docker en Windows crea una máquina virtual con Linux y crea un cliente en Windows que referencia a esta máquina.

Algunos recursos que Docker utiliza de Linux para la separación de contenedores:

Arquitectura

  • Namespaces: Sirve para separar espacios de contenedores, es decir, proporciona aislamiento para los contenedores, limitando el acceso a recursos del sistema y otros namespaces. Esto significa que el usuario root dentro de un contenedor es diferente del usuario root dentro de otro contenedor o incluso de tu máquina anfitriona. De esta forma cada contenedor tiene su propio árbol de procesos, sistema de archivos, conexiones de red, etc.

    • PID: Process Identifier. Permite que un contenedor tenga su propio árbol de procesos.
    • MNT: Mount. Garantiza que cada contenedor tenga su propio sistema de archivos y cómo comparten estos archivos.
      • Controla los puntos de montaje
    • IPC: Inter Process Communication. Aísla la comunicación entre procesos, impidiendo que procesos en diferentes namespaces usen el mismo rango de memoria.
    • NET: Network. Permite virtualizar el stack de red, cada contenedor puede tener interfaces de red, su propia tabla de enrutamiento, conjunto de IP privadas, firewall, etc.
    • UTS: UNIX Time Sharing. Permite que un único sistema parezca tener diferentes nombres de host y dominios para sus diferentes procesos.
  • Cgroups: Son los grupos de control y aíslan los recursos físicos de una máquina. Gracias a este recurso puedes limitar recursos de CPU, memoria, disco, dispositivos.

    • CPU: Permite limitar la reserva de CPU para un contenedor.

    • CPUSET. Limita los límites de hilos para un contenedor.

    • Memoria: Permite limitar la memoria entre contenedores.

    • Device: Permite que un contenedor tenga acceso a un dispositivo de la máquina, por ejemplo, bluetooth, pendrive, etc.

    • Networking: Recursos de comunicación que Docker utiliza para la comunicación de los contenedores entre sí y con un entorno externo.

    • bridge: Es la capacidad que tiene Docker de crear un puente con la tarjeta de red del host.

    • veth. Virtual Ethernet es la capacidad de crear tarjetas de red virtuales.

    • iptables: Permite crear reglas de aislamiento de redes, es el firewall que utiliza Docker.

Arquitectura

Los contenedores Docker tienen como objetivo ejecutar su función y morir, por eso los nombres dados a los contenedores suelen ser aleatorios, no te apegues.

/var/lib/docker es donde se almacenan todos los datos de Docker

Versiones​

Docker tiene básicamente dos versiones, la versión de la comunidad y la versión empresarial.

  • Community Edition
    • Gratuito y también de código abierto
    • Solo para entornos de desarrollo
  • Enterprise Edition
    • Empresarial
    • US$750 por nodo
    • UCP (Universal Control Plane)
    • DTR (Docker Trusted Registry)
    • Soporte de Docker Inc.
    • Recomendación mínima:
      • 8GB de RAM para nodos Managers
      • 4GB de RAM para nodos Workers
      • 2vCPUs para nodos Managers
      • 10GB /var en nodos Managers (Mínimo 6GB Recomendado)
      • 500MB /var en nodos Workers
    • La recomendación para entornos de producción de Docker EE es:
      • 16GB de RAM para nodos Managers
      • 4vCPUs para nodos Managers
      • 25 a 100GB de espacio libre en disco