[ ডকার ইমেজের সাইজ ছোট রাখা অত্যন্ত গুরুত্বপূর্ণ। নির্দিষ্ট ভার্সন ব্যবহার (যেমন `FROM node:18`), `-slim` ব্যবহার করে বেইজ ইমেজের আকার কমানো, `.dockerignore` ফাইল ব্যবহার করে অপ্রয়োজনীয় ফাইল বাদ দেওয়া (যেমন `node_modules`), `COPY` কমান্ডের পরিবর্তে `RUN` ব্যবহার করে প্যাকেজ ইন্সটল করা, এবং একাধিক `RUN` কমান্ড একত্রে লেখা ইমেজ অপ্টিমাইজেশনের বেস্ট প্র্যাকটিস। মাল্টিস্টেজ বিল্ড ব্যবহার করে বড় বেইজ লেয়ার এড়ানো উচিত। এসব পদ্ধতি ইমেজের পারফরম্যান্স ও ডিপ্লয়মেন্টকে উন্নত করে। Docker bestpractice blog ]
Docker ইমেজকে ছোট, নিরাপদ ও প্রোডাকশন-রেডি রাখতে পারলে শুধু ইমেজ পারফরম্যান্সই নয়, বরং ডিপ্লয়মেন্ট সহজ হয়, মেইনটেন্যান্সে সময় বাঁচে এবং ইমেজ বিল্ড টাইম উল্লেখযোগ্যভাবে কমে আসে। চলুন ডকার ইমেজ লিখার কিছু বেস্ট প্র্যাকটিস এর সাথে পরিচিত হইঃ
একটি application containarize করার মূল উদ্দেশ্যই হচ্ছে, application এর run time environment কে স্টেবল করা। আমরা যদি ডকার এর বেইজ ইমেজ এ FROM python:latest ব্যাবহার করি, তাহলে হয়ত এখন চলছে, কিন্তু কিছুদিন বা বছর পর পাইথন এর ভার্শন এর মিস ম্যাচ এর কারনে প্রজেক্ট এ আন এক্সপেক্টেড এরর দেখা দিতে পারে। তাই best practise হচ্ছে, বেইজ ইমেজ এ specific version উল্লেখ করা। উদাহরনঃ FROM node:18
দিন শেযে আমাদের application containarize করার মূল উদ্দেশ্য হচ্ছে, এই application কে / service কে রান করা। কিন্তু আমরা বেইজ ইমেজ এ হিসেবে slim ব্যাবহার না করার কারনে, আমাদের ইমেজ এর সাইজ অনেক বেড়ে যায়। যেটা এড়িয়ে যাওয়া উচিৎ তাই আমরা বেইজ ইমেজ এর স্লিম ভার্শন ব্যাবহার করব। যেমন FROM node:18-slim এই বেইজ ইমেজ এ শুধু মাত্র node.js application রান করার জন্য যা যা প্রয়োজন তাই রয়েছে।
আমরা অনেক সময় আমাদের dev environment এ নোডজেএস / পাইথন / লারাভেল প্রজেক্ট রান করার জন্য ডেভ ডিপেন্ডেন্সি ব্যাবহার করে থাকি। যেগুল প্রডাকশনের জন্য মোটেও প্রয়োজন নয়। যেমন nodemon, jest, test folder এ সকল ফাইল প্রডাকশন ইনভাইরনমেন্ট এ না রাখা অত্যন্ত জরুরি। এজন্য আমাদের .dockerignore ফাইল মেইন্টেইন করা উচিৎ।
আমরা অনেক সময় COPY . .
কমান্ড ব্যবহার করে, বড় বড় লাইব্রেরি, প্যাকেজ , SDK ইত্যাদি হোস্ট থেকে কন্টেইনার এ কপি করি, যেটি মোটেও উচিৎ নয়, এতে করে ইমেজ এর সাইজ বেড়ে যায়। তাই .dockerignore file এ এসকল প্যাকেজ যেমন node_modules ইত্যাদি ইনক্লুড করে রাখা উচিৎ।
এবং RUN কমান্ড ব্যবহার করে এ সকল প্রডাকশনের জন্য প্রয়োজনীয় প্যাকেজ ইন্সটল করা উচিৎ।
আমাদের অবশ্যই এটি মাথায় রাখতে হবে যে ডকার ইমেজ এর লেয়ার যত কম হবে, ইমেজ এর সাইজ তত কম হবে। যেমন ঃ RUN apt-get update RUN apt-get upgrade RUN wget example.com/download এখানে এই ইমেজ এর সাইজ significantly বেড়ে যাবে। তাই উচিৎ ঃ এ ধরনের কমান্ড একটি লেয়ারে লিখাঃ RUN apt-get update && apt-get upgrade && wget example.com/download
বেইজ লেয়ার যদি বড় হয় তাহলে Docker ইমেজ ফাইল লিখার সময় আমাদের মাল্টিস্টেজ এ লিখা উচিৎ ।
Posted by Md. Ruhul Amin, 1 month ago
১০ জিবি সার্ভারে ২ জিবি ডকার ইমেজ? স্পেসের ২০% নষ্ট! Docker Multi-Stage Build এর মাধ্যমে ইমেজ সাইজ কমানো সম্ভব। এটি build tools, dev dependencies সরিয়ে ছোট,...
1 month ago
Read moreপারফর্মােন্স ও নিরাপত্তা নিশ্চিত করার জন্য ডাটাবেইজ মনিটরিং অত্যন্ত গুরুত্বপূর্ণ। Percona Monitoring and Management (PMM) টুলটি এই কাজে অসাধারণ। বিভিন্ন এনভায়রনমেন্টের (Production, UAT, Testing, Development) ডাটাবেইজ সার্ভারগুলোকে কেন্দ্রীয়...
1 month ago
Read moreমাইক্রোসার্ভিসে কাস্টম ডোমেইন ব্যবহারের সহজ উপায়। Node.js, PHP, Python এ তৈরি Microservice এর জন্য `http://edns.system.com` URL ব্যবহার। `127.0.0.1` এর পরিবর্তে ডোমেইন ব্যবহারে DNS Server ও HOSTS ফাইলের ভূমিকা।...
2 months ago
Read moreপর্ব ১: ইন্টারনেটের ভেতরের গল্প! বিভিন্ন প্রোগ্রামিং ভাষার দল মিলে Network Application তৈরি করে। এই Application এর Architecture ধাপে ধাপে বুঝতে চেষ্টা করবো। Client-Server...
1 month ago
Read more