DevOps
Actualizado el 6 de noviembre de 2026
Docker básico
Imágenes, contenedores, volúmenes, redes, Dockerfile multi-stage con pnpm, depuración y limpieza con Docker.
- #docker
- #contenedores
- #imagenes
- #devops
- #dockerfile
Imágenes
| Acción | Comando |
|---|---|
| Construir una imagen desde el directorio actual | |
| Construir pasando un argumento de build | |
| Construir solo hasta una etapa del Dockerfile | |
| Listar las imágenes locales | |
| Descargar una imagen de Docker Hub | |
| Etiquetar una imagen para un registro | |
| Subir una imagen al registro | |
| Ver las capas y su tamaño | |
| Eliminar una imagen local |
Contenedores
| Acción | Comando |
|---|---|
| Ejecutar contenedor en segundo plano exponiendo puerto | |
| Ejecutar con variables de entorno | |
| Ejecutar cargando variables desde un archivo | |
| Ejecutar uno temporal que se borra al salir | |
Ver contenedores en ejecución (o todos con -a) | |
| Detener un contenedor | |
| Iniciar un contenedor detenido | |
| Reiniciar un contenedor | |
| Detener y eliminar un contenedor |
Inspeccionar y copiar
| Acción | Comando |
|---|---|
| Ver la configuración completa en JSON | |
| Ver consumo de CPU y memoria en vivo | |
| Copiar un archivo del contenedor al host | |
| Copiar un archivo del host al contenedor | |
| Ver los procesos dentro del contenedor |
Volúmenes
| Acción | Comando |
|---|---|
| Crear un volumen con nombre | |
| Listar volúmenes | |
| Ver dónde vive y quién lo usa | |
| Montar un volumen con nombre | |
| Montar una carpeta del host (bind mount) | |
| Eliminar un volumen |
- Volumen con nombre (
pgdata:/ruta): lo gestiona Docker, sobrevive al contenedor. Ideal para bases de datos. - Bind mount (
./carpeta:/ruta): refleja una carpeta del host. Ideal para desarrollo con recarga en vivo.
Redes
| Acción | Comando |
|---|---|
| Crear una red bridge propia | |
| Listar redes | |
| Arrancar un contenedor en esa red | |
| Conectar un contenedor existente a la red | |
| Ver qué contenedores están en la red |
En una red creada por ti, los contenedores se encuentran por nombre: desde api puedes conectar a db:5432. La red bridge por defecto no ofrece esa resolución DNS.
Dockerfile multi-stage con pnpm
dockerfile
# syntax=docker/dockerfile:1
FROM node:24-alpine AS base
# Official pnpm binary (use the non-alpine tag for Debian-based images)
COPY --from=ghcr.io/pnpm/pnpm:12-alpine /opt/pnpm /opt/pnpm
RUN for bin in pnpm pnpx; do ln -s "/opt/pnpm/$bin" "/usr/local/bin/$bin"; done
WORKDIR /app
FROM base AS build
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml* ./
RUN --mount=type=cache,id=pnpm,target=/var/cache/pnpm \
pnpm install --store-dir /var/cache/pnpm --frozen-lockfile
COPY . .
RUN pnpm run build && pnpm prune --prod
FROM base AS runtime
ENV NODE_ENV=production
COPY --from=build --chown=node:node /app/node_modules ./node_modules
COPY --from=build --chown=node:node /app/dist ./dist
USER node
EXPOSE 3000
CMD ["node", "dist/index.js"]pnpm se copia desde la imagen oficial ghcr.io/pnpm/pnpm, como indica la guía de Docker de pnpm. El cache mount de BuildKit reutiliza los paquetes descargados entre builds.
Un .dockerignore evita copiar basura y secretos al contexto de build:
output
node_modules
dist
.git
.env*
*.log
DockerfileDepuración
| Acción | Comando |
|---|---|
| Seguir los logs de un contenedor en tiempo real | |
| Ver logs de los últimos 10 minutos | |
| Ver solo las últimas 100 líneas | |
| Abrir una terminal interactiva dentro del contenedor | |
| Ver la IP del contenedor | |
| Ver el estado y el código de salida |
Limpieza
| Acción | Comando |
|---|---|
| Eliminar contenedores detenidos, redes y capas huérfanas | |
| Limpieza profunda (incluye imágenes no usadas y volúmenes) | |
| Eliminar solo imágenes sin etiqueta | |
| Eliminar volúmenes que ningún contenedor usa | |
| Ver el uso de disco de Docker |