কম্পিউটার টিউটোরিয়াল

Docker ইমেজে পরিবর্তন ইনস্ট্যান্টলি পার্সিস্ট করুন আসল ইমেজ ছাড়া মডিফাই করেই

Docker ইমেজ immutable (অপরিবর্তনশীল)। একবার বিল্ড হলে, সেগুলো পরিবর্তন হয় না। এটি কনসিস্টেন্সি, প্রেডিক্টেবিলিটি, এবং স্ট্যাবিলিটি নিশ্চিত করে। একই ইমেজ থেকে তৈরি প্রতিটি কন্টেইনার একইভাবে আচরণ করে, এবং ভার্সনিং সুরক্ষিত ও সহজ হয়। কিন্তু যদি আপনাকে একটি চলমান কন্টেইনারের ভিতরে কিছু টুইক করতে হয়, যেমন একটি প্যাকেজ ইনস্টল করা বা একটি কনফিগারেশন আপডেট করা? সেটাই যেখানে docker commit কাজে আসে। এটি একটি চলমান কন্টেইনারে পরিবর্তন ক্যাপচার করে এবং একটি নতুন ইমেজ তৈরি করে আসলটি ছুঁয়ে না। এটি টেস্টিং ফিক্স, দ্রুত ইটারেশন, এবং কাস্টম ইমেজ রোল আউট করার জন্য দুর্দান্ত Dockerfile থেকে scratch রিবিল্ড ছাড়া।

Docker ইমেজ কেন পরিবর্তন হয় না

Docker ইমেজ একাধিক রিড-অনলি লেয়ার দিয়ে গঠিত। আপনি যখন একটি কন্টেইনার চালানেন, Docker একটি পাতলা রাইটেবল লেয়ার যোগ করে টপে যাকে কন্টেইনার লেয়ার বলা হয়। আপনি যে যেকোনো পরিবর্তন করেন সেটি শুধু এই টপ লেয়ারে হয়। একবার কন্টেইনার ডিলিট হলে, সেই লেয়ারের সকল পরিবর্তন গায়েব হয়ে যায়, আসল ইমেজ অপরিবর্তিত থাকে।

এই ডিজাইন নিম্নলিখিত সুবিধা গ্যারান্টি দেয়:

  • একই ইমেজ থেকে প্রতিটি কন্টেইনার একইভাবে আচরণ করে, কনসিস্টেন্সি নিশ্চিত করে।
  • এক কন্টেইনারে পরিবর্তন অন্যগুলোকে প্রভাবিত করে না, প্রেডিক্টেবিলিটি দেয়।
  • আপনি নিরাপদে নির্দিষ্ট ইমেজ ভার্সন ট্যাগ করতে পারেন রিস্ক ছাড়া।

এই ডিজাইন চমৎকার স্ট্যাবিলিটি দেয়, কিন্তু আপনাকে লিমিট করে যখন আপনি একটি চলমান কন্টেইনারে দ্রুত পরিবর্তন করতে চান। সেটাই যেখানে docker commit সাহায্য করে।

একটি চলমান কন্টেইনার থেকে নতুন ইমেজ তৈরি করা

আপনি যখন docker commit কমান্ড চালানেন, Docker একটি চলমান কন্টেইনারের বর্তমান স্টেট ক্যাপচার করে এবং সেটি থেকে একটি নতুন ইমেজ তৈরি করে। এটি কন্টেইনারের ফাইল সিস্টেমের একটি স্ন্যাপশট নেয়, আপনি যে পরিবর্তনগুলো করেছেন সেগুলো—যেমন ইনস্টল করা প্যাকেজ, আপডেট করা কনফিগারেশন, বা মডিফাই করা ফাইল—নতুন ইমেজ লেয়ার হিসেবে সেভ করে। এইভাবে, আসল ইমেজ অপরিবর্তিত থাকে, আপনাকে দ্রুত এক্সপেরিমেন্ট এবং ইটারেট করার সুযোগ দিয়ে।

Docker ইমেজে পরিবর্তন ইনস্ট্যান্টলি পার্সিস্ট করুন আসল ইমেজ ছাড়া মডিফাই করেই

এটি একটি কাস্টম বেস সেটআপ ভবিষ্যতে পুনরায় ব্যবহারের জন্য সেভ করতে, টেস্টিং sırasında ছোট ফিক্স বা কনফিগারেশন পরিবর্তন প্রয়োগ করতে, বা আপনার টিমের সাথে আপডেটেড ইমেজ শেয়ার করতে Dockerfile স্ক্র্যাচ থেকে রিবিল্ড ছাড়া—সকল জন্য আদর্শ।

আপনি docker commit কমান্ড নিচের সিনট্যাক্স ব্যবহার করে একটি চলমান কন্টেইনার থেকে নতুন ইমেজ তৈরি করতে পারেন:

docker commit [OPTIONS] CONTAINER_ID NEW_IMAGE_NAME[:TAG]

এখানে, CONTAINER_ID হলো আপনি যে কন্টেইনার ক্যাপচার করতে চান তার ID বা নাম, NEW_IMAGE_NAME হলো নতুন ইমেজের জন্য আপনার পছন্দের নাম, এবং TAG অপশনাল, ডিফল্ট হচ্ছে latest।

নোট: docker commit হলো docker container commit-এর একটি লিগ্যাসি এলিয়াস; উভয় একই।

docker commit কমান্ড কিছু অপশন প্রদান করে যা আপনাকে মেটাডেটা যোগ করতে, কনফিগারেশন পরিবর্তন প্রয়োগ করতে, এবং কমিট প্রক্রিয়া কন্ট্রোল করতে দেয়। নিচের টেবিলে সাপোর্টেড সব অপশন সারমর্ম করা হলো:

OptionLong FormDescriptionExample
-a–authorনতুন ইমেজের মেটাডেটায় লেখকের নাম যোগ করে।docker commit -a "Anees" my-container my-image
-c–changeDockerfile ইনস্ট্রাকশন যেমন ENV, LABEL, বা CMD নতুন ইমেজে প্রয়োগ করে।docker commit -c "ENV APP_ENV=prod" my-container my-image
-m–messageইমেজে করা পরিবর্তন বর্ণনা একটি সংক্ষিপ্ত মেসেজ যোগ করে।docker commit -m "Installed curl" my-container my-image
-p–pauseকমিটের সময় কন্টেইনার পজ করে কনসিস্টেন্সি নিশ্চিত করতে (ডিফল্ট: true)।docker commit --pause=false my-container my-image

docker commit কীভাবে কাজ করে তা দেখুন

মান লें আপনি একটি Alpine কন্টেইনারে curl ইনস্টল করতে চান Dockerfile রিবিল্ড ছাড়া। এটি করতে, বেস ইমেজ থেকে একটি কন্টেইনার চালান:

docker run -it alpine:latest /bin/sh

একবার কন্টেইনারে ঢুকলে, প্রয়োজনীয় পরিবর্তন করুন:

apk update && apk add curl
Docker ইমেজে পরিবর্তন ইনস্ট্যান্টলি পার্সিস্ট করুন আসল ইমেজ ছাড়া মডিফাই করেই

এখন কন্টেইনার থেকে এক্সিট করুন:

exit

এতে পর, কন্টেইনারটি একটি নতুন ইমেজ হিসেবে কমিট করুন:

docker commit alpine-with-curl:1.0
Docker ইমেজে পরিবর্তন ইনস্ট্যান্টলি পার্সিস্ট করুন আসল ইমেজ ছাড়া মডিফাই করেই

আপনার নতুন ইমেজ ভেরিফাই করুন:

docker images

এখন, আপনার কাছে একটি নতুন ইমেজ আছে যেটি কোথাও চালানো যাবে, curl প্রি-ইনস্টলড থাকবে।

Docker ইমেজে পরিবর্তন ইনস্ট্যান্টলি পার্সিস্ট করুন আসল ইমেজ ছাড়া মডিফাই করেই

আপনার নতুন ইমেজ চালান ক্যাপচার করা পরিবর্তন টেস্ট করতে

আপনার নতুন ইমেজ তৈরি করার পর, আপনি সেটি থেকে একটি কন্টেইনার চালাতে পারেন যেন আপনার পরিবর্তনগুলো সেভ হয়েছে কিনা ভেরিফাই করতে।

docker run -it alpine-with-curl:1.0 /bin/sh

এই কমান্ড alpine-with-curl:1.0 ইমেজ ভিত্তিক একটি কন্টেইনারের ভিতরে একটি ইন্টারেক্টিভ শেল খোলে। একবার ভিতরে গেলে, আপনি চেক করতে পারেন আপনার মডিফিকেশনগুলো ইনট্যাক্ট আছে কিনা।

curl --version

এটি প্রদর্শন করে যে পরিবর্তনগুলো নতুন ইমেজে পার্সিস্টেড।

Docker ইমেজে পরিবর্তন ইনস্ট্যান্টলি পার্সিস্ট করুন আসল ইমেজ ছাড়া মডিফাই করেই

docker commit বনাম Dockerfile: কোনটি কখন ব্যবহার করবেন

Dockerfile এবং docker commit দুটোই Docker ইমেজ তৈরি করতে দেয়, কিন্তু সেগুলো সম্পূর্ণ ভিন্নভাবে কাজ করে এবং ভিন্ন পরিস্থিতির জন্য উপযুক্ত।

Dockerfile সেরা পছন্দ যখন আপনাকে বিশ্বস্ত এবং রিপিটেবল বিল্ড প্রয়োজন, বিশেষ করে CI/CD পাইপলাইন এবং প্রোডাকশন এনভায়রনমেন্টের জন্য। এটি সব পরিবর্তন কোডে স্পষ্টভাবে ডিফাইন করে রাখে, যাতে সেগুলো টিম কোলাবোরেশনের জন্য সহজে ট্র্যাক, রিভিউ, এবং ভার্সন-কন্ট্রোল করা যায় সময়ের সাথে সাথে। এই পদ্ধতি নিশ্চিত করে যে কেউ পরে ইমেজ বিল্ড করলে একই রেজাল্ট পাবে, যা লং-টার্ম মেইনটেন্যান্স এবং টিম কলাবোরেশনের জন্য ক্রিটিক্যাল।

অন্যদিকে, docker commit দ্রুত ফিক্স, টেস্টিং, বা ছোট আডজাস্টমেন্টের জন্য ভালো কাজ করে যেগুলো আপনি পুরো Dockerfile রি-রাইট বা রিবিল্ড ছাড়া চেষ্টা করতে চান। এটি উপযোগী যখন আপনি এক্সপেরিমেন্ট করছেন, ডিবাগ করছেন, বা ফ্লাইতে একটি পরিবর্তন ভ্যালিডেট করছেন। যাইহোক, যেহেতু পরিবর্তনগুলো কোনো ফাইলে ডকুমেন্টেড নয়, এই মেথড শর্ট-টার্ম ইউজের জন্য আরও উপযুক্ত বরং প্রোডাকশন।

সংক্ষেপে, আপনি docker commit মূলত এক্সপেরিমেন্টেশন বা টেম্পোরারি ফিক্সের জন্য ব্যবহার করতে পারেন। প্রোডাকশন-রেডি ইমেজের জন্য, সর্বদা Dockerfile পছন্দ করুন। Docker-র সর্বোত্তম ফলাফল পেতে, অন্যান্য কী কমান্ডগুলো কন্টেইনার, ইমেজ, এবং ওয়ার্কফ্লো সহজ করে তোলে তা এক্সপ্লোর করা উচিত।

  1. উইন্ডোজ ১১/১০-এ WiFi ড্রাইভার ইনস্টল করার পদ্ধতি

  2. উইন্ডোজে ownCloud ইনস্টল করার পদ্ধতি

  3. "Your PC's CPU isn't compatible with Windows 8/10" এরর ফিক্স

  4. SHAREit দিয়ে ল্যাপটপ ডেটা ট্রান্সফার: দ্রুত, ফ্রি এবং വിശ্বস্ত