Zig e Docker — Containers Otimizados

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

StackImagem BaseTamanho Final
Zig + scratchscratch (0 B)~3 MB
Go + scratchscratch (0 B)~8 MB
Rust + scratchscratch (0 B)~5 MB
Node.js + alpinealpine (5 MB)~80 MB
Java + JREeclipse-temurin~300 MB
Python + alpinepython: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

Continue aprendendo Zig

Explore mais tutoriais e artigos em português para dominar a linguagem Zig.