Container Networking: কন্টেইনার যোগাযোগে গভীর দক্ষতা 🔌
ডকার কন্টেইনারগুলো একে অপরের সাথে এবং বাইরের জগতের সাথে কিভাবে যোগাযোগ করে, তা সঠিকভাবে জানা প্রজেক্ট আর্কিটেকচারের জন্য খুবই গুরুত্বপূর্ণ। এই গাইডে আমরা কন্টেইনার নেটওয়ার্কিংয়ের প্র্যাকটিক্যাল বিষয়গুলো শিখবো।
১. ডিফল্ট ব্রিজ নেটওয়ার্ক (Bridge Network)
যখন আপনি ডকার ইন্সটল করেন, তখন bridge নামে একটি ডিফল্ট নেটওয়ার্ক তৈরি হয়।
- আপনি যদি
--networkফ্ল্যাগ ছাড়া কোনো কন্টেইনার চালান, তবে সেটি এই ব্রিজ নেটওয়ার্কের অংশ হয়। - সীমাবদ্ধতা: ডিফল্ট ব্রিজে কন্টেইনারগুলো একে অপরকে নাম দিয়ে চিনতে পারে না (IP ব্যবহার করতে হয়)।
২. কাস্টম ব্রিজ নেটওয়ার্ক (Custom Bridge)
প্রোডাকশন বা প্রফেশনাল কাজের জন্য সবসময় কাস্টম নেটওয়ার্ক ব্যবহার করা উচিত।
docker network create my-app-netসুবিধা:
- Automatic DNS Resolution: কন্টেইনারগুলো একে অপরকে নাম দিয়ে খুঁজে পায়।
- Isolation: এটি একটি আলাদা সিকিউর এনভায়রনমেন্ট তৈরি করে।
৩. কন্টেইনার নাম শনাক্তকরণ (Name Resolution)
ধরা যাক, db নামে একটি ডাটাবেস এবং web নামে একটি অ্যাপ আছে। তারা যদি একই কাস্টম নেটওয়ার্কে থাকে, তবে অ্যাপটি ডাটাবেসকে কানেক্ট করতে পারবে এভাবে: DATABASE_URL=db:5432 এখানে ডকার ইন্টারনাল DNS সার্ভার db নামটিকে সঠিক আইপি-তে রূপান্তর করে নেয়।
৪. পোর্ট পাবলিশিং (Port Publishing)
কন্টেইনারের ভেতরের সার্ভিসকে বাইরের জগত থেকে এক্সেস করার জন্য পোর্ট ম্যাপিং করতে হয়:
docker run -p 8080:80 nginxএখানে হোস্টের 8080 পোর্ট কন্টেইনারের 80 পোর্টের সাথে যুক্ত।
৫. নেটওয়ার্ক এলিয়াস (Network Aliases)
একটি কন্টেইনারকে নেটওয়ার্কে অন্য কোনো বিশেষ নামে পরিচিত করার জন্য এলিয়াস ব্যবহার করা যায়:
docker run -d --network my-net --network-alias db_server mysqlএখন অন্য যেকোনো কন্টেইনার এই কন্টেইনারটিকে db_server নামেও খুঁজে পাবে।
৬. লিঙ্কিং (Legacy Linking - :link)
আগে কন্টেইনার কানেক্ট করার জন্য --link ফ্ল্যাগ ব্যবহার করা হতো।
WARNING
এটি এখন একটি Legacy বা পুরনো পদ্ধতি। ডকার এখন কাস্টম নেটওয়ার্ক এবং DNS resolution ব্যবহার করার পরামর্শ দেয়। নতুন প্রজেক্টে এটি ব্যবহার করবেন না।
৭. হোস্ট নেটওয়ার্কিং (Host Networking)
কখনো কখনো আপনার আইসোলেশনের প্রয়োজন হয় না এবং সর্বোচ্চ পারফরম্যান্স দরকার হয়। তখন --network host ব্যবহার করা হয়। এটি সরাসরি হোস্টের আইপি এবং পোর্ট ব্যবহার করে।
৮. কন্টেইনার-টু-কন্টেইনার কমিউনিকেশন সামারি
- একই নেটওয়ার্কে থাকলে: নাম (Container Name) দিয়ে সরাসরি যোগাযোগ করা যায়।
- আলাদা নেটওয়ার্কে থাকলে: একটি কন্টেইনারকে অন্য নেটওয়ার্কে
connectকমান্ড দিয়ে যুক্ত করতে হয়। - বাইরের জগত থেকে এক্সেস: পোর্ট ম্যাপিং (
-p) করতে হয়।
TIP
সবসময় আপনার ডাটাবেস এবং ব্যাকএন্ডকে একটি ইন্টারনাল নেটওয়ার্কে রাখুন এবং শুধুমাত্র ওয়েব সার্ভারের পোর্টটি বাইরে পাবলিশ করুন। এটি সিকিউরিটির জন্য অনেক ভালো।