Encontranos en redes
DockerContenedoresAislamiento5 min de lectura
Seguridad en contenedores Docker
Contenedores non-root, filesystems read-only, límites de recursos, aislamiento de red y escaneo de imágenes.
Principios de seguridad en Docker
Docker no es seguro por defecto. Seguí estas prácticas para reducir riesgos:
- Nunca corras contenedores como root
- No uses
--privilegeda menos que sea absolutamente necesario - Limitá recursos (CPU, RAM)
- Aislá redes entre contenedores
- Escaneá imágenes antes de usarlas
Contenedores non-root
En tu Dockerfile:
dockerfile
FROM node:20-alpine
# Crear usuario no-root
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
WORKDIR /app
COPY --chown=appuser:appgroup . .
# Cambiar al usuario no-root
USER appuser
CMD ["node", "server.js"]Filesystem read-only
Ejecutá contenedores con filesystem de solo lectura:
bash
docker run --read-only --tmpfs /tmp --tmpfs /var/run mi-appEn docker-compose:
yaml
services:
app:
image: mi-app
read_only: true
tmpfs:
- /tmp
- /var/runLímites de recursos
yaml
services:
app:
image: mi-app
deploy:
resources:
limits:
cpus: '1.0'
memory: 512M
reservations:
cpus: '0.25'
memory: 128MO con docker run:
bash
docker run --memory=512m --cpus=1.0 mi-appAislamiento de red
Creá redes separadas para cada grupo de servicios:
yaml
services:
app:
networks:
- frontend
- backend
db:
networks:
- backend
nginx:
networks:
- frontend
networks:
frontend:
backend:
internal: true # Sin acceso a internetLa base de datos solo es accesible desde la red backend.
Escaneo de imágenes con Trivy
bash
# Instalar Trivy
sudo apt install -y wget
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
echo 'deb https://aquasecurity.github.io/trivy-repo/deb generic main' | sudo tee /etc/apt/sources.list.d/trivy.list
sudo apt update && sudo apt install -y trivy
# Escanear una imagen
trivy image mi-app:latest
# Escanear solo vulnerabilidades críticas
trivy image --severity CRITICAL mi-app:latestIntegrá Trivy en tu CI/CD para escanear antes de deployar.
Docker Secrets
Nunca pongas contraseñas en variables de entorno del Dockerfile:
yaml
services:
app:
secrets:
- db_password
secrets:
db_password:
file: ./secrets/db_password.txtEn la app, leé el secreto desde /run/secrets/db_password.
Buenas prácticas adicionales
dockerfile
# Usar imágenes mínimas (alpine)
FROM node:20-alpine
# No instalar paquetes innecesarios
RUN apk add --no-cache dumb-init
# Usar .dockerignore
# Copiar solo lo necesario
COPY package.json package-lock.json ./
RUN npm ci --production
COPY src/ ./src/Recomendaciones
- Usá imágenes oficiales y mínimas (alpine)
- Actualizá imágenes base regularmente
- No expongas el socket de Docker (
/var/run/docker.sock) - Usá Docker Bench Security para auditar tu instalación
- Implementá health checks en todos los contenedores
- Nunca guardes secretos en la imagen
¿Te resultó útil esta guía?