Docker

  • Docker es una tecnología de virtualización “ligera” cuyo elemento básico es la utilización de contenedores en vez de máquinas virtuales y cuyo objetivo principal es el despliegue de aplicaciones encapsuladas en dichos contenedores.
  • Docker es una plataforma de código abierto diseñada para facilitar la creación, implementación y ejecución de aplicaciones en entornos contenerizados.

Docker

  • “Docker”: estibador.
  • Pertenece a los denominados contenedores de aplicaciones
  • Nuevo paradigma. Cambia completamente la forma de desplegar y distribuir una aplicación basado en el lema build, ship and run.
  • Lo desarrolla la empresa Docker, Inc, pero actualmente es un proyecto perteneciente a la Cloud Native Computing Foundation (CNCF) con lo que se asegura el desarrollo de los estándares que se utilizan.
  • Software libre.

Objetos Docker

  • Contenedor:
    • Entorno aislado donde se ejecuta una aplicación.
    • Tiene su propio sistema de ficheros con todas las dependencias que necesita la aplicación para funcionar.
    • Puede estar conectado a una red virtual y utilizar almacenamiento adicional para no perder la información importante.
    • Utiliza los recursos del servidor donde se está ejecutando (núcleo del sistema operativo, CPU, RAM).
    • Los contenedores Docker suelen ejecutar un sólo proceso.
    • Los contenedores Docker son efímeros
  • Imagen:
    • Una imagen es una plantilla de sólo lectura con instrucciones para crear un contenedor Docker.
    • Contiene el sistema de fichero que tendrá el contenedor.
    • Además establece el comando que ejecutará el contenedor por defecto.
    • Podemos crear nuestras propias imágenes o utilizar las creadas por otros y publicadas en un registro.
    • Un contenedor es una instancia ejecutable de una imagen.
  • Redes, Volúmenes, Plugins

Arquitectura de Docker

Docker utiliza una arquitectura cliente-servidor. El cliente Docker se comunica (usando una API REST) con el demonio Docker, encargado de gestionar las imágenes, contenedores, volúmenes, redes,…

Arquitectura de Docker

  • El demonio Docker (Docker Engine): Ofrece una API REST que utiliza el cliente Docker, y gestiona los objetos Docker.
    • El ordenador donde está instalado el demonio Docker lo llamaremos Host Docker.
    • De forma predeterminada el demonio Docker y los contenedores que gestionan se ejecutan por el usuario administrador del sistema.
    • Podemos instalador Docker para ser usado por usuario sin privilegios (modo rootless), aunque tiene algunas limitaciones se consigue tener más seguridad.
  • El cliente Docker: Usando el comando docker nos comunicamos con el demonio Docker para gestionar los objetos Docker con los que trabajamos. El cliente y el demonio pueden estar en equipos distintos.
  • Registros Docker: Un registro Docker almacena imágenes Docker. Docker Hub es un registro público que cualquiera puede utilizar, y Docker busca imágenes en Docker Hub de forma predeterminada. Podemos instalar en nuestros servidores registros privados.
  • Docker Desktop: Aplicación gráfica que permite la gestión sencilla de objetos Docker. Incluye el demonio y el cliente Docker.
  • Docker Swarm: Es la solución de orquestación de contenedores ofrecida por Docker.

Docker en la actualidad

Podemos obtener Docker de varias formas:

  • Moby: Proyecto de comunidad (docker.io de debian/ubuntu). Más información
  • Docker CE: Componentes de Docker proporcionado por la empresa Docker inc.
    • Para uso personal es gratuito.
    • Para uso profesional, ofrecen distintos tipos de suscripciones con diferentes precios:

Instalar Docker CE

Dos opciones:

  • Instalar Docker Engine:
    • Incluye el cliente y el demonio Docker.
    • Sólo se puede instalar en distribuciones Linux: CentOS, Debian, Fedora, Ubuntu, …
  • Instalar Docker Desktop:
    • Incluye el cliente y el demonio Docker.
    • El demonio Docker se ejecuta en una máquina virtual.
    • Nos ofrece una aplicación gráfica para gestionar los objetos Docker.
    • Es necesario tener entorno gráfico.
    • Incluye algunas otras funcionalidades,…
    • Se puede instalar en Linux, Windows y Mac.

Alternativas a Docker

Otras empresas han desarrollado software de contenedores de aplicación:

  • podman: Creado por Red Hat como alternativa a docker. Más información.
  • containerd: Inicialmente desarrollado por Docker, containerd es un componente fundamental en la arquitectura de Docker que ha sido separado como un proyecto independiente y es parte de la Cloud Native Computing Foundation (CNCF). Más información.
  • CRI-O: También desarrollado por Red Hat y parte de la CNCF, CRI-O se centra en proporcionar una implementación liviana y especializada para la ejecución de contenedores en entornos de Kubernetes. Más información.
  • pouch: Otro sistema de contenedores creado por la empresa Alibaba como alternativa a Docker. Más información.

Limitaciones de Docker

  • Docker ha revolucionado el uso de los contenedores, para el despliegue de aplicaciones web.
  • Pero Docker tiene algunas limitaciones:
    • El proceso de actualización de versiones en producción.
    • ¿Cómo se balancea la carga entre contenedores iguales?
    • ¿Cómo se conectan contenedores que se ejecutan en diferentes demonios de docker?
    • ¿Se puede hacer una actualización de una aplicación sin interrupción?
    • ¿Se puede variar a demanda el número de réplicas de un determinado contenedor?
  • Las respuestas a estas preguntas y otras similares tiene que venir del uso de un Orquestador de Contenedores.

Orquestadores de contenedores

  • Un Orquestador de contenedores es un programa que gestiona los contenedores que se ejecutan en un clúster de servidores. Nos ofrece muchas características:
    • Actualizaciones automáticas, balanceo de carga, tolerancia a fallos, escalabilidad, . . .
  • Distintas alternativas:
    • Docker swarm
    • Apache Mesos
    • Hashicorp Nomad
    • Kubernetes
  • Hoy en día se acepta generalmente que el vencedor ha sido kubernetes. ¿Por qué?:
    • Gran cantidad de empresas implicadas en su desarrollo, iniciada por Google pero donada a la CNCF con una versión inicial muy madura, gran número de aplicaciones complementarias,. . .
    • El resto de proyectos siguen activos, como alternativas más sencillas a k8s o en su propio nicho.

Actualizado: