شبکه داکر اساساً برای برقراری ارتباط بین کانتینرهای داکر و دنیای خارج از طریق ماشین میزبان تمرکز دارد. یا می توان گفت یک گذرگاه ارتباطی است که از طریق آن همه کانتینرهای ایزوله در موقعیت های مختلف با یکدیگر ارتباط برقرار می کنند تا اقدامات لازم را انجام دهند. در این راهنما، مفاهیم اولیه شبکه Docker را با مثال های عملی در اوبونتو توضیح خواهیم داد.
اگر هنوز Docker را نصب نکرده اید، به راهنمای زیر مراجعه کنید.
اصول استفاده از داکر:
توضیح مفاهیم شبکه داکر
تمام دستورات فهرست شده در زیر با امتیازات ریشه در اوبونتو آزمایش شده اند .
برای مدیریت عملیات شبکه، مانند ایجاد یک شبکه جدید، اتصال یک کانتینر به شبکه، قطع اتصال یک کانتینر از شبکه، فهرست کردن شبکههای موجود و حذف شبکهها و غیره، از دستور زیر استفاده میکنیم:
# docker network
انواع درایورهای شبکه داکر
برای فهرست کردن همه شبکه های خود، اجرا کنید:
# docker network ls
بیایید یک معرفی کوتاه در مورد همه آنها داشته باشیم.
۱- Bridge Network: هنگامی که Docker را راه اندازی می کنید، یک شبکه پل پیش فرض به طور خودکار ایجاد می شود. کانتینرهایی که تازه شروع به کار کرده اند به طور خودکار به آن متصل می شوند. همچنین می توانید شبکه های پل سفارشی تعریف شده توسط کاربر ایجاد کنید. شبکه های پل تعریف شده توسط کاربر نسبت به شبکه پل پیش فرض برتری دارند.
۲- Host Network: جداسازی شبکه بین کانتینر و میزبان داکر را حذف میکند و مستقیماً از شبکه میزبان استفاده میکند. اگر کانتینری را اجرا می کنید که به پورت ۸۰ متصل می شود و از شبکه میزبان استفاده می کنید، برنامه کانتینر در پورت ۸۰ در آدرس IP میزبان در دسترس است. به این معنی که نمیتوانید چندین کانتینر وب را روی یک میزبان اجرا کنید.
۳- None Network: در این نوع شبکه، کانتینرها به هیچ شبکه ای متصل نیستند و به شبکه خارجی یا سایر کانتینرها دسترسی ندارند. بنابراین، این شبکه زمانی استفاده میشود که میخواهید پشته شبکه را روی یک کانتینر به طور کامل غیرفعال کنید.
۴- Overlay network: یک شبکه خصوصی داخلی ایجاد می کند که در تمام گره های شرکت کننده در کلاستر Swarm گسترده می شود. بنابراین، شبکههای Overlay ارتباط بین یک سرویس Swarm داکر و یک کانتینر مستقل یا بین دو کانتینر مستقل در داکر دیمونهای مختلف را تسهیل میکنند.
۵- Macvlan Network: برخی از برنامهها، بهویژه برنامههای قدیمی یا برنامههایی که ترافیک شبکه را نظارت میکنند، انتظار دارند که مستقیماً به شبکه فیزیکی متصل شوند. در این نوع شرایط، میتوانید از درایور شبکه Macvlan برای اختصاص یک آدرس MAC به رابط شبکه مجازی هر کانتینر استفاده کنید، که به نظر میرسد یک رابط شبکه فیزیکی است که مستقیماً به شبکه فیزیکی متصل است.
به من اجازه دهید تمرینات عملی را برای شبکه های Bridge و Host به شما نشان دهم.
۱. Bridge Network
من از دو کانتینر آلپاین برای توضیح این نوع شبکه استفاده خواهم کرد.
اکنون، من دو کانتینر Alpine یعنی C1 و C2 را با استفاده از دستورات زیر اجرا کنم:
# docker run -it -d --name c1 alpine ash
# docker run -it -d --name c2 alpine ash
در مرحله بعد، اجازه دهید آدرس IP آن کانتینرهای در حال اجرا را پیدا کنیم. برای انجام این کار، اجرا کنید:
# docker exec -it c1 sh –c "ip a"
# docker exec -it c2 sh –c "ip a"
همانطور که می بینید، آدرس IP کانتینر C1 172.17.0.2 و آدرس IP C2 172.17.0.3 است .
حالا اجازه دهید پیش برویم و سعی کنیم به یکدیگر پینگ کنیم تا مطمئن شویم که آیا آنها قادر به برقراری ارتباط هستند یا خیر.
ابتدا به کانتینر در حال اجرا C1 متصل شده و سعی کنید کانتینر C2 را پینگ کنید:
# docker attach c1
# ping –c 2 172.17.0.3
به طور مشابه، به ظرف C2 وصل کنید و سعی کنید ظرف C1 را پینگ کنید.
# docker attach c2
# ping –c 2 172.17.0.2
همانطور که در اسکرین شات های بالا مشاهده می کنید، ارتباط بین کانتینرها با همان شبکه در حال انجام است.
همچنین میتوانیم آن را با بازرسی شبکه پل با استفاده از دستور تأیید کنیم:
# docker network inspect bridge
دستور بالا تمام اطلاعات مربوط به شبکه مانند نوع شبکه، زیرشبکه، گیت وی، نام کانتینر و آدرس ip و غیره را نمایش می دهد.
۱.۱ ایجاد شبکه پل تعریف شده توسط کاربر
همانطور که قبلاً گفتم، وقتی Docker را راه اندازی می کنید، یک شبکه پل پیش فرض به طور خودکار ایجاد می شود. همه کانتینرهای تازه راه اندازی شده به طور خودکار به آن متصل می شوند. با این حال، شما همچنین می توانید شبکه های پل سفارشی تعریف شده توسط کاربر ایجاد کنید.
برای ایجاد درایور شبکه جدید، به سادگی اجرا کنید:
# docker network create my_net
یا
# docker network create --driver bridge dhruv_net
هر دو دستور کار یکسانی را انجام خواهند داد. اگر نام درایور را مشخص نکنید، در درایور شبکه پیشفرض یعنی bridge ایجاد میشود .
در شبکه های تعریف شده توسط کاربر مانند dhruv_net، کانتینرها نه تنها می توانند از طریق آدرس IP ارتباط برقرار کنند، بلکه می توانند نام کانتینر را به آدرس IP نیز resolve کنند. این قابلیت automatic service discovery نامیده می شود .
برای اطمینان از اینکه کانتینرها می توانند با یکدیگر ارتباط برقرار کنند، اجازه دهید سه کانتینر آلپاین یعنی A1 ، A2 و A3 را در شبکه dhruv_net که قبلا ایجاد کردیم، اجرا کنیم.
# docker run -it -d --name A1 --network dhruv_net alpine ash
# docker run -it -d --name A2 --network dhruv_net alpine ash
# docker run -it -d --name A3 --network dhruv_net alpine ash
حالا سعی کنید به یکی از کانتینرها متصل شده و دو تای دیگر را با استفاده از نام کانتینر پینگ کنید.
از اسکرین شات های بالا ثابت می شود که کانتینرها می توانند با یکدیگر ارتباط برقرار کنند.
۲. شبکه میزبان
ما یک کانتینری را اجرا می کنیم که با استفاده از شبکه میزبان به پورت ۸۰ متصل می شود، برنامه کانتینر در پورت ۸۰ در آدرس IP میزبان موجود است.
شبکه میزبان تنها زمانی مورد نیاز است که شما برنامه هایی را با شبکه بسیار خاص اجرا می کنید. برنامهای که در داخل کانتینر داکر اجرا میشود، از دیدگاه شبکه، به نظر میرسد که روی خود میزبان اجرا میشود. این نوع شبکه اجازه می دهد تا کانتینر به شبکه دسترسی بیشتری نسبت به آنچه که معمولا دارد، داشته باشد.
در اینجا از دستور netstat -ntlp برای نمایش پورت گوش دادن روی سرور استفاده کردیم . برای یافتن اینکه کدام سرویس در یک پورت خاص گوش می دهد.
ما فقط اصول اولیه مفاهیم شبکه Docker را پوشش دادیم. برای جزئیات بیشتر، من به شما پیشنهاد می کنم به راهنمای شبکه Docker در زیر نگاه کنید.
افزودن نظر