Docker permite empaquetar aplicaciones y dependencias en contenedores que funcionan igual en cualquier entorno. 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, por eso son más ligeros que las máquinas virtuales.
- Portabilidad: mismo comportamiento en cualquier entorno.
- Consistencia: dev, QA y producción alineados.
- Aislamiento: apps independientes.
- Eficiencia: menos recursos que VMs.
2. Conceptos clave
- Imagen: plantilla de solo lectura con la app.
- Contenedor: instancia en ejecución de una imagen.
- Dockerfile: receta para construir imágenes.
3. Instalar Docker
Windows y macOS: instala Docker Desktop desde el sitio oficial.
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 --version4. Comandos esenciales
Imágenes:
docker pull nginx
docker images
docker rmi nginxContenedores:
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> sh5. Tu primer proyecto con Docker (Node.js)
Carpeta:
mkdir mi-primer-docker
cd mi-primer-dockerpackage.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_Store6. Docker Compose
Para múltiples servicios, usa docker-compose.yml:
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 down7. Buenas prácticas
- Usa imágenes oficiales.
- Aplica
.dockerignorepara reducir tamaño. - Combina capas cuando sea posible.
- Usa multi-stage builds para proyectos grandes.
- Evita ejecutar como root.
- Agrega health checks.
Próximos pasos
Explora optimización de imágenes, CI/CD con Docker y orquestación con Docker Swarm o Kubernetes.