¿Qué es Docker?
Creo que podemos decir que Docker fue un antes y un después en el mundo del desarrollo de aplicaciones y su despliegue. Hasta que apareció Docker, se utilizaban sistemas de virtualización completa para aplicar "modularidad" y para desplegar aplicaciones "independientes" dentro de una misma máquina. Ahora, con Docker, el despliegue de aplicaciones aisladas dentro de una misma máquina es mucho más simple y se ha extendido.
Desde que Docker apareció, en 2014, cada vez se utiliza más tanto desde el punto de vista del desarrollo de aplicaciones como de la administración de sistemas.
Por decirlo de alguna manera, con Docker podemos empaquetar aplicaciones y distribuirlas fácilmente para que nosotros mismos u otros desarrolladores o administradores de sistemas puedan desplegarlas en sus plataformas Docker.
Los contenedores Docker contienen todos los servicios necesarios para que la aplicación funcione, e incluso versiones concretas; pero, a diferencia de las máquinas virtuales, no se virtualiza el hardware ni el sistema operativo. Por eso, varios contenedores Docker pueden funcionar sobre el mismo sistema operativo o sobre la misma máquina sin problema.
A lo largo de este artículo vamos a ir paso a paso explicando algunas partes de Docker y de cómo funciona, así como de dónde sacar los contenedores de Docker para ejecutar en nuestro sistema.
- Contenedores Docker vs. Máquinas virtuales
- ¿Qué ventajas tiene el uso de Docker?
- Docker Engine: ¿Qué es?
- Docker Hub: ¿Qué es?
- Portainer para Docker: ¿Qué es?
- Docker Compose: ¿Qué es?
- Docker Desktop: ¿Qué es?
- ¿Dónde podemos instalar Docker?
Contenedores Docker vs. Máquinas virtuales
Realmente, no necesitamos palabras para explicar cuáles son las diferencias de funcionamiento entre un contenedor de Docker y una máquina virtual.
Esta foto que tenemos en la web oficial de Docker lo explica todo:
Te lo resumo en varias afirmaciones:
- Todos los contenedores Docker que funcionan sobre una máquina comparten sistema operativo y kernel. De esta forma se ahorran recursos y, aun así, los servicios o aplicaciones en contenedores están aislados.
- Cada contenedor de Docker tiene los servicios necesarios para que la aplicación funcione, ya que se empaqueta la aplicación junto con los servicios y parte de la configuración hecha.
- El hecho de utilizar un sistema operativo común hace que el consumo de recursos sea mucho más bajo, por lo que una misma máquina puede alojar muchos más contenedores de Docker que máquinas virtuales con los mismos recursos.
Creo que la imagen de arriba y estas tres afirmaciones, explican a grandes rasgos las mejoras que nos aporta el uso de Docker en lugar de las máquinas virtuales de siempre.
¿Qué ventajas tiene el uso de Docker?
Independientemente del tema de los recursos utilizados que he comentado, al tratar las diferencias entre Docker y una máquina virtual, Docker tiene más ventajas.
Una de las más significativas es que un desarrollador puede garantizar que su código funciona al desplegar ese "código" en una imagen Docker, ya que no tiene que preocuparse de la mayoría de variables del entorno. Para esto, la imagen de Docker contiene todo lo necesario con las versiones específicas para que ese "código" funcione correctamente.
Aunque es cierto que puede darse el caso de que haya varios servicios "duplicados" funcionando en la misma máquina al juntarse varios contenedores Docker que contengan los mismos servicios en distintas versiones, siempre es mejor esto que duplicar todo el stack para cada máquina virtual.
Al añadir Docker Compose a la ecuación (lo vamos a explicar un poco más abajo), añadimos una herramienta de gestión que nos permite manejar stacks de varios contenedores Docker de una forma muy simple, automatizada y "en conjunto". No obstante, son necesarios conocimientos algo avanzados para poder crear el archivo de configuración necesario.
Docker Engine: ¿Qué es?
Se trata de la parte que nos permite construir y crear contenedores. También se encarga de todo lo que tiene que ver con la ejecución de contenedores de Docker. Docker Engine es lo que vamos a instalar sobre el servidor o sistema operativo que hará de "host" para el sistema Docker.
El Docker Engine tiene un daemon que se encarga de mantener los contenedores funcionando, y esto incluye los volúmenes y las conexiones de red de cada contenedor.
Por otro lado, tenemos dos formas de interactuar con Docker Engine:
- Nos ofrece un REST API a la que podemos conectar un panel como Portainer con el fin de gestionar los contenedores de una forma más "visual" y mucho más simple para usuarios que no estén acostumbrados a la línea de comandos.
- También nos ofrece una interfaz en línea de comandos para poder administrar los contenedores directamente desde el SSH del servidor donde tenemos funcionando Docker Engine.
Te puede parecer curioso, pero la mayoría de los usuarios de Docker utilizan la herramienta Docker CLI (línea de comandos) en lugar de una herramienta visual como Portainer.
Docker Hub: ¿Qué es?
Aunque cualquiera puede crear imágenes de Docker para utilizarlas posteriormente como contenedores Docker, la verdad es que podemos obtener estas imágenes creadas por otros profesionales desde un repositorio llamado Docker Hub.
Podemos ver todo lo que hay en Docker Hub desde su sitio web oficial: https://hub.docker.com/
En Docker Hub podemos encontrar múltiples imágenes empaquetadas por distintos profesionales con distintas configuraciones, aunque normalmente el desarrollador oficial de una aplicación tiene su propia imagen de Docker subida a este repositorio.
Aunque aquí estamos hablando de empaquetar aplicaciones en contenedores de Docker, realmente podemos meter dentro cualquier cosa que se pueda ejecutar en Docker: aplicaciones, sistemas operativos completos o cualquier aplicación web o multiplataforma que pueda funcionar sobre ese sistema operativo.
Por otro lado, en Docker Hub tenemos dos tipos de imágenes de Docker: las oficiales y las comunitarias.
Las oficiales son muchas menos, pero normalmente tenemos la garantía de que van a funcionar correctamente con una configuración estándar. En las comunitarias la cosa es más variable, al ser subidas directamente por miembros de la comunidad.
Desde Portainer (que vamos a ver lo que es más adelante) o desde la línea de comandos podemos utilizar "pull" para descargar cualquier imagen de Docker desde el repositorio y, automáticamente, crear un contenedor que será ejecutado en Docker.
Esto es un resumen muy simple de lo que se puede hacer con Docker Hub, pero es suficiente para la mayoría de usuarios que no van a hacer un uso intensivo de Docker. Desde el punto de vista del desarrollador que quiere crear una imagen de Docker comunitaria para que otros usuarios puedan utilizarla, se pueden hacer muchas cosas más, como la automatización de builds y el escaneo de vulnerabilidades en las imágenes subidas.
Portainer para Docker: ¿Qué es?
Nos ha quedado claro que existe un motor llamado Docker que puede ejecutar contenedores, ¿pero cómo se gestionan?
Pues, como decía en el último párrafo del bloque anterior, podemos usar la interfaz de comandos del servidor o utilizar una interfaz gráfica llamada Portainer.
Portainer se instala como un Docker más, pero tiene acceso al motor Docker y permite gestionar el resto de contenedores de Docker que tenemos funcionando en el mismo servidor.
Lo bueno de Portainer es que muestra gráficamente el consumo de cualquier contenedor. También permite descargar imágenes, ejecutar contenedores, apagarlos y configurarlos.
Como ya he comentado, la mayoría de los profesionales que usan Docker utilizan directamente la línea de comandos para la gestión del motor Docker.
He de decir también que Portainer no es el único panel de control para Docker, pero sí que es el más conocido y el que puede más o menos ser considerado "oficial". Aunque no es el más fácil de utilizar, sí que es el que nos permite hacer más cosas.
Docker Compose: ¿Qué es?
A mí la herramienta Docker Compose siempre se me ha atragantado bastante debido al archivo de configuración previo que hay que crear para usarla con contenedores Docker, aunque la considero indispensable.
Te voy a poner un ejemplo práctico para que entiendas para qué se utiliza que a mí me sirvió bastante:
- Yo necesitaba arrancar un contenedor Docker con NextCloud para hacer sincronización de archivos, pero la mayoría de contenedores de NextCloud y OwnCloud no traen MySQL o MariaDB, sino que vienen "preparados" para usar SQLite (que baja bastante el rendimiento cuando trabajas con muchos archivos y muchas sincronizaciones).
- Mi idea desde un principio era tener el contenedor Docker de NextCloud y otro contenedor Docker con MariaDB, pero aquí ya entramos en el tema de "aplicación multicontenedor". Podría darse el caso de que me falle solo uno de los contenedores y que la aplicación no funcione.
- Con Docker Compose creamos un "pack" para que estos dos contenedores de Docker funcionen "juntos". Además, tienen que comunicarse entre sí y los volúmenes de ambos contenedores deben ser persistentes, algo que nos permite Docker Compose.
Por resumirlo de alguna forma, Docker Compose permite definir un archivo de configuración YAML donde definimos qué contenedores vamos a arrancar y con qué configuración.
Estos archivos de configuración podemos usarlos nosotros o pasárselos a otra persona para que, con una versión compatible de Docker Compose, pueda configurar y levantar varios contenedores con un simple comando.
Docker Compose es una herramienta muy útil para entornos en producción, para staging, para testing y para cualquier caso en el que queramos arrancar varios contenedores Docker al mismo tiempo sin necesidad de estar configurando cada contenedor por separado.
Docker Desktop: ¿Qué es?
La instalación de Docker no se limita a servidores VPS o servidores dedicados, sino que también podemos utilizar Docker en nuestro ordenador.
Lo bueno es que podemos probar imágenes de Docker en nuestro ordenador y, posteriormente, usar esas mismas imágenes de Docker en nuestro servidor si nos ha gustado su funcionamiento.
En el sitio web oficial de Docker podemos encontrar ejecutables para instalar Docker Engine y una interfaz gráfica básica en nuestro ordenador de trabajo. Se llama Docker Desktop: https://www.docker.com/products/docker-desktop/
En este caso, yo lo he instalado en mi ordenador Windows y la interfaz gráfica es esta:
Desde esta interfaz podemos configurar todo el sistema Docker y los contenedores Docker que vamos a usar, descargando directamente con un "pull" las imágenes desde Docker Hub para posteriormente configurar los contenedores y ponerlas a funcionar en el Docker Engine instalado en nuestro PC.
Quizás Docker Desktop no es la solución ideal para entornos de producción, pero sin duda es una herramienta muy buena para probar los cientos de miles de imágenes Docker que hay en Docker Hub.
¿Dónde podemos instalar Docker?
Como has visto en la sección anterior, podemos instalar Docker en nuestro ordenador, pero para entornos en producción no es la solución más adecuada.
Lo ideal es instalar Docker en una máquina dedicada o virtualizada, en función de los recursos que necesites para los contenedores que quieras usar.
Si solo quieres probar Docker, nuestros servidores VPS son ideales para esto porque el sistema de virtualización que utilizamos permite que Docker funcione correctamente con un buen rendimiento.
Deja una respuesta
Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *