Sobes.tech
Middle

Jaké jsou hlavní metody optimalizace obrazů v DevOps?

sobes.tech AI

Odpověď od AI

Optimalizace obrazů kontejnerů je důležitá pro urychlení nasazení, snížení spotřeby zdrojů a snížení útočného vektoru. Hlavní metody:

  • Vícefázová stavba (Multi-stage builds): Použití několika instrukcí FROM v Dockerfile. V mezistupních jsou vytvářeny artefakty (přeložený kód, knihovny), které jsou poté zkopírovány do finálního, minimálního obrazu. To umožňuje odstranit z finálního obrazu nástroje pro sestavení a závislosti, které jsou potřeba pouze ve fázi kompilace.

    // Fáze 1: Stavba
    FROM golang:1.20 as builder
    WORKDIR /app
    COPY . .
    RUN go build -o myapp
    
    // Fáze 2: Finální fáze
    FROM alpine:latest
    RUN apk --no-cache add ca-certificates
    COPY --from=builder /app/myapp /usr/local/bin/
    CMD ["myapp"]
    
  • Použití lehkých základních obrazů: Výběr lehkých základních obrazů, jako je Alpine, scratch nebo distribuce bez předinstalovaných nástrojů a knihoven, aby se minimalizovala velikost a potenciální zranitelnosti.

  • Vyloučení nepotřebných souborů: Použití souboru .dockerignore k zabránění kopírování souborů, které nejsou potřeba pro běh aplikace (zdrojový kód testů, soubory systému řízení verzí, dočasné soubory).

  • Cache vrstev (Layer caching): Docker ukládá každou vrstvu obrazu. Je vhodné umístit instrukce, které se mění zřídka, na začátek Dockerfile. Instrukce, které se mění často (například přidání kódu aplikace), umístěte později.

    FROM ubuntu:latest
    
    // Instrukce, které se mění zřídka
    RUN apt-get update && apt-get install -y --no-install-recommends \
        nginx \
        supervisor \
        && rm -rf /var/lib/apt/lists/*
    
    // Instrukce, které se mění častěji (například kopírování kódu)
    COPY myapp /app
    WORKDIR /app
    
  • Sloučení instrukcí RUN: Minimalizace počtu vrstev sloučením několika příkazů do jedné instrukce RUN pomocí &&.

    // Neoptimální
    RUN apt-get update
    RUN apt-get install -y mylib1
    RUN apt-get install -y mylib2
    
    // Optimální
    RUN apt-get update && apt-get install -y --no-install-recommends mylib1 mylib2 && rm -rf /var/lib/apt/lists/*
    
  • Odstranění dočasných souborů: Vyčištění cache správce balíčků a odstranění dočasných souborů po instalaci závislostí v rámci jedné instrukce RUN.

  • Optimalizace pořadí instrukcí: Umístění příkazů COPY nebo ADD pro soubory, které se často mění, blíže ke konci Dockerfile, aby se maximalizovalo využití cache předchozích vrstev.

  • Kontrola zranitelností: Použití nástrojů jako Trivy, Clair nebo Anchore k odhalení zranitelností v obraze.

  • Podpis obrazů: Použití Notary nebo Cosign k zajištění integrity a pravosti obrazů.

  • Použití nástrojů ke zmenšení velikosti obrazu: Například DockerSlim nebo Dive pro analýzu a optimalizaci obsahu obrazu.

Tyto metody, pokud jsou používány společně, mohou výrazně snížit velikost obrazů, zvýšit bezpečnost a urychlit CI/CD pipeline.