Port Mapping (পোর্ট ম্যাপিং) 🌐
ডকার কন্টেইনারগুলো ডিফল্টভাবে একটি আইসোলেটেড নেটওয়ার্কে থাকে। কন্টেইনারের ভেতরের কোনো সার্ভিসকে (যেমন: ওয়েব সার্ভার বা ডাটাবেস) আপনার কম্পিউটার বা বাইরের পৃথিবী থেকে এক্সেস করার জন্য Port Mapping অপরিহার্য।
১. -p ফ্ল্যাগ এবং এর ব্যবহার
কন্টেইনার রান করার সময় আমরা -p (Publish) ফ্ল্যাগ ব্যবহার করি। এর সিনট্যাক্স হলো:
docker run -p <HostPort>:<ContainerPort> <image_name>- Host Port: আপনার নিজের কম্পিউটারের পোর্ট (যেটি দিয়ে আপনি এক্সেস করবেন)।
- Container Port: কন্টেইনারের ভেতরে অ্যাপ্লিকেশনটি যে পোর্টে চলছে।
উদাহরণ:
docker run -p 8080:80 nginxএখানে Nginx কন্টেইনারের ভেতরে ৮০ পোর্টে চলছে, কিন্তু আপনি আপনার ব্রাউজারে localhost:8080 লিখে সেটি দেখতে পাবেন।
২. Multiple Port Mappings
একটি কন্টেইনারে একের অধিক পোর্ট ম্যাপ করার প্রয়োজন হতে পারে। যেমন, একটি অ্যাপ্লিকেশনের ওয়েব এবং এডমিন প্যানেল আলাদা পোর্টে থাকলে:
docker run -p 80:80 -p 8080:8080 my-app৩. Random Port Assignment (-P)
যদি আপনি হোস্ট পোর্ট নির্দিষ্ট করে না দিতে চান এবং ডকারকে বলেন যে কোনো একটি খালি পোর্ট ব্যবহার করতে, তবে বড় হাতের -P ফ্ল্যাগ ব্যবহার করা হয়:
docker run -P nginxডকার অটোমেটিক কোনো একটি হাই-রেঞ্জ পোর্ট (যেমন: ৩২৭৬৮) এসাইন করবে। এটি docker ps কমান্ড দিয়ে দেখা যায়।
৪. Port Exposure vs Publishing
এই দুটি টার্ম অনেকের কাছে কনফিউজিং মনে হতে পারে:
- Exposing (EXPOSE): এটি মূলত একটি ডকুমেন্টেশন। এটি জানায় যে কন্টেইনারটি কোন পোর্ট ব্যবহার করতে পারে, কিন্তু এটি হোস্ট মেশিনে পোর্টটি ওপেন করে না।
- Publishing (-p): এটি বাস্তবে হোস্ট মেশিনের পোর্টের সাথে কন্টেইনারের পোর্ট লিঙ্ক করে দেয়।
৫. Localhost vs 0.0.0.0
পোর্ট ম্যাপ করার সময় আপনি চাইলে নির্দিষ্ট আইপি বাইন্ড করে দিতে পারেন:
- শুধুমাত্র নিজের কম্পিউটারের জন্য:
-p 127.0.0.1:8080:80(বাইরের কেউ এক্সেস করতে পারবে না)। - সবার জন্য উন্মুক্ত:
-p 0.0.0.0:8080:80(ডিফল্ট, আপনার লোকাল নেটওয়ার্কের সবাই এক্সেস করতে পারবে)।
৬. পোর্ট কনফ্লিক্ট (Port Conflict)
যদি আপনার কম্পিউটারে অলরেডি কোনো সার্ভিস ৮০৮০ পোর্টে চলতে থাকে এবং আপনি ডকারেও ৮০৮০ পোর্ট ম্যাপ করার চেষ্টা করেন, তবে ডকার একটি এরর দেখাবে: Bind for 0.0.0.0:8080 failed: port is already allocated.
সমাধান: হয় আগের সার্ভিসটি বন্ধ করুন, অথবা ডকারে অন্য একটি হোস্ট পোর্ট ব্যবহার করুন (যেমন: -p 9090:8080)।
কমান্ড সামারি টেবিল
| Command | Description |
|---|---|
-p 80:80 | হোস্ট ৮০ পোর্টকে কন্টেইনার ৮০ পোর্টে লিঙ্ক করে |
-p 127.0.0.1:80:80 | লুপব্যাক আইপি-তে পোর্ট বাইন্ড করে (সার্ভার সিকিউরিটি) |
-P | ইমেজের সব এক্সপোজড পোর্টকে র্যান্ডম হোষ্ট পোর্টে পাবলিশ করে |
docker port <container> | কন্টেইনারের পোর্ট ম্যাপিং লিস্ট দেখার জন্য |
IMPORTANT
প্রোডাকশনে পোর্ট ম্যাপিং করার সময় নিরাপত্তার খাতিরে শুধুমাত্র প্রয়োজনীয় পোর্টগুলোই ওপেন রাখা উচিত।