Zig e Docker — Containers Otimizados
Zig produz binários estáticos sem dependências, tornando possível criar imagens Docker a partir de scratch — literalmente sem sistema operacional. O resultado: imagens de 2-5 MB em vez de centenas de MB.
Dockerfile Otimizado
# Multi-stage build
FROM alpine:3.19 AS builder
# Instalar Zig
RUN apk add --no-cache curl && \
curl -L https://ziglang.org/download/0.14.0/zig-linux-x86_64-0.14.0.tar.xz | tar -xJ && \
mv zig-linux-x86_64-0.14.0 /usr/local/zig
ENV PATH="/usr/local/zig:${PATH}"
WORKDIR /app
COPY . .
# Compilar binário estático com musl
RUN zig build -Doptimize=ReleaseSafe -Dtarget=x86_64-linux-musl
# Imagem final: FROM scratch (sem OS)
FROM scratch
COPY --from=builder /app/zig-out/bin/app /app
# Certificados SSL (se necessário para HTTPS)
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
EXPOSE 8080
USER 1000:1000
ENTRYPOINT ["/app"]
Comparação de Tamanho de Imagens
| Stack | Imagem Base | Tamanho Final |
|---|---|---|
| Zig + scratch | scratch (0 B) | ~3 MB |
| Go + scratch | scratch (0 B) | ~8 MB |
| Rust + scratch | scratch (0 B) | ~5 MB |
| Node.js + alpine | alpine (5 MB) | ~80 MB |
| Java + JRE | eclipse-temurin | ~300 MB |
| Python + alpine | python:alpine | ~60 MB |
Docker Compose para Desenvolvimento
version: '3.8'
services:
api:
build:
context: .
dockerfile: Dockerfile
ports:
- "8080:8080"
environment:
- DATABASE_URL=postgres://user:pass@db:5432/app
depends_on:
- db
deploy:
resources:
limits:
memory: 32M # Zig usa muito pouca memória
cpus: '0.5'
db:
image: postgres:16-alpine
environment:
- POSTGRES_PASSWORD=pass
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
Build para Múltiplas Arquiteturas
# Build multi-arch com Zig (sem Docker buildx!)
for target in x86_64-linux-musl aarch64-linux-musl; do
zig build -Dtarget=$target -Doptimize=ReleaseSafe
mkdir -p dist/$target
cp zig-out/bin/app dist/$target/
done
# Criar manifest multi-arch com Docker
docker buildx build --platform linux/amd64,linux/arm64 -t minha-app:latest .
Conclusão
Zig é a linguagem ideal para containers Docker otimizados. Binários estáticos sem dependências permitem imagens FROM scratch de poucos MB, com startup instantâneo e footprint de memória mínimo. Para microserviços em Kubernetes, isso se traduz em deploys mais rápidos, menor consumo de recursos e custos reduzidos.
Conteúdo Relacionado
- Zig Cloud Native — Zig na nuvem
- Kubernetes Operators em Zig — K8s
- Microserviços com Zig — Microserviços
- CI/CD com Zig — Automação
- Cross-Compilation — Compilação cruzada