Sobes.tech
Middle

DevOps-da şəkillərin (imajların) optimallaşdırılmasının əsas metodları hansılardır?

sobes.tech Süni İntellekt

AI-dan cavab

Konteyner şəkillərinin optimallaşdırılması, yerləşdirməni sürətləndirmək, resurs istifadəsini azaltmaq və hücum vektorunu kiçiltmək üçün vacibdir. Əsas metodlar:

  • Çox mərhələli quruluş (Multi-stage builds): Dockerfile-də bir neçə FROM göstərişindən istifadə etmək. Aralıq mərhələlərdə artefaktlar (tərtib olunmuş kod, kitabxanalar) yaradılır və sonra son, minimal şəkilinə köçürülür. Bu, yalnız tərtib mərhələsində lazım olan quruluş alətləri və asılılıqları çıxarmağa imkan verir.

    // 1-ci mərhələ: Tərtib mərhələsi
    FROM golang:1.20 as builder
    WORKDIR /app
    COPY . .
    RUN go build -o myapp
    
    // 2-ci mərhələ: Son mərhələ
    FROM alpine:latest
    RUN apk --no-cache add ca-certificates
    COPY --from=builder /app/myapp /usr/local/bin/
    CMD ["myapp"]
    
  • Minimal əsas şəkillərdən istifadə: Alpine, scratch və ya əvvəlcədən quraşdırılmamış alətlər və kitabxanalar ilə yüngül əsas şəkilləri seçmək, ölçünü və potensial təhlükəsizlik zəifliklərini minimuma endirmək.

  • Lazımsız faylların çıxarılması: .dockerignore faylından istifadə etmək, tətbiqin işləməsi üçün lazım olmayan faylların (mənbə kodu, testlər, versiya nəzarət faylları, müvəqqəti fayllar) şəkilə köçürülməsinin qarşısını almaq.

  • Layer cache: Docker hər bir qatmanı cache edir. Çox az dəyişən göstərişləri Dockerfile-in əvvəlində yerləşdirmək tövsiyə olunur. Tez-tez dəyişən göstərişlər (məsələn, tətbiq kodunun əlavə edilməsi) daha sonra yerləşdirilir.

    FROM ubuntu:latest
    
    // Az dəyişən göstərişlər
    RUN apt-get update && apt-get install -y --no-install-recommends \
        nginx \
        supervisor \
        && rm -rf /var/lib/apt/lists/*
    
    // Daha çox dəyişən göstərişlər (məsələn, kodun köçürülməsi)
    COPY myapp /app
    WORKDIR /app
    
  • RUN göstərişlərinin birləşdirilməsi: Bir neçə əmri && istifadə edərək bir RUN göstərişində birləşdirmək və qatların sayını azaltmaq.

    // Optimal olmayan
    RUN apt-get update
    RUN apt-get install -y mylib1
    RUN apt-get install -y mylib2
    
    // Optimal
    RUN apt-get update && apt-get install -y --no-install-recommends mylib1 mylib2 && rm -rf /var/lib/apt/lists/*
    
  • Müvəqqəti faylların silinməsi: Paket menecerinin keşi təmizləmək və müvəqqəti faylları silmək üçün tək RUN göstərişində istifadə etmək.

  • Göstərişlərin ardıcıllığını optimallaşdırmaq: COPY və ya ADD əmrlərini tez-tez dəyişən fayllar üçün Dockerfile-in sonuna yaxın yerləşdirmək, əvvəlki qatların keşindən maksimum istifadə etmək.

  • Zəifliklərin skan edilməsi: Trivy, Clair və ya Anchore kimi vasitələrdən istifadə edərək, şəkil içindəki zəiflikləri müəyyən etmək.

  • Şəkillərin imzalanması: Notary və ya Cosign istifadə edərək, şəkillərin bütövlüyünü və orijinallığını təmin etmək.

  • Şəkil ölçüsünü azaltmaq üçün vasitələrdən istifadə: Məsələn, DockerSlim və ya Dive, şəkilin məzmununu analiz etmək və optimallaşdırmaq üçün istifadə olunur.

Bu metodlar birlikdə tətbiq olunduqda, şəkil ölçüsünü əhəmiyyətli dərəcədə azaltmaq, təhlükəsizliyi artırmaq və CI/CD boru xəttini sürətləndirmək mümkündür.