Qué es Docker y cómo funcionan sus contenedores
Autor: Redacción Domeny.ForSale Publicado
En pocas palabras: Docker es una plataforma para crear y ejecutar aplicaciones en contenedores, es decir, entornos aislados con las bibliotecas y herramientas necesarias. Ayuda a reproducir condiciones similares en el ordenador del desarrollador, durante las pruebas y en el servidor. No sustituye al alojamiento web ni es una máquina virtual completa.
Cómo funciona Docker y qué es un contenedor
Una aplicación no solo necesita código, sino también un entorno de ejecución: por ejemplo, una versión determinada de Python, bibliotecas y herramientas del sistema. Si estos elementos varían entre ordenadores, el programa puede funcionar para una persona y dar errores para otra. Docker ayuda a definir y preparar estas dependencias de forma reproducible.
Un contenedor es un proceso en ejecución o un grupo de procesos aislados del resto del sistema. La aplicación ve su propio sistema de archivos y dispone de un entorno de trabajo separado. También se pueden establecer límites de recursos, como la memoria y la capacidad de procesamiento.
Los contenedores comparten el núcleo del sistema, la parte responsable, entre otras cosas, de gestionar los procesos y el hardware. En un entorno Linux típico, utilizan el núcleo del sistema anfitrión. Para ejecutar contenedores Linux mediante Docker Desktop en macOS y Windows, se necesita una capa de Linux, proporcionada por una máquina virtual o un mecanismo como WSL 2.
Docker reduce las diferencias entre entornos, pero no las elimina por completo. La arquitectura del procesador, la configuración, el acceso a la red y los servicios externos a los que se conecta la aplicación siguen siendo importantes.
Imagen, Dockerfile y volumen: conceptos básicos
Para entender un proyecto típico, basta con distinguir algunos elementos:
- Imagen: una plantilla preparada que contiene los archivos de la aplicación, sus dependencias y la información necesaria para ejecutarla. A partir de una misma imagen se pueden ejecutar varios contenedores.
- Dockerfile: un archivo de texto con instrucciones para crear la imagen, como la elección de una imagen base, la instalación de bibliotecas y la copia del código.
- Registro de imágenes: un lugar donde se almacenan y distribuyen imágenes. Un ejemplo es Docker Hub; una organización también puede utilizar un registro privado.
- Volumen: un espacio de almacenamiento de datos gestionado por Docker, cuyo ciclo de vida es independiente del de un contenedor concreto.
- Docker Compose: una herramienta que permite definir varios servicios relacionados en un solo archivo y ejecutarlos juntos.
La diferencia entre una imagen y un contenedor se parece a la que existe entre una plantilla de documento y un documento abierto creado a partir de ella. La imagen sigue siendo el punto de partida, mientras que cada contenedor tiene su propio estado de ejecución y una capa de archivos en la que se puede escribir.
Los datos de la base de datos no deben almacenarse únicamente en la capa de escritura del contenedor. Detener el contenedor no los borra, pero eliminarlo supone perder esa capa. Un volumen permite conservar los datos al sustituir el contenedor, aunque no reemplaza una copia de seguridad y también puede eliminarse.
Docker frente a una máquina virtual
Una máquina virtual ejecuta un sistema operativo separado con su propio núcleo. Un contenedor no necesita un sistema operativo invitado completo, ya que utiliza un núcleo compartido. Por eso, los contenedores suelen arrancar más rápido y requieren menos recursos adicionales que las máquinas virtuales completas.
Esto no significa que Docker sea siempre la mejor opción. Una máquina virtual resulta útil cuando necesitas un sistema separado, un núcleo distinto o un aislamiento más fuerte. Los contenedores son adecuados para empaquetar y ejecutar servicios de aplicaciones, pero su aislamiento no debe considerarse equivalente al de una máquina independiente.
Estas soluciones suelen combinarse: en un servidor virtual alquilado se puede ejecutar Docker y, con él, varios contenedores. En ese caso, el alojamiento proporciona los recursos, mientras que Docker organiza la forma de ejecutar las aplicaciones.
Ejemplo: un sitio web con una aplicación y una base de datos
Supongamos que estás creando un sitio web con un área de clientes. El proyecto necesita una aplicación en Python y una base de datos PostgreSQL. Sin contenedores, cada persona del equipo debe instalar por su cuenta versiones compatibles de ambos componentes y configurar la conexión entre ellos.
Con Docker Compose se pueden definir dos servicios: la aplicación y la base de datos. Cada uno se ejecuta en un contenedor separado y ambos se comunican a través de una red común. Los datos de PostgreSQL se almacenan en un volumen y el puerto elegido de la aplicación se expone en el ordenador del usuario.
El flujo de trabajo habitual es el siguiente:
- El equipo guarda las instrucciones para crear la imagen de la aplicación en un archivo Dockerfile.
- En el archivo Compose, define los servicios, la red, el volumen y los ajustes necesarios.
- El desarrollador descarga el proyecto, completa la configuración local y ejecuta
docker compose up --build. - Docker crea la imagen de la aplicación, descarga la imagen necesaria de la base de datos e inicia los contenedores.
El comando solo funcionará si el proyecto está preparado correctamente y Docker está en funcionamiento. Al desplegar la aplicación en un servidor, sigue siendo necesario ocuparse de las contraseñas, el certificado TLS, las copias de seguridad, las actualizaciones y la monitorización. Una configuración local no se convierte automáticamente en una configuración de producción segura.
Cuándo conviene usar Docker y cómo empezar
Docker resulta especialmente útil cuando el proyecto incluye varios servicios, el equipo necesita un entorno uniforme o la aplicación se despliega con frecuencia en un servidor. También facilita las pruebas con distintas versiones de las dependencias sin instalarlas directamente en el sistema principal.
Para un sitio estático sencillo o un único script, los archivos adicionales y la gestión de contenedores pueden suponer un trabajo innecesario. Además, un alojamiento compartido convencional no tiene por qué permitir la ejecución de Docker: hay que confirmarlo con el proveedor.
Para empezar, elige un proyecto pequeño y ejecuta un solo servicio. Utiliza una imagen de confianza, consulta su documentación y expón únicamente los puertos necesarios. Comprueba en la documentación oficial de Docker el procedimiento de instalación para tu sistema y las condiciones actuales de la licencia de Docker Desktop, especialmente antes de utilizarlo en una empresa.
Consulta también: ¿Qué es una CDN?
