Initial commit with translated description
This commit is contained in:
43
infrastructure.md
Normal file
43
infrastructure.md
Normal file
@@ -0,0 +1,43 @@
|
||||
# Infrastructure Traps
|
||||
|
||||
## Networking
|
||||
|
||||
- `localhost` en container es el container, no el host — usar `host.docker.internal`
|
||||
- `0.0.0.0` bind necesario para que container sea accesible — `127.0.0.1` solo local al container
|
||||
- `-p 5432:5432` sin IP = bind a todas interfaces = público si no hay firewall
|
||||
- Container restart cambia IP — usar network aliases, no IPs hardcoded
|
||||
|
||||
## DNS
|
||||
|
||||
- DNS default es 127.0.0.11 interno — no usa /etc/resolv.conf del host
|
||||
- `--dns` override completo — no se añade, reemplaza
|
||||
- DNS caching en daemon — cambios DNS externos tardan en propagarse
|
||||
- Container sin network no tiene DNS — ni siquiera localhost resuelve
|
||||
|
||||
## Volumes
|
||||
|
||||
- Volume anónimo (`VOLUME` en Dockerfile) acumula sin límite — nunca se borran automáticamente
|
||||
- `docker system prune` NO borra volumes — necesita `--volumes` explícito
|
||||
- Bind mount permissions: container user vs host user — mismatch = permission denied
|
||||
- NFS volumes con latencia = performance horrible — especialmente para node_modules
|
||||
|
||||
## Storage Driver
|
||||
|
||||
- `overlay2` default pero overlayfs en kernel viejo = bugs sutiles
|
||||
- Storage driver diferente entre dev/prod = comportamiento diferente
|
||||
- Logs sin limit crecen infinito — `--log-opt max-size=10m`
|
||||
- `/var/lib/docker` lleno = daemon se cuelga — monitoring esencial
|
||||
|
||||
## Resources
|
||||
|
||||
- Sin `--memory` limit = container puede usar toda la RAM y triggerar OOM killer
|
||||
- `--memory` sin `--memory-swap` = swap = 2x memory — puede ser mucho
|
||||
- `--cpus=0.5` es limit, no reservation — otros containers pueden usar
|
||||
- Java en container sin `-XX:+UseContainerSupport` no ve el límite correcto
|
||||
|
||||
## Security
|
||||
|
||||
- `--privileged` desactiva TODA la seguridad — casi nunca necesario
|
||||
- `--cap-add` granular mejor que privileged — solo lo que necesitas
|
||||
- Root en container puede ser root en host — user namespaces para evitar
|
||||
- Secrets en env vars visibles con `docker inspect` — usar secrets/mounts
|
||||
Reference in New Issue
Block a user