Esta tecnología creada en 2013 se ha convertido en algo indispensable a día de hoy para un administrador de sistemas. También para casi cualquier ámbito relacionado con la informática, especialistas IT o especialista TIC.

Es de código abierto (Open Source). Y se basa en la virtualización ligera. Esto es cuando no necesitas un sistema operativo completo. Solo una aplicación en concreto. Como por ejemplo MySQL o Apache.

Es una extensión de los LXC (Contenedores Linux) que ya hemos visto al virtualizar con Proxmox.

Primero vamos a una introducción, luego que es un contenedor. Con esa base será mucho más fácil la teoría y partes de Docker. Y por último los beneficios y casos reales de Dockers.


Contenido relacionado que te puede interesar:

Introducción

¿Qué es Dockers? 0

Como podemos ver en la imagen. Una máquina virtual tiene que replicar todo un sistema operativo para utilizar una aplicación. Con Docker solo necesitas las librerías necesarias para esa aplicación. Vamos a verlo con números:

Una máquina virtual en la que queremos instalar Apache, primero necesitamos instalarnos todo Debian + las librerías propias de Apache. El total da más de 2GB. Y eso si nos descargamos la versión Lite, que si tenemos la versión Full serían 5GB.

Un Docker de Apache ocupa menos de 100 MB ya que solo instala las librerías. Y es un Apache totalmente funcional y completo.

¿Qué es un contenedor?

Tanto los contenedores como las máquinas virtuales se basan en la virtualización. Se basa en poder ejecutar en nuestro ordenador o servidor (anfitrión) uno o varios sistemas operativos diferentes o aplicaciones (huésped, que pueden ser máquinas virtuales o contenedores).

Así eliminamos el tener hardware específico para cada tarea. Con lo que los recursos se aprovechan mejor y se ahorra también en electricidad.

Más adelante podemos ver las diferencias entre máquinas virtuales y contenedores Docker.

Partes de Docker

  • Docker Engine
    • Docker Daemon
    • Docker Client
    • API Rest
  • Docker Image
  • Dockerfile
  • Volumes
  • Docker Compose

Docker Engine

Es el motor de Docker. Son las herramientas que ejecutan, administran y compilan los contenedores y las imágenes. Se ejecuta de forma nativa en Linux.

Esta formado a su vez del Deamon que se ejecuta en segundo plano y del Cliente que se comunica con el Deamon para ejecutar los comandos. Ademas de la API para utilizarlo de forma remota.

Docker Image

Las imágenes son plantillas que vamos a utilizar para construir los contenedores. Esta compuesto de varias capas. Y las instrucciones las vamos a poner en el Dockerfile.

Suele comenzar con una imagen base , aunque el desarrollador de imágenes puede hacerla de 0. Luego están las capas de herramientas, librerías del sistema y dependencias. Por ultimo esta la capa de escritura (capa contenedor), en ella se almacenan los archivos y permite la personalización del contenedor.

Así los contenedores pueden compartir la misma imagen base y tener su propia capa de escritura.

Las imágenes se almacenan en repositorios privados o públicos. El propio Docker ofrece utilizar su nube Docker HUB.

Dockerfile

Como decíamos, son una serie de instrucciones que van a crear una Imagen Docker.

Principalmente son:

  • FROM: Elige la imagen base.
    • Por ejemplo: FROM ubuntu:14.04
  • LABEL: Metadatos en general.
    • Por ejemplo la version, el correo del desarrollador o la descripción de la imagen: LABEL maintainer="[email protected]"
  • RUN: Ejecuta un comando.
    • Por ejemplo: RUN apt-get update
  • EXPOSE: Asigna puertos.
    • Por ejemplo: EXPOSE 80/udp
  • ENV: Variable de Entorno.
    • Por ejemplo: ENV NumeroManzanas=5

Es similar a Bash. Puedes ver más con la documentación de Dockers: Buenas prácticas para Dockfile (ENG) y todos los comandos Dockfile (ENG).

Volumes

Volúmenes. Son los datos de un contenedor. Se almacenan independientes del propio contenedor así que aunque se borre dicho contenedor los datos permanecen, y hay que borrarlos /editarlos manualmente.

Los volúmenes se pueden compartir entre varios contenedores.

  • Son fáciles de hacer backup y migrar
  • Se pueden utilizar por linea de comandos (CLI) o por la API
  • Compatibles tanto en Contenedores Linux como en Windows
  • Seguros de compartir entre contenedores
  • Compatible con Cloud

Se usan también para conectar

Docker Compose

Utiliza ficheros YML para definir la configuración de varios contenedores al mismo tiempo.

Un buen ejemplo es al crear un contenedor para WordPress. Para utilizar WordPress necesitas también MYSQL. Y para gestionar los dos contendores, el de WordPress y el da la base de datos MySQL se usa el gestor Docker Compose.

¿Qué es Dockers? 1

Beneficios Docker

Te pueden sonar empresas como PayPal, VISA o universidades como IU (Indiana University) o CU (Cornell University). Pues tienen en común que todas ellas usan Docker, cada una para un propósito diferente. Puedes ver más en la página de Docker Customers.

Por su flexibilidad, Docker, es perfecta tanto para un administrador de sistemas, para un tester, incluso para un desarrollador.

Un buen ejemplo es cuando trabajas o necesitas varios sistemas operativos.

Un administrador de sistemas tiene que garantizar que la actualización o nueva implementación no dañe nada del sistema actual. Para ello crea una copia (snapshot) del sistema actual y la utiliza. Hacer esto en Máquinas Virtuales (VM) es una tarea, sencilla, pero gasta muchos recursos. En cambio, con Docker se puede hacer con muy pocos recursos.

Un tester tiene que probar (como su propio nombre indica) que todo funciona y no hay errores críticos y a ser posible, tampoco advertencias. Aquí Docker ayuda por ejemplo creando varios espacios de pruebas independientes pero con las mismas características. Y pudiendo borrarlos o crear otros de forma inmediata.

Un desarrollador necesita una serie de herramientas para que su código funcione. Por ejemplo, no es lo mismo Ubuntu 16 que Ubuntu 19. Tampoco es lo mismo Python 2 que Python 3. De versión a versión cambian. Pero con Docker podemos tener la versión especifica que queramos o todas, cada una en su propio contenedor Docker.

Diferencias entre Máquina Virtual (VM), Contenedor Docker y Contenedor Linux

Es típico encontrarse Docker vs Máquinas Virtuales. Y es normal. Ambos son virtualizados. Pero tienen grandes diferencias entre uno y otro. También hay alguna diferencia entre los contenedores Linux (LXC) y los Contenedores Docker y son muy similares, es más, ambos son contenedores. La principal diferencia es el enfoque para que se utiliza cada uno.

Docker esta enfocado en el uso de Apps especificas. Diseñados para soportan una aplicación.

LXC está orientado a crear máquinas virtuales dentro de Linux. Cada contenedor es una máquina virtual con su propio sistema Operativo.

 

Máquina Virtual (VM) Contenedor Docker Contenedor LXC
Dificultad de Uso Sencillo e intuitivo. Perfecto para iniciación. Medio. Requiere utilizar terminal y conocer los comandos. Difícil. Si no se usa con un gestor necesitas usar terminal, conocer los comandos y saber sobre Kernel.
Peso Pesado-Medio. Permite los discos flexibles. Pero aun así tiene que guardar todo el SO. Ligero. Guarda lo mínimo para funcionar. Medio-Ligero. Similar a una máquina Virtual.
Principal tarea Ejecutar de forma completa y virtual un sistema operativo. Crear aplicaciones virtuales ligeras. Ejecutar de forma completa y virtual un sistema operativo en Linux.
Portabilidad Cada gestor de máquina virtual tiene su propio formato. Difícil en Cloud. Mismo docker para cualquier sistema operativo. Fácil en Cloud. Solo en Linux. Difícil en Cloud
Recursos Necesitas asignar previamente los recursos de cada máquina virtual. Recursos estáticos. Docker Engine asigna a cada contenedor los recursos justos para que funcione. Recursos dinámicos. Depende.
Velocidad deploy* Lenta. Rápida. Rápida.
Modular No suele ser posible. Al consumir más recursos no suele ser posible correr más de un par de máquinas virtuales al mismo tiempo. Sí. Se basa ne que sea modular y cada contenedor tenga su propia tarea pero se pueda conectar con otros contenedores. Sí. Se pueden comunicar de forma sencilla entre contenedores. Hay que tener en cuenta el firewall.
Escalabilidad Va ligado a la velocidad de deploy y al consumo de recursos por lo que es más lento exportar una máquina virtual. Fácil. Permite la exportación del contenedor docker, comunicación con Cloud. Es un poco más complicado y pesa más la imagen final.

*deploy: Lo que tradicionalmente se conoce como deploy es el encendido o la instalación de cualquier paquete.