Apéndice C — Docker y Docker Compose
|
Objetivo del apéndice
Imágenes, contenedores, redes, volúmenes y multi-servicio con Compose. Suficiente para correr Backstage localmente. |
Conceptos
-
Imagen: snapshot de un FS + comando de arranque.
-
Contenedor: instancia corriendo de una imagen.
-
Volumen: almacenamiento persistente fuera del FS del contenedor.
-
Red: espacio de nombres donde los contenedores se ven por hostname.
-
Compose: declarativa multi-contenedor en YAML.
Comandos esenciales
docker pull postgres:16 # bajar imagen
docker images # listar imágenes
docker run -d --name db postgres:16
docker ps # contenedores corriendo
docker ps -a # todos
docker logs -f db # logs del contenedor
docker exec -it db bash # shell interactivo
docker stop db # parar
docker rm db # borrar
docker rmi postgres:16 # borrar imagen
Compose mínimo
services:
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: secret
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
docker compose up -d # arranca en background
docker compose down # para y borra contenedores (no volúmenes)
docker compose logs -f # logs agregados
docker compose exec db bash
Dockerfile mínimo (Node)
FROM node:20-bookworm-slim AS builder
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN corepack enable && pnpm install --frozen-lockfile
COPY . .
RUN pnpm build
FROM node:20-bookworm-slim
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 7007
CMD ["node", "dist/index.js"]
| Buenas prácticas |
-
Imágenes slim (:code:`-slim`) cuando puedas.
-
:code:`HEALTHCHECK` para que Compose sepa si el contenedor está listo.
-
:code:`--init` para que las señales lleguen al proceso principal.
-
Variables de entorno en :code:`.env`, no en el YAML.