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?
- Yerləşdirmə sürəti: Daha kiçik imajlar daha sürətlə yüklənir və yerləşdirilir.
- Resurslardan effektiv istifadə: Daha kiçik imajlar diskdə daha az yer tutur və şəbəkə resurslarını az istifadə edir.
- 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.
- 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ə:
# 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:
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:
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ə:
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:
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ə:
# 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ə:
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ı:
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:
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
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
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
GO TO FULL VERSION