Tutorial de Docker para principiantes: guía completa de Docker en 2026

  1. Inicio
  2. Blog
  3. DevOps

DevOps

Tutorial de Docker para principiantes: guía completa de Docker en 2026

“En mi máquina funciona” es un problema clásico. Docker lo resuelve empaquetando tu aplicación y todo lo que necesita en una sola caja. Aprende cómo, paso a paso.

Por Stack QuoraActualizado el 29 oct 202611 min de lectura
Tutorial de Docker para principiantes que muestra una aplicación empaquetada en un contenedor que se ejecuta en cualquier sitio

Ideas clave

  • Un contenedor es una caja ligera y aislada que ejecuta tu aplicación.
  • Una imagen es la receta. Un contenedor es una copia en ejecución de ella.
  • Un Dockerfile describe cómo construir una imagen.
  • Los volúmenes protegen los datos. Compose ejecuta muchos contenedores juntos.

Construyes una aplicación en tu portátil. Funciona bien. Tu compañero la ejecuta y le salen errores, porque tiene otra versión de Python, falta una biblioteca u otra configuración. Pasan horas buscando la diferencia.

Docker elimina este problema. La misma caja se ejecuta igual en tu portátil, en tu servidor y en tu pipeline de CI.

¿Qué es Docker?

Docker es una herramienta para construir y ejecutar contenedores. Un contenedor contiene tu aplicación más las herramientas y bibliotecas exactas que necesita. Usa el núcleo del sistema operativo del equipo anfitrión, así que arranca en segundos y usa mucha menos memoria que una máquina virtual completa.

Punto Contenedor Máquina virtual
Tamaño Normalmente megabytes Normalmente gigabytes
Tiempo de arranque Segundos Minutos
Aislamiento A nivel de proceso Sistema operativo completo
Ideal para Aplicaciones y servicios Ejecutar distintos sistemas operativos

Conceptos clave

  • Imagen: una plantilla de solo lectura. Contiene tu aplicación y su configuración.
  • Contenedor: una instancia en ejecución de una imagen.
  • Dockerfile: un archivo de texto con los pasos para construir una imagen.
  • Registro: un lugar donde almacenar imágenes, como Docker Hub.
  • Volumen: almacenamiento que vive fuera del contenedor.
  • Red: una forma de que los contenedores hablen entre sí.

Piensa en una imagen como la receta de una tarta con sus ingredientes, y en un contenedor como una tarta que has horneado con ella. Puedes hornear muchas tartas con una sola receta.

Instala Docker y comprueba que funciona

Instala Docker Desktop en Windows o macOS, o Docker Engine en Linux, desde el sitio web oficial de Docker. Luego abre una terminal y ejecuta:

docker --version
docker run hello-world

Si ves un mensaje “Hello from Docker!”, todo está configurado.

Ejecuta tu primer contenedor real

Vamos a ejecutar un servidor web llamado nginx:

docker run -d -p 8080:80 --name my-web nginx
  • -d lo ejecuta en segundo plano.
  • -p 8080:80 asigna el puerto 8080 de tu ordenador al puerto 80 dentro del contenedor.
  • --name my-web le da un nombre amigable.

Abre http://localhost:8080 en tu navegador. Deberías ver la página de bienvenida de nginx. Docker descargó la imagen por ti la primera vez.

Comandos esenciales de Docker

Comando Qué hace
docker ps Lista los contenedores en ejecución (añade -a para todos)
docker images Lista las imágenes de tu máquina
docker logs my-web Muestra los registros de un contenedor
docker exec -it my-web sh Abre una shell dentro de un contenedor
docker stop my-web Detiene un contenedor
docker rm my-web Elimina un contenedor detenido
docker rmi nginx Elimina una imagen
docker system prune Limpia datos sin usar (lee antes el aviso)

Escribe un Dockerfile

Ahora empaqueta tu propia aplicación. Supón que tienes una pequeña aplicación de Node.js con package.json y server.js. Crea un archivo llamado Dockerfile:

FROM node:20-alpine
WORKDIR /app

COPY package*.json ./
RUN npm ci --omit=dev

COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

Qué hace cada línea:

  • FROM elige la imagen base. Las versiones Alpine son pequeñas.
  • WORKDIR define la carpeta de trabajo dentro de la imagen.
  • COPY package*.json y RUN npm ci instalan primero las dependencias. Docker guarda en caché esta capa, así que las reconstrucciones son más rápidas cuando solo cambia tu código.
  • COPY . . añade el resto de tu código.
  • CMD es el comando que inicia la aplicación.

Añade un archivo .dockerignore con node_modules y .git para no copiarlos a la imagen. Luego construye y ejecuta:

docker build -t my-app:1.0 .
docker run -d -p 3000:3000 my-app:1.0

Conserva los datos con volúmenes

Cuando eliminas un contenedor, sus datos desaparecen. Para los datos que quieres conservar, como una base de datos, usa un volumen:

docker volume create pgdata
docker run -d --name db -e POSTGRES_PASSWORD=change-me \
  -v pgdata:/var/lib/postgresql/data postgres:16

Ahora puedes borrar y volver a crear el contenedor, y los datos se quedan. Si estás aprendiendo bases de datos, nuestro tutorial de SQL para principiantes combina muy bien con esto.

Conecta contenedores con redes

Los contenedores de la misma red definida por el usuario pueden alcanzarse por su nombre:

docker network create app-net
docker run -d --network app-net --name db postgres:16
docker run -d --network app-net --name api my-app:1.0

Dentro de api, ya puedes conectarte a la base de datos con el nombre de host db.

Ejecuta muchos contenedores con Docker Compose

Escribir comandos largos cansa. Docker Compose te permite describir todos los servicios en un único archivo, compose.yaml:

services:
  api:
    build: .
    ports:
      - "3000:3000"
    environment:
      DATABASE_URL: postgres://postgres:change-me@db:5432/app
    depends_on:
      - db
  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: change-me
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:

Inicia todo con un comando y deténlo con otro:

docker compose up -d
docker compose down

Buenas prácticas

  • Usa imágenes base pequeñas y oficiales y fija una versión, no latest.
  • No ejecutes como root dentro del contenedor cuando puedas evitarlo.
  • No pongas nunca secretos en la imagen ni en el Dockerfile. Pásalos en tiempo de ejecución.
  • Un proceso principal por contenedor.
  • Analiza las imágenes en busca de problemas conocidos antes de lanzarlas.
  • Usa CI para construir y probar las imágenes automáticamente. Consulta nuestra guía de GitHub Actions.

Consejo: ejecuta también tus pruebas dentro de un contenedor. Da el mismo resultado en cada máquina y hace más estables las pruebas end-to-end.

Preguntas frecuentes

¿Para qué se usa Docker?

Docker empaqueta las aplicaciones con sus dependencias para que se ejecuten igual en todas partes. Se usa para el desarrollo, las pruebas, el despliegue y para ejecutar muchos servicios juntos.

¿Cuál es la diferencia entre una imagen y un contenedor?

Una imagen es una plantilla fija. Un contenedor es una copia en ejecución creada a partir de esa imagen.

¿Es Docker lo mismo que una máquina virtual?

No. Los contenedores comparten el núcleo del anfitrión y son mucho más ligeros. Una máquina virtual ejecuta un sistema operativo invitado completo.

¿Necesito Docker Compose?

No lo necesitas para un solo contenedor, pero hace mucho más fácil iniciar y compartir aplicaciones con varias partes, como una API y una base de datos.

¿Es gratis aprender Docker?

Sí. Docker Engine es de código abierto y Docker Desktop tiene opciones para el aprendizaje personal. Consulta el sitio de Docker para ver las condiciones de licencia actuales para empresas.

Sigue aprendiendo

Trabaja con Stack Quora

¿Necesitas ayuda con testing, WordPress o SEO?

Ayudamos a los equipos a lanzar mejor software y a hacer crecer sus sitios. Cuéntanos en qué trabajas y te sugeriremos un siguiente paso claro.