macOS-এ একটি লোকাল ডকার প্রজেক্টের জন্য, বাইন্ড মাউন্ট ব্যবহার করুন যখন আপনাকে macOS এবং একটি কন্টেইনারে একই ফাইল এডিট বা পর্যবেক্ষণ করতে হবে; আর নেমড ভলিউম ব্যবহার করুন যখন কন্টেইনারের কাছে ডেটাবেস বা ক্যাশের মতো পারসিস্টেন্ট ডেটার মালিকানা থাকা উচিত। এর বাস্তবসম্মত পরীক্ষা হলো ফাইন্ডার বা কোনো ম্যাক অ্যাপে আপনার ফাইলগুলোতে সরাসরি অ্যাক্সেস দরকার কিনা। উত্তর হ্যাঁ হলে, নির্দিষ্ট প্রজেক্ট ফোল্ডারটি বাইন্ড করুন। না হলে, ডকার দ্বারা পরিচালিত একটি নেমড ভলিউমে ডেটা রাখুন।
মাউন্টের দুটি ধরনের মধ্যে কী পার্থক্য রয়েছে?
একটি বাইন্ড মাউন্ট আপনার ম্যাক-এর একটি পাথের সাথে কন্টেইনারের ভেতরের একটি পাথকে সংযুক্ত করে। উভয় পাশ থেকেই পরিবর্তনগুলো দৃশ্যমান হয়, যা সোর্স কোড, কনফিগারেশন এবং এমন জেনারেট হওয়া ফাইলগুলোর জন্য উপযোগী যা আপনি আপনার প্রজেক্ট ফোল্ডারে রাখতে চান। একটি নেমড ভলিউম ডকার দ্বারা সংরক্ষিত ও পরিচালিত হয় এবং একটি নির্দিষ্ট পাথে কন্টেইনারের সাথে সংযুক্ত থাকে। ডকার পারসিস্টেন্ট কন্টেইনার ডেটার জন্য এবং যখন হোস্টের সরাসরি ফাইল অ্যাক্সেসের প্রয়োজন হয় না, তখন ভলিউম ব্যবহারের পরামর্শ দেয়। ডকারের বাইন্ড মাউন্ট সংক্রান্ত ডকুমেন্টেশন এবং ভলিউম সংক্রান্ত ডকুমেন্টেশন এই পার্থক্যগুলো ব্যাখ্যা করে।
| আপনার ডেটা | সাধারণত বেছে নিন | কারণ |
|---|---|---|
| সোর্স ফাইল যা আপনি ম্যাক আইডিই-তে এডিট করেন | বাইন্ড মাউন্ট | ম্যাক এবং কন্টেইনার উভয়ই প্রজেক্ট ফাইলগুলো অ্যাক্সেস করতে পারে। |
| একটি ডেটাবেসের ডেটা ডিরেক্টরি | নেমড ভলিউম | ডকার macOS-এর মাধ্যমে প্রতিটি ডেটাবেস ফাইল শেয়ার না করেই পারসিস্টেন্ট কন্টেইনার ডেটা পরিচালনা করে। |
| আউটপুট যা আপনি ম্যাক টুলস দিয়ে খুলতে বা ব্যবহার করতে চান | বাইন্ড মাউন্ট | আউটপুটটি নির্বাচিত ম্যাক পাথে প্রদর্শিত হয়। |
| অস্থায়ী স্টেট যা বাতিল করা যেতে পারে | ডিফল্টভাবে কোনোটিই নয় | বিবেচনা করুন ডেটাটির আদৌ পারসিস্টেন্স বা স্থায়ী সংরক্ষণের প্রয়োজন আছে কিনা; আপনি আলাদাভাবে মুছে না ফেলা পর্যন্ত কন্টেইনার রিমুভ করার পরেও নেমড ভলিউম থেকে যায়। |
কেন macOS-এ এই নির্বাচনটি গুরুত্বপূর্ণ
ডকার ডেস্কটপ একটি লিনাক্স ভার্চুয়াল মেশিনের ভেতরে লিনাক্স কন্টেইনারগুলো চালায়, তাই এটি ম্যাক ফাইলসিস্টেম এবং কন্টেইনারগুলোর মধ্যে অ্যাক্সেসের মধ্যস্থতা করে। ডকারের সেটিংস ডকুমেন্টেশনে বলা হয়েছে যে হোস্ট ফাইল শেয়ারিং বাড়তি ওভারহেড তৈরি করে; খুব বেশি ফাইল শেয়ার করলে সিপিইউ-এর ওপর চাপ বাড়তে পারে এবং ফাইলসিস্টেমের কার্যক্রম ধীরগতির হতে পারে। পারফরম্যান্স যখন গুরুত্বপূর্ণ, তখন এটি ক্যাশ এবং ডেটাবেসের মতো নন-কোড আইটেমগুলোকে ডেটা ভলিউমে রাখার জন্য বিশেষভাবে সুপারিশ করে। ডকার ডেস্কটপ সেটিংস
এই নির্দেশনার অর্থ এই নয় যে প্রতিটি বাইন্ড মাউন্টই ধীরগতির হবে। এর অর্থ হলো ডেটার ধরন এবং আপনার বাস্তব কাজের প্রক্রিয়াটি এখানে গুরুত্বপূর্ণ। একটি প্রজেক্টের সোর্স ট্রির জন্য বাইন্ড মাউন্ট স্বাভাবিক পছন্দ, কারণ ম্যাক-এ এডিট করাই এর মূল লক্ষ্য। ডেটাবেসের ঘন ঘন পরিবর্তিত হতে থাকা ফাইলগুলো সাধারণত ফাইন্ডারে ব্রাউজ করার প্রয়োজন হয় না, তাই একটি নেমড ভলিউম দিয়ে শুরু করাই ভালো বিকল্প। অস্বাভাবিকভাবে বড় রিপোজিটরিগুলোর জন্য, ডকার ডেস্কটপ সিনক্রোনাইজড ফাইল শেয়ারিংকেও একটি সাবস্ক্রিপশন-নির্দিষ্ট অপশন হিসেবে ব্যবহারের সুযোগ দেয়, যা বাইন্ড-মাউন্টের পারফরম্যান্স বাড়াতে পারে; এটি ফাইল-শেয়ারিংয়ের আচরণ পরিবর্তন করে, তবে হোস্ট-দৃশ্যমান সোর্স এবং ডকার-পরিচালিত ভলিউমের মধ্যকার মৌলিক পার্থক্য পরিবর্তন করে না। সিনক্রোনাইজড ফাইল শেয়ার্স
একটি প্রজেক্ট ফোল্ডার এবং একটি ডেটাবেস ভলিউম সেটআপ করুন
টার্মিনাল থেকে আপনার প্রজেক্ট ডিরেক্টরিতে যান এবং কোডের জন্য একটি বাইন্ড মাউন্ট ব্যবহার করুন। এই উদাহরণটিতে একটি ডিসপোজেবল অ্যালপাইন কন্টেইনারের /workspace-এ বর্তমান ফোল্ডারটি মাউন্ট করা হয়েছে; আপনার ডেভেলপমেন্ট কন্টেইনার অনুযায়ী ইমেজ বা কমান্ডটি পরিবর্তন করে নিন।
docker run --rm -it \
--mount "type=bind,source=$PWD,target=/workspace" \
alpine:latest sh
ডিফল্ট macOS শেলগুলোতে, $PWD বর্তমান ডিরেক্টরিকে নির্দেশ করে। সম্পূর্ণ মাউন্ট আর্গুমেন্টটি কোটেশনের মধ্যে রাখলে, ফোল্ডারের নামে স্পেস থাকলেও সম্প্রসারিত হোস্ট পাথটি একসাথে থাকে। ডকারের --mount সিনট্যাক্সটি অত্যন্ত সুস্পষ্ট। হোস্ট পাথটির অস্তিত্ব থাকা আবশ্যক: ডকার উল্লেখ করেছে যে কোনো সোর্স পাথ অনুপস্থিত থাকলে --mount ডিফল্টভাবে ব্যর্থ হয়। রিড-অনলি হিসেবে চিহ্নিত না করা পর্যন্ত বাইন্ড মাউন্ট পরিবর্তনযোগ্য (writable) থাকে, যার ফলে একটি কন্টেইনার প্রসেস মাউন্ট করা ম্যাক ডিরেক্টরির ফাইলগুলো পরিবর্তন করতে পারে। কন্টেইনারের জন্য যখন প্রজেক্ট ফাইলগুলো কেবল পড়ার প্রয়োজন হয়, তখন readonly ব্যবহার করুন। বাইন্ড মাউন্ট অপশন এবং আচরণ
কন্টেইনারের নিজস্ব ডেটার জন্য, এর পরিবর্তে একটি নেমড ভলিউম তৈরি করুন এবং যুক্ত করুন। এই কমান্ডটি তার স্ট্যান্ডার্ড ডেটা ডিরেক্টরিতে একটি ভলিউমসহ পোস্টগ্রেসকিউএল চালু করে:
docker volume create project-db
docker run --name project-postgres \
--mount type=volume,source=project-db,target=/var/lib/postgresql/data \
-e POSTGRES_PASSWORD='local-dev-only' \
-d postgres:17
এখানে project-db হলো পারসিস্টেন্ট ভলিউমের নাম, এবং POSTGRES_PASSWORD একটি লোকাল সেটিং বোঝানোর জন্য উদাহরণমাত্র, এটি প্রোডাকশন সিক্রেট-ম্যানেজমেন্টের কোনো আদর্শ পদ্ধতি নয়। কন্টেইনার মুছে ফেললে স্বয়ংক্রিয়ভাবে নেমড ভলিউম মুছে যায় না। এই স্থায়িত্ব কন্টেইনার প্রতিস্থাপনের ক্ষেত্রে সাহায্য করে, তবে এর মানে এটাও যে পুরানো ডেটা থেকে যেতে পারে এবং নতুন রান-এ এটি পুনরায় ব্যবহৃত হতে পারে। ভলিউমের নাম এবং এর সাথে পুনরায় সংযোগ করার জন্য প্রয়োজনীয় কন্টেইনার কনফিগারেশন লিখে রাখুন।
দৃশ্যমানতা, পোর্টেবিলিটি এবং ক্লিনআপ পরীক্ষা করুন
বেছে নেওয়ার আগে নিজেকে প্রশ্ন করুন: আমি কি এই নির্দিষ্ট ফাইলগুলো ম্যাক সফটওয়্যার দিয়ে খুলব বা এডিট করব? যদি উত্তর হ্যাঁ হয়, তবে আপনার হোম ডিরেক্টরির একটি অপ্রয়োজনীয় বিস্তৃত অংশ শেয়ার না করে কাজের প্রয়োজনের সাথে মেলে এমন ক্ষুদ্রতম ফোল্ডারটি বাইন্ড-মাউন্ট করুন। ডকার উল্লেখ করেছে যে macOS এবং লিনাক্স ফাইলের নামের কেস (বড় বা ছোট হাতের অক্ষর) ভিন্নভাবে পরিচালনা করে, যা কন্টেইনারের ভেতরে কেস-সংবেদনশীল ফাইলের নামের সমস্যা তৈরি করতে পারে। প্রজেক্টটি লিনাক্সের ভেতরে ভিন্ন আচরণ করলে ফাইলের নামগুলো সাবধানে পরীক্ষা করুন। ডকার ডেস্কটপ ফাইল-শেয়ারিং সংক্রান্ত নোট
যদি ফাইলগুলো কন্টেইনারের সীমানার ভেতরেই থাকার প্রয়োজন হয়, তবে একটি নেমড ভলিউম বেছে নিন এবং ডকারের ভলিউম কমান্ডগুলো দিয়ে এটি পরিচালনা করুন। সাধারণ প্রজেক্টের অবস্থানের মতো এই ভলিউমটি ফাইন্ডারের কোনো ফোল্ডার নয়; ডকার ডেস্কটপ তার লিনাক্স ডেটা এর ভিএম (VM) এনভায়রনমেন্টে সংরক্ষণ করে। ভলিউম রিমুভ করাকে ডেটা মুছে ফেলার ধাপ হিসেবে বিবেচনা করুন এবং গুরুত্বপূর্ণ ভলিউমের বিষয়বস্তু আলাদাভাবে ব্যাকআপ রাখুন। ডকারের ব্যাকআপ নির্দেশিকায় উল্লেখ করা হয়েছে যে কন্টেইনার ইমেজগুলোর মধ্যে সংযুক্ত ভলিউমে সংরক্ষিত ফাইলসিস্টেমের পরিবর্তনগুলো অন্তর্ভুক্ত থাকে না। ডকার ডেস্কটপ ব্যাকআপ এবং রিস্টোর
একটি বাইন্ড মাউন্ট হোস্ট পাথের উপস্থিতির ওপর নির্ভর করে, তাই বিভিন্ন ডিরেক্টরি লেআউট রয়েছে এমন বিভিন্ন ম্যাকের ক্ষেত্রে এটি কম পোর্টেবল হতে পারে। একটি নেমড ভলিউম প্রজেক্ট-পাথের ওপর এই নির্ভরতা এড়িয়ে চলে, তবে এর ডেটার জন্য তখনও একটি সুস্পষ্ট ব্যাকআপ বা মাইগ্রেশন পরিকল্পনার প্রয়োজন হয়। তাই অনেক ম্যাক ডেভেলপমেন্ট প্রজেক্টের সাধারণ ডিফল্ট হলো সোর্স কোডের জন্য একটি বাইন্ড মাউন্ট এবং ডেটাবেস স্টেটের জন্য একটি নেমড ভলিউম ব্যবহার করা, যেখানে প্রতিটি ডেটা লোকেশন প্রজেক্টের কম্পোজ কনফিগারেশনে বা রান ইন্সট্রাকশনে উল্লেখ থাকে।
উৎস
Bind mounts — ডকার
Volumes — ডকার
Synchronized file shares — ডকার