Marcio Cunha

Docker: guía completa para principiantes (2025)

Docker permite empaquetar aplicaciones y todo lo necesario para que funcionen dentro de contenedores aislados. Esta guía explica desde los conceptos básicos hasta comandos y archivos de configuración reales.

Marcio Cunha9 min
También disponible en:EnglishPortuguês
Resumen
  • Los contenedores comparten el núcleo del sistema operativo anfitrión, lo que los hace mucho más ligeros y eficientes que las máquinas virtuales tradicionales.
  • El flujo operativo se basa en construir plantillas de solo lectura llamadas imágenes para luego ponerlas en marcha como instancias ejecutables llamadas contenedores.
  • El archivo Dockerfile funciona como una receta paso a paso para automatizar la creación de entornos listos para producción.
  • Herramientas como Docker Compose simplifican la gestión simultánea de múltiples servicios interconectados, como aplicaciones web y bases de datos.
  • Aplicar buenas prácticas operativas como el uso de imágenes oficiales y archivos de exclusión reduce riesgos de seguridad y optimiza el almacenamiento.

Docker permite empaquetar aplicaciones y dependencias en contenedores, que son entornos aislados que funcionan exactamente igual en cualquier computadora. Esta guía reúne lo esencial para empezar bien.

1. ¿Qué es Docker?

Docker es una plataforma de contenedores. Los contenedores comparten el kernel del sistema (el núcleo que gestiona el hardware), por eso son más ligeros que las máquinas virtuales, las cuales simulan un sistema operativo completo.

  • Portabilidad: mismo comportamiento en cualquier entorno.
  • Consistencia: desarrollo, pruebas (QA) y producción alineados.
  • Aislamiento: aplicaciones independientes que no interfieren entre sí.
  • Eficiencia: menos consumo de recursos que las máquinas virtuales.

2. Conceptos clave

  • Imagen: plantilla de solo lectura que contiene el código y las herramientas de la aplicación.
  • Contenedor: una instancia en ejecución de una imagen, como abrir un programa a partir de un instalador.
  • Dockerfile: un archivo de texto con la receta exacta para construir imágenes paso a paso.

3. Instalar Docker

Windows y macOS: instala Docker Desktop desde el sitio oficial, que incluye una interfaz visual y las herramientas de consola.

Linux (Ubuntu/Debian):

sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce
docker --version

4. Comandos esenciales

Imágenes:

docker pull nginx
docker images
docker rmi nginx

Contenedores:

docker run -d -p 8080:80 nginx
docker ps
docker ps -a
docker stop <container_id>
docker rm <container_id>
docker exec -it <container_id> sh

5. Tu primer proyecto con Docker (Node.js)

Carpeta:

mkdir mi-primer-docker
cd mi-primer-docker

package.json:

{
  "name": "mi-primer-docker",
  "version": "1.0.0",
  "scripts": { "start": "node server.js" },
  "dependencies": { "express": "^4.18.0" }
}

server.js:

const express = require("express");
const app = express();
const PORT = process.env.PORT || 3000;

app.get("/", (req, res) => {
  res.send("<h1>Mi primera aplicación Docker!</h1>");
});

app.listen(PORT, () => console.log("Corriendo en el puerto " + PORT));

Dockerfile:

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

Build y run:

docker build -t mi-app .
docker run -d -p 3000:3000 --name mi-contenedor mi-app
curl http://localhost:3000

.dockerignore:

node_modules
npm-debug.log
.git
.DS_Store

6. Docker Compose

Para múltiples servicios, usa un archivo docker-compose.yml que levanta todo con un solo comando:

version: "3.8"
services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
    depends_on:
      - db
  db:
    image: postgres:13
    environment:
      POSTGRES_DB: miapp
      POSTGRES_USER: usuario
      POSTGRES_PASSWORD: clave
    volumes:
      - postgres_data:/var/lib/postgresql/data
volumes:
  postgres_data:

Ejecutar:

docker compose up -d
docker compose down

7. Buenas prácticas

  • Usa imágenes oficiales para garantizar soporte y seguridad.
  • Aplica archivos de exclusión para reducir el tamaño final de la imagen.
  • Combina comandos de instalación en el Dockerfile para crear menos capas de datos.
  • Usa construcciones por etapas (multi-stage builds) para separar el código fuente del resultado final en proyectos grandes.
  • Evita ejecutar contenedores con permisos totales de administrador (root) por motivos de seguridad.
  • Agrega verificaciones de estado (health checks) para que Docker sepa si tu aplicación responde correctamente.

Próximos pasos

Continúa investigando sobre la optimización avanzada de imágenes, la integración continua con despliegue automatizado (CI/CD) y la gestión de contenedores a gran escala con herramientas de orquestación como Kubernetes.