Container Internals: Como Funciona Por Dentro ๐ฌ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ CONTAINER INTERNALS MATRIX โ
โ โ
โ [ Namespaces + Cgroups + UnionFS = Container ] โ
โ โ
โ "Isolamento, Controle e Eficiรชncia" โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Linux Namespaces ๐ฐ
Tipos de Namespaces Detalhados
1. PID Namespace
โโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Host PID Namespace โ
โ pid: 1234 โ
โ โโโโโโโโโโโโโโโโโโโโ โ
โ โContainer PID NS โ โ
โ โ pid: 1 โ โ
โ โโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโ
Isolamento de processos
Hierarquia própria
PID 1 como init
Nested namespaces
2. Network Namespace
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Host Network โ
โ eth0: 192.168.1.10 โ
โ โโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โContainer Net NS โ โ
โ โ eth0: 172.17.0.2 โ โ
โ โ lo: 127.0.0.1 โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Interface virtual
Routing tables próprias
Firewall rules
Socket isolation
3. Mount Namespace
โโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Host Mount NS โ
โ / โ
โ โโโ bin โ
โ โโโ etc โ
โ โโโ container_root โ
โ โโโ [Container] โ
โโโโโโโโโโโโโโโโโโโโโโโโโโ
Filesystem isolation
Bind mounts
Pivoting root
Mount propagation
Control Groups (cgroups) v2 ๐๏ธ
Hierarquia Unificada
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ /sys/fs/cgroup/ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โโโ container.slice โ
โ โ โโโ memory.max โ
โ โ โโโ cpu.max โ
โ โ โโโ io.max โ
โ โโโ system.slice โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Controllers Detalhados
CPU Controller
# Limitar CPU para 50%
echo "50000 100000" > cpu.max
# Definir peso CPU
echo "100" > cpu.weight
Memory Controller
# Limite de memรณria
echo "256M" > memory.max
# Soft limit
echo "200M" > memory.high
I/O Controller
# Limite de I/O
echo "10485760" > io.max
# Peso I/O
echo "100" > io.weight
Union File System Deep Dive ๐ฆ
Overlay2 Internals
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Container Layer (Upper) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Container Write Layer โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Image Layer N (Lower) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Image Layer 2 (Lower) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Base Layer (Lower) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Layer Operations
โโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Write Operation โ
โ โโโโโโโโโโโโโโโโโโโโ โ
โ โ Copy-Up โ โ
โ โ Modify Upper โ โ
โ โโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโ
Directory Structure
/var/lib/docker/overlay2/
โโโ l/ # Layer shortcuts
โโโ [layer-id]/ # Layer content
โ โโโ diff/ # Layer fs content
โ โโโ work/ # Overlay work dir
โ โโโ merged/ # Mount point
โ โโโ lower # Lower layer refs
Container Runtime Spec ๐
OCI Runtime Specification
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ runtime-spec โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โโโ config.json โ
โ โโโ rootfs/ โ
โ โโโ state.json โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Container Lifecycle States
โโโโโโโโโโโโ โโโโโโโโโโโโ
โ creating โ โโโบ โ created โ
โโโโโโโโโโโโ โโโโโโฌโโโโโโ
โ
โผ
โโโโโโโโโโโโ โโโโโโโโโโโโ
โ stopped โ โโโ โ running โ
โโโโโโโโโโโโ โโโโโโโโโโโโ
Security Internals ๐
Linux Capabilities
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Default Container Capabilities โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ CHOWN โ SETUID โ
โ DAC_OVERRIDE โ SETGID โ
โ FOWNER โ NET_BIND โ
โ MKNOD โ SYS_CHROOT โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Seccomp Profiles
{
"defaultAction": "SCMP_ACT_ERRNO",
"architectures": ["SCMP_ARCH_X86_64"],
"syscalls": [
{
"names": ["read", "write"],
"action": "SCMP_ACT_ALLOW"
}
]
}
AppArmor Profiles
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Docker Default Profile โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ file, โ
โ network, โ
โ capability, โ
โ mount โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Advanced Networking ๐
CNI (Container Network Interface)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ CNI Architecture โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โโโโโโโโโโโโ โโโโโโโโโโโโ โ
โ โ Plugin โ โ IPAM โ โ
โ โโโโโโโโโโโโ โโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Network Drivers
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Network Driver Types โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ bridge โ
โ host โ
โ overlay โ
โ macvlan โ
โ none โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Storage Deep Dive ๐พ
Storage Driver Operations
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Storage Driver Stack โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Container Layer โ
โ Image Layers โ
โ Storage Driver โ
โ Block Device โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Volume Types
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Volume Types โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Named Volumes โ
โ Bind Mounts โ
โ tmpfs Mounts โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Advanced Debugging ๐
Trace Commands
# Syscall tracing
strace -p $PID
# Network tracing
tcpdump -i any container_port
# Block I/O tracing
blktrace -d /dev/sda -o trace
Profiling
# CPU profiling
perf record -p $PID
# Memory profiling
heaptrack $PID
Performance Tuning โก
Resource Optimization
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Performance Factors โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ CPU Scheduling โ
โ Memory Management โ
โ I/O Throughput โ
โ Network Latency โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Monitoring Metrics
# CPU stats
docker stats --format "table {{.Container}}\t{{.CPUPerc}}"
# Memory usage
docker stats --format "table {{.Container}}\t{{.MemUsage}}"
Waifu Tips ๐ฎ
Referências Técnicas ๐
Documentação Oficial
OCI Runtime Specification
Linux Kernel Documentation
Docker Engine Internals
Container Security Guide
Ferramentas Úteis
nsenter
unshare
runc
ctr
nerdctl
Debugging Tools
strace
tcpdump
perf
heaptrack
15 abril 2025