Mik a DevOps-ban az image-ek (képek) optimalizálásának fő módszerei?
sobes.tech MI
Válasz az MI-től
A konténerképek optimalizálása fontos a gyorsabb telepítés, az erőforrás-felhasználás csökkentése és a támadási felület minimalizálása érdekében. Fő módszerek:
-
Többlépcsős építés (Multi-stage builds): Több
FROMutasítás használata a Dockerfile-ban. Közbenső szakaszokban artefaktokat (fordított kód, könyvtárak) hozunk létre, amelyeket később a végső, minimális képbe másolunk. Ez lehetővé teszi, hogy a build eszközök és függőségek, amelyek csak fordítási szakaszban szükségesek, ne kerüljenek a végső képbe.// 1. szakasz: Build szakasz FROM golang:1.20 as builder WORKDIR /app COPY . . RUN go build -o myapp // 2. szakasz: Végső szakasz FROM alpine:latest RUN apk --no-cache add ca-certificates COPY --from=builder /app/myapp /usr/local/bin/ CMD ["myapp"] -
Könnyű alapképek használata: Olyan könnyű alapképek kiválasztása, mint az Alpine,
scratchvagy olyan disztribúciók, amelyek nem tartalmaznak előre telepített eszközöket és könyvtárakat, hogy minimalizálják a méretet és a potenciális sebezhetőségeket. -
Felesleges fájlok kizárása: A
.dockerignorefájl használata a nem szükséges fájlok (pl. tesztforráskód, verziókezelő rendszer fájljai, ideiglenes fájlok) képbe való másolásának megakadályozására. -
Rétegek gyorsítótárazása: A Docker cache-eli az egyes rétegeket. Érdemes ritkán változó utasításokat a Dockerfile elejére helyezni. Gyakran változó utasításokat (pl. alkalmazáskód másolása) későbbre kell tenni.
FROM ubuntu:latest // Ritkán változó utasítások RUN apt-get update && apt-get install -y --no-install-recommends \ nginx \ supervisor \ && rm -rf /var/lib/apt/lists/* // Gyakran változó utasítások (pl. kód másolása) COPY myapp /app WORKDIR /app -
RUN utasítások összefűzése: A rétegek számának minimalizálása több parancs egyetlen
RUNutasításba való összefűzésével&&használatával.// Nem optimális RUN apt-get update RUN apt-get install -y mylib1 RUN apt-get install -y mylib2 // Optimális RUN apt-get update && apt-get install -y --no-install-recommends mylib1 mylib2 && rm -rf /var/lib/apt/lists/* -
Ideiglenes fájlok törlése: A csomagkezelők cache-ének törlése és ideiglenes fájlok eltávolítása az installálás után egy
RUNutasításban. -
Sorrend optimalizálása: A
COPYvagyADDparancsokat azokhoz a fájlokhoz helyezze, amelyek gyakran változnak, közelebb a Dockerfile végéhez, hogy a korábbi rétegek cache-ét maximálisan kihasználja. -
Sebezhetőségek ellenőrzése: Eszközök, mint a Trivy, Clair vagy Anchore használata a kép sebezhetőségeinek feltárására.
-
Képek aláírása: A Notary vagy Cosign használata az integritás és hitelesség biztosítására.
-
Kép méretének csökkentésére szolgáló eszközök használata: Például DockerSlim vagy Dive az összetevők elemzéséhez és optimalizálásához.
Ezek a módszerek együtt alkalmazva jelentősen csökkenthetik a képek méretét, növelhetik a biztonságot és felgyorsíthatják a CI/CD folyamatot.