Introducción a Docker: conceptos y primeros pasos en Linux
Docker es la herramienta de contenedores más usada en el mundo DevOps. Si llevas tiempo en Linux y quieres dar el salto a contenedores, estás en el lugar correcto. En este post te explico qué es Docker, cómo funciona y los primeros comandos que necesitas para empezar desde cero.
¿Qué es Docker y por qué usarlo?
Docker es una plataforma de contenedores que te permite empaquetar una aplicación con todo lo que necesita para ejecutarse — código, dependencias, configuración — en una unidad portátil llamada contenedor. Puedes consultar la documentación oficial de Docker para una visión más completa.
Contenedor vs Máquina Virtual
La diferencia fundamental es que un contenedor Docker comparte el kernel del sistema operativo host, mientras que una VM tiene su propio kernel completo:
| Característica | Contenedor Docker | Máquina Virtual |
|---|---|---|
| Arranque | Segundos | Minutos |
| Tamaño | MB | GB |
| Aislamiento | Proceso | Sistema completo |
| Rendimiento | Casi nativo | Overhead significativo |
| Portabilidad | Total | Limitada |
Conceptos clave de Docker
- Imagen: plantilla de solo lectura que define el contenedor. Es como una foto del sistema en un momento dado.
- Contenedor: instancia en ejecución de una imagen. Puedes tener múltiples contenedores de la misma imagen.
- Dockerfile: archivo de texto con las instrucciones para construir una imagen.
- Registry: repositorio de imágenes. El más conocido es Docker Hub.
- Volumen: mecanismo para persistir datos fuera del contenedor.
Instalar Docker en Linux
Ubuntu / Debian
# Instalar dependencias
sudo apt update
sudo apt install ca-certificates curl gnupg
# Añadir la clave GPG oficial de Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# Añadir el repositorio
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list
# Instalar Docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
# Verificar instalación
docker --version
CentOS / RHEL / Fedora
sudo dnf install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install docker-ce docker-ce-cli containerd.io
sudo systemctl enable --now docker
Ejecutar Docker sin sudo
# Añadir tu usuario al grupo docker
sudo usermod -aG docker $USER
# Aplicar el cambio sin reiniciar sesión
newgrp docker
# Verificar que funciona
docker run hello-world
Primeros pasos con Docker: comandos esenciales
Gestionar imágenes Docker
# Buscar una imagen en Docker Hub
docker search nginx
# Descargar una imagen
docker pull nginx
docker pull ubuntu:22.04
# Ver imágenes descargadas
docker images
# Eliminar una imagen
docker rmi nginx
# Eliminar imágenes sin usar
docker image prune
Ejecutar contenedores Docker
# Ejecutar un contenedor (se elimina al parar con --rm)
docker run --rm nginx
# Ejecutar en segundo plano (-d detached)
docker run -d nginx
# Ejecutar con nombre personalizado
docker run -d --name mi-nginx nginx
# Mapear puertos (host:contenedor)
docker run -d -p 8080:80 --name mi-nginx nginx
# Ejecutar con variables de entorno
docker run -d -e MYSQL_ROOT_PASSWORD=secreto mysql
# Acceder a un contenedor en ejecución
docker exec -it mi-nginx bash
Gestionar contenedores Docker
# Ver contenedores en ejecución
docker ps
# Ver todos (incluidos los parados)
docker ps -a
# Parar un contenedor
docker stop mi-nginx
# Iniciar un contenedor parado
docker start mi-nginx
# Reiniciar
docker restart mi-nginx
# Eliminar un contenedor
docker rm mi-nginx
# Eliminar todos los contenedores parados
docker container prune
# Ver logs del contenedor
docker logs mi-nginx
docker logs -f mi-nginx # seguir logs en tiempo real
Tu primer Dockerfile
Un Dockerfile es el archivo que define cómo construir tu propia imagen Docker. Aquí un ejemplo para una app Node.js sencilla:
# Dockerfile
# Imagen base
FROM node:18-alpine
# Directorio de trabajo dentro del contenedor
WORKDIR /app
# Copiar package.json e instalar dependencias
COPY package*.json ./
RUN npm install
# Copiar el resto del código
COPY . .
# Puerto que expone el contenedor
EXPOSE 3000
# Comando que se ejecuta al arrancar el contenedor
CMD ["node", "index.js"]
# Construir la imagen desde el Dockerfile
docker build -t mi-app:1.0 .
# Ejecutar la imagen que acabas de construir
docker run -d -p 3000:3000 --name mi-app mi-app:1.0
Instrucciones más usadas en Dockerfile
| Instrucción | Qué hace |
|---|---|
FROM | Imagen base de la que partes |
WORKDIR | Directorio de trabajo dentro del contenedor |
COPY | Copia archivos del host al contenedor |
RUN | Ejecuta comandos durante la construcción |
ENV | Define variables de entorno |
EXPOSE | Documenta el puerto que usa el contenedor |
CMD | Comando por defecto al arrancar |
ENTRYPOINT | Comando fijo, no se puede sobreescribir |
Limpieza del sistema Docker
# Ver cuánto espacio usa Docker
docker system df
# Limpiar todo lo que no se usa (contenedores, imágenes, redes)
docker system prune
# Limpieza total incluyendo volúmenes
docker system prune -a --volumes
Conclusión
Docker es una herramienta que cambia la forma de trabajar con aplicaciones en Linux. Una vez que entiendes la diferencia entre imagen y contenedor, y aprendes los comandos básicos, todo lo demás fluye. Antes de seguir con Docker, te recomiendo tener claro el post sobre permisos en Linux — los volúmenes de Docker tienen mucho que ver con eso.
En el próximo post veremos Docker vs Podman: cuál usar en 2026. ¿Tienes dudas sobre Docker? Déjalas en los comentarios.
