CodeGym /Kurslar /Docker SELF /Dockerfile optimizasiyası

Dockerfile optimizasiyası

Docker SELF
Səviyyə , Dərs
Mövcuddur

6.1 İmajların optimallaşdırılması ilə tanışlıq

Docker-imajın ölçüsünün kiçildilməsi - performansı yaxşılaşdırmaq, yükləmə və konteynerlərin yerləşdirilməsi proseslərini sürətləndirmək, həmçinin saxlama xərclərini azaltmaq üçün vacib bir vəzifədir. Dockerfile optimallaşdırılması bu məqsədlərə nail olmaqda əsas rol oynayır. Bu mühazirədə optimallaşdırılmış və yüngül Docker-imajlar yaratmaq üçün bəzi strategiyaları və ən yaxşı təcrübələri nəzərdən keçirəcəyik.

Niyə Docker-imajların ölçüsünü kiçiltmək vacibdir?

  1. Yerləşdirmə sürəti: Daha kiçik imajlar daha sürətlə yüklənir və yerləşdirilir.
  2. Resurslardan effektiv istifadə: Daha kiçik imajlar diskdə daha az yer tutur və şəbəkə resurslarını az istifadə edir.
  3. Təhlükəsizlik: Daha kiçik imajlar adətən daha az lazımsız komponentlərdən ibarət olur ki, bu da potensial zəiflikləri azaldır.
  4. Yenilikləri sadələşdirmək: Yüngül imajların yenilənməsi daha sürətlə baş verir və daha az resurs tələb edir.

6.2 Docker-imiclərin ölçüsünü azaltma strategiyaları

Minimal bazalı şəkillərdən istifadə

Baza şəklinin seçimi son Docker-imicinin ölçüsünə böyük təsir göstərir. Minimal baza şəkillərindən, məsələn, alpine, istifadə etməklə imicin ölçüsünü əhəmiyyətli dərəcədə azaltmaq mümkündür.

Nümunə

alpine-dən ubuntu-nun yerinə istifadə:

dockerfile


# FROM ubuntu:20.04
FROM alpine:3.12

alpine – bu, yüngül bir Linux distributividir və təxminən 5 MB yer tutur, halbuki ubuntu yüzlərlə megabayt yer tuta bilər.

2. Layların sayının minimallaşdırılması

Dockerfile-dəki demək olar ki, hər bir əməliyyat imicdə yeni bir təbəqə yaradır. RUN əmri içərisində bir neçə komandanı birləşdirmək, təbəqələrin sayını və nəticədə imicin ölçüsünü azaltmağa kömək edir.

Nümunə

Optimallaşdırmadan əvvəl:

dockerfile


RUN apt-get update
RUN apt-get install -y curl
RUN apt-get install -y git
RUN rm -rf /var/lib/apt/lists/*

Optimallaşdırmadan sonra:

dockerfile


RUN apt-get update && apt-get install -y curl git && rm -rf /var/lib/apt/lists/*

Paket menecerinin keşi silmək də (rm -rf /var/lib/apt/lists/*) imicin ölçüsünü azaltmağa kömək edir.

3. Müvəqqəti faylların silinməsi

Paketləri quraşdırdıqdan sonra müvəqqəti faylların və lazımsız məlumatların silinməsi imici təmiz və yüngül saxlamağa kömək edir.

Nümunə:

dockerfile


RUN apt-get update && apt-get install -y curl git && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

4. .dockerignore-dan istifadə

.dockerignore faylı lazımsız faylları və qovluqları build kontekstindən xaric etməyə kömək edir ki, bu da imicin ölçüsünü azaltmağa və yığma prosesini sürətləndirməyə xidmət edir.

.dockerignore nümunəsi:

Terminal

node_modules
dist
*.log
Dockerfile*
.dockerignore

5. Çoxmərhələli build (multi-stage builds)

Çoxmərhələli build, bir neçə aralıq imicdən istifadə etməklə yalnız lazım olan fayllar və asılılıqları ehtiva edən son yüngül imic yaratmağa imkan verir.

Nümunə:

dockerfile

# Yığma mərhələsi
FROM node:14 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
        
# Final mərhələ
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html

Bu nümunədə birinci mərhələ tətbiqi yığır, final mərhələ isə yalnız yığma nəticələrini istifadə edərək imicin ölçüsünü azaldır.

6. Paketlərin quraşdırılmasının optimallaşdırılması

Yalnız lazım olan paketləri quraşdırmaq və paket menecerlərinin minimal quraşdırma üçün parametrlərindən istifadə imicin ölçüsünü azaltmağa kömək edir.

Nümunə:

apt-get üçün --no-install-recommends parametrindən istifadə:

dockerfile


RUN apt-get update && apt-get install -y --no-install-recommends curl git && \
    rm -rf /var/lib/apt/lists/*

7. Məlumatların sıxılması və minimallaşdırılması

Məlumatların sıxılması və minimallaşdırılması vasitələrindən istifadə edərək imicin ölçüsünü azaltmaq mümkündür.

Nümunə

Mətn fayllarının və loq fayllarının sıxılması:

dockerfile


RUN gzip /path/to/large/file.log

8. İstifadə edilməyən kitabxanaların və asılılıqların silinməsi

Lazım olan paketlər quraşdırıldıqdan sonra istifadə edilməyən kitabxanaları və asılılıqları silmək imicin yüngül saxlanmasına kömək edir.

Nümunə

Python-tətbiqləri üçün:

dockerfile


RUN pip install --no-cache-dir -r requirements.txt

6.3 Optimallaşdırılmış Dockerfile nümunələri

Nümunə 1: Node.js üçün optimallaşdırılmış Dockerfile

dockerfile

FROM node:14-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
        
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html

Nümunə 2: Python üçün optimallaşdırılmış Dockerfile

dockerfile

FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION