ডকারে কমান্ড লিখে ইমেজ তৈরি করা সহজ হলেও, ব্যাকগ্রাউন্ডে কীভাবে কাজ করে এবং কেন কিছু বিল্ড চোখের পলকে হয়ে যায় আর কিছু বিল্ডে দীর্ঘ সময় লাগে—তা জানা একজন দক্ষ ইঞ্জিনিয়ার বা DevOps প্রফেশনালের জন্য অত্যন্ত জরুরি। এই ব্লগে আমরা ডকারফাইল বিল্ডের অভ্যন্তরীণ জীবনচক্র, টেম্পোরারি কন্টেইনার মেকানিজম, ইন্টারমিডিয়েট লেয়ার এবং ডকার ক্যাশিংয়ের আসল কৌশল বিস্তারিতভাবে উন্মোচন করব। ১. ডকার বিল্ডের অভ্যন্তরীণ জীবনচক্র (Internal Execution Lifecycle) যখন টার্মিনালে কমান্ড দেওয়া হয়, ডকার প্রতিটি লাইনের জন্য নিচের ৪টি ধাপ চক্রাকারে সম্পন্ন করে: ২. ডকারফাইলের প্রতিটি লাইনের লেয়ার আর্কিটেকচার একটি সাধারণ ডকারফাইলের প্রতিটি লাইন কীভাবে একেকটি পৃথক লেয়ার তৈরি করে, তা নিচের ডায়াগ্রামে লক্ষ্য করুন: লেয়ারভিত্তিক বিস্তারিত বিশ্লেষণ: Layer 0 (): ডকার হাব থেকে উবুন্টু ইমেজ পুল করে লোকাল ক্যাশে রাখে এবং বিল্ডের প্রাথমিক রেফারেন্স পয়েন্ট হিসেবে নেয়। Layer 1 (): Layer 0 থেকে একটি টেম্পোরারি কন্টেইনার বানায়, তার ভেতর কমান্ড চালায়, পরিবর্তিত স্টেটকে কমিট করে Layer 1 ইমেজ তৈরি করে এবং কন্টেইনারটি ডিলিট করে দেয়। Layer 2 (): Layer 1 থেকে নতুন কন্টেইনার খুলে Golang ইনস্টল করে, আবার কমিট করে Layer 2 ইমেজ তৈরি করে। Layer 3 (): Layer 2 থেকে কন্টেইনার খুলে ডিরেক্টরি সেট ও তৈরি করে Layer 3 ইমেজ তৈরি করে। Layer 4 (): হোস্ট মেশিন থেকে কোড এনে কন্টেইনারে রেখে কমিট করে Layer 4 ইমেজ তৈরি করে। Final Image: সবার শেষে নির্দেশিকাটি Layer 4-এর সাথে বাইন্ড হয়ে আমাদের কাঙ্ক্ষিত ট্যাগযুক্ত ইমেজ (যেমন: ) হিসেবে প্রস্তুত হয়। ৩. ডকার লেয়ার ক্যাশিংয়ের ম্যাজিক (Docker Layer Caching) ডকার বিল্ডের সবচেয়ে বড় শক্তি হলো এর লেয়ার ক্যাশিং (Layer Caching)। প্রতিবার পুরো ডকারফাইল প্রথম থেকে বিল্ড করার পরিবর্তে ডকার অপরিবর্তিত লেয়ারগুলোকে লোকাল ক্যাশ থেকে পুনরায় ব্যবহার করে। ক্যাশ ইনভ্যালিডেশনের মূল নীতি: ডকার উপর থেকে নিচ পর্যন্ত প্রতিটি লাইন যাচাই করে। যতক্ষণ পর্যন্ত কোনো পরিবর্তন না পাওয়া যায়, ততক্ষণ সব লেয়ার সরাসরি ক্যাশ থেকে গ্রহণ করে। যে লাইনে পরিবর্তন শনাক্ত হয়, ঠিক সেই লাইন এবং তার নিচের সমস্ত ইনস্ট্রাকশনের ক্যাশ বাতিল হয়ে যায় এবং সেগুলো নতুন করে সম্পূর্ণ প্রক্রিয়ার মাধ্যমে বিল্ড হয়। ৪. প্রোডাকশন ডকারফাইল অপ্টিমাইজেশন স্ট্র্যাটেজি প্রোডাকশন এনভায়রনমেন্টে একটি ডকারফাইল শত শত লাইনের হতে পারে। ভুলভাবে ডকারফাইল সাজালে একটি সাধারণ কোড পরিবর্তনের কারণেও ৪০-৫০ মিনিট পর্যন্ত অপ্রয়োজনীয় বিল্ড টাইম লাগতে পারে। বেস্ট প্র্যাকটিস: ওএস ও ভারী প্যাকেজ উপরে রাখুন: যেমন বা রানটাইম ইনস্টলেশন একদম উপরে রাখা উচিত, কারণ এগুলোতে ঘনঘন হাত দেওয়ার প্রয়োজন হয় না। সোর্স কোড নিচে রাখুন: অ্যাপ্লিকেশন কোড () ডেভেলপাররা প্রতিনিয়ত পরিবর্তন করেন। তাই কোড কপি করার লাইনটি ডকারফাইলের নিচের দিকে রাখা উচিত, যেন উপরের ভারী ডিপেন্ডেন্সিগুলোর ক্যাশ অক্ষত থাকে এবং বিল্ড কয়েক সেকেন্ডের মধ্যে শেষ হয়। সংক্ষেপ চিত্র (Cheat Sheet) ইন্টারমিডিয়েট ইমেজ: প্রতিটি , , ব্যাকগ্রাউন্ডে একটি করে ইন্টারমিডিয়েট ইমেজ লেয়ার তৈরি করে। টেম্পোরারি কন্টেইনার: লেয়ারের কমান্ড এক্সিকিউট করতে ডকার ক্ষণস্থায়ী কন্টেইনার তৈরি করে এবং কাজ শেষে তা নিজে থেকেই ডিলিট করে দেয়। ক্যাশ সেভ: যে লাইনে পরিবর্তন আসে, তার নিচের সব লেয়ার নতুন করে বিল্ড হয়; উপরের লেয়ারগুলো অক্ষত থাকে।