Skip to main content

Command Palette

Search for a command to run...

Docker para principiantes: contenedores desde cero

Tiempo de lectura: 9 minutos Categoría: Linux · Herramientas Nivel: Principiante

Published
6 min read

Si llevas tiempo en el mundo de la tecnología seguro que has oído hablar de Docker. Es una de esas herramientas que al principio parece complicada pero que una vez que la entiendes te preguntas cómo vivías sin ella. En este artículo te explico qué es, por qué deberías aprenderla y cómo empezar desde cero.

¿Qué es Docker y por qué existe?

Antes de Docker, desplegar una aplicación era un dolor de cabeza. El clásico problema era que algo funcionaba perfectamente en tu máquina de desarrollo pero fallaba en el servidor de producción porque tenían versiones distintas de Python, dependencias diferentes o configuraciones del sistema que no coincidían.

Docker soluciona esto con el concepto de contenedor. Un contenedor es un paquete que incluye la aplicación y todo lo que necesita para funcionar: las dependencias, las librerías, la configuración y el sistema de archivos. Es como una caja sellada que se comporta exactamente igual en cualquier máquina donde la ejecutes.

La diferencia con una máquina virtual es importante. Una máquina virtual virtualiza hardware completo e incluye un sistema operativo entero, lo que la hace pesada y lenta de arrancar. Un contenedor comparte el kernel del sistema operativo anfitrión y solo incluye lo que la aplicación necesita, haciéndolo mucho más ligero y rápido.

Conceptos clave que necesitas entender

Antes de instalar nada es importante entender tres conceptos fundamentales.

Una imagen es una plantilla de solo lectura que define cómo será el contenedor. Es como una receta. Puedes descargar imágenes ya hechas de Docker Hub, el repositorio oficial, o crear las tuyas propias. Hay imágenes oficiales para prácticamente cualquier cosa: Ubuntu, Nginx, PostgreSQL, Node.js, Python y miles más.

Un contenedor es una instancia en ejecución de una imagen. A partir de una misma imagen puedes crear todos los contenedores que quieras. Cada contenedor es independiente y tiene su propio sistema de archivos, red y procesos.

Docker Hub es el registro público donde se almacenan y comparten las imágenes. Es como GitHub pero para imágenes Docker. Cuando haces docker pull o docker run con el nombre de una imagen, Docker la busca ahí automáticamente.

Instalar Docker

En Ubuntu y Debian la forma recomendada es añadir el repositorio oficial de Docker y instalarlo desde ahí, no desde los repositorios de la distribución porque suelen tener versiones desactualizadas. La documentación oficial en docs.docker.com tiene instrucciones precisas para cada distribución.

En Arch Linux Docker está disponible directamente en los repositorios oficiales con pacman. En Fedora se instala con dnf.

Tras la instalación añade tu usuario al grupo docker para poder ejecutar comandos sin sudo. Esto se hace con el comando usermod -aG docker seguido de tu nombre de usuario. Cierra la sesión y vuelve a abrirla para que el cambio tenga efecto.

Verifica que todo funciona ejecutando docker run hello-world. Este comando descarga una imagen de prueba y ejecuta un contenedor que imprime un mensaje de bienvenida.

Tus primeros comandos

Con Docker instalado estos son los comandos que usarás en el día a día.

Para descargar una imagen sin ejecutarla usa docker pull seguido del nombre de la imagen. Por ejemplo docker pull ubuntu descarga la última versión de Ubuntu.

Para ejecutar un contenedor usa docker run. Si la imagen no está descargada Docker la descargará automáticamente. El flag -it te da una terminal interactiva dentro del contenedor, y --rm hace que el contenedor se elimine automáticamente cuando lo cierras.

Para ver los contenedores que están ejecutándose en este momento usa docker ps. Para ver todos los contenedores incluidos los que están parados añade el flag -a.

Para parar un contenedor usa docker stop seguido del nombre o ID del contenedor. Para eliminarlo usa docker rm. Para eliminar una imagen usa docker rmi.

Un ejemplo práctico: servidor web Nginx

Vamos a poner en marcha un servidor web Nginx en segundos para que veas la potencia de Docker.

El comando docker run con los flags -d para ejecutar en segundo plano, -p 8080:80 para mapear el puerto 8080 de tu máquina al puerto 80 del contenedor, y el nombre de la imagen nginx, levanta un servidor web completo al instante.

Abre tu navegador y ve a localhost:8080. Verás la página de bienvenida de Nginx. Todo esto sin instalar nada en tu sistema, sin tocar archivos de configuración y sin riesgo de romper nada. Cuando no lo necesites más ejecuta docker stop y docker rm y es como si nunca hubiera existido.

Dockerfile: crea tus propias imágenes

La verdadera potencia de Docker está en crear imágenes propias con un Dockerfile. Es un archivo de texto con instrucciones que Docker sigue para construir la imagen.

Un Dockerfile básico empieza con FROM para indicar la imagen base, luego WORKDIR para establecer el directorio de trabajo, COPY para copiar archivos de tu máquina a la imagen, RUN para ejecutar comandos durante la construcción, y CMD para indicar qué comando ejecutar cuando arranque el contenedor.

Una vez tienes el Dockerfile construyes la imagen con docker build -t seguido del nombre que quieras darle y un punto para indicar que el Dockerfile está en el directorio actual.

Docker Compose: múltiples contenedores

La mayoría de aplicaciones reales necesitan varios servicios trabajando juntos: una aplicación web, una base de datos, un servidor de caché. Docker Compose te permite definir y gestionar estos múltiples contenedores con un solo archivo YAML.

En el archivo docker-compose.yml defines cada servicio con su imagen, los puertos que expone, las variables de entorno y las dependencias entre servicios. Luego con un solo comando docker compose up -d arrancas todos los servicios a la vez.

Esta es la forma en la que se despliegan la mayoría de aplicaciones modernas en entornos de desarrollo y producción.

Conclusión

Docker ha cambiado la forma en que se desarrolla y despliega software. Empezar con él puede parecer intimidante pero los conceptos básicos se aprenden en una tarde y el valor que aporta es inmediato.

El siguiente paso después de dominar Docker es aprender Kubernetes para orquestar contenedores a escala, pero eso es tema para otro artículo.


¿Usas Docker en tu flujo de trabajo? ¿O prefieres Podman? Cuéntamelo en los comentarios.