Skip to content

Docker Image Optimization ⚡

ডকার ইমেজের সাইজ ছোট রাখা এবং বিল্ড প্রসেস দ্রুত করা প্রোডাকশন এনভায়রনমেন্টের জন্য অত্যন্ত গুরুত্বপূর্ণ। ছোট ইমেজ মানেই ফাস্ট ডিপ্লয়মেন্ট, কম স্টোরেজ খরচ এবং উন্নত সিকিউরিটি।


১. ছোট বেস ইমেজ ব্যবহার (Minimal Base Images)

ইমেজের সাইজ কমানোর প্রথম ধাপ হলো সঠিক বেস ইমেজ নির্বাচন করা।

  • Alpine Linux: এটি মাত্র ৫ মেগাবাইটের মতো সাইজ। বেশিরভাগ প্যাকেজের জন্য এটি আদর্শ।
    dockerfile
    FROM node:18-alpine
  • Distroless: এতে কোনো শেল (Shell) বা প্যাকেজ ম্যানেজার থাকে না, শুধুমাত্র আপনার অ্যাপ্লিকেশনের জন্য প্রয়োজনীয় ফাইলগুলো থাকে। এটি সিকিউরিটির জন্য সেরা।

২. মাল্টি-স্টেজ বিল্ড (Multi-stage Builds)

আপনার বিল্ড টুলস (যেমন: Compilers, SDKs) এবং রানটাইম এনভায়রনমেন্ট আলাদা রাখুন। বিল্ড স্টেজে সবকিছু কম্পাইল করে শুধু ফাইনাল বাইনারি বা ফাইলগুলো রানটাইম স্টেজে কপি করুন।

dockerfile
# Stage 1: Build
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY . .
RUN go build -o main .

# Stage 2: Final
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/main .
CMD ["./main"]

৩. লেয়ার সংখ্যা কমানো এবং কমান্ড কম্বাইন করা

প্রতিটি RUN, COPY নতুন লেয়ার যোগ করে। তাই একাধিক কমান্ডকে && দিয়ে এক লাইনে লিখুন।

  • Bad:
    dockerfile
    RUN apt-get update
    RUN apt-get install -y git
  • Good:
    dockerfile
    RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/*

৪. ইন্সট্রাকশনের সঠিক ক্রম (Order of Instructions)

ডকার বিল্ড করার সময় লেয়ার ক্যাশিং ব্যবহার করে। যে ফাইলগুলো ঘনঘন পরিবর্তন হয় না (যেমন: package.json, requirements.txt), সেগুলো Dockerfile-এর উপরের দিকে রাখুন।

dockerfile
COPY package.json .
RUN npm install
COPY . .

৫. প্যাকেজ ম্যানেজার ক্যাশ পরিষ্কার করা

সফটওয়্যার ইন্সটল করার পর প্যাকেজ ম্যানেজারের টেম্পোরারি ফাইলগুলো মুছে দিন।

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

৬. স্পেসিফিক ভার্সন ব্যবহার করা

ইমেজের স্থায়িত্ব এবং সিকিউরিটির জন্য সবসময় নির্দিষ্ট ট্যাগ বা ভার্সন ব্যবহার করুন। latest ট্যাগ এড়িয়ে চলুন।


৭. অপ্রয়োজনীয় ফাইল বাদ দেওয়া

.dockerignore ব্যবহার করে বিল্ড কন্টেক্সট থেকে অপ্রয়োজনীয় ফাইল (যেমন: .git, node_modules, logs) বাদ দিন।


৮. সিকিউরিটি স্ক্যানিং (Vulnerability Scanning)

ইমেজ তৈরি করার পর সেটি স্ক্যান করা উচিত যাতে কোনো সিকিউরিটি হোল না থাকে। ডকার স্ক্যান বা ট্রিভি (Trivy) এর মতো টুল ব্যবহার করতে পারেন।

bash
docker scout cves my-image:latest

সারসংক্ষেপ (Checklist)

  • [x] Alpine বা Distroless বেস ইমেজ ব্যবহার করা।
  • [x] মাল্টি-স্টেজ বিল্ড অ্যাপ্লাই করা।
  • [x] একাধিক RUN কমান্ড এক লাইনে লেখা।
  • [x] প্যাকেজ ইন্সটলেশনের পর ক্যাশ ডিলিট করা।
  • [x] নির্দিষ্ট ভার্সন ট্যাগ ব্যবহার করা।

TIP

একটি ভালো অপ্টিমাইজড ইমেজ আপনার পাইপলাইনকে ১০ গুণ পর্যন্ত দ্রুত করতে পারে!

Released under the MIT License.