ویرگول
ورودثبت نام
Linus Torvalds
Linus Torvalds
خواندن ۱ دقیقه·۴ سال پیش

انواع شبکه در داکر

ما چند نوع شبکه داریم:

  1. null
  2. overlay
  3. bridge
  4. macvlan
  5. host

فرض کنید ۳ تا کامپیوتر به یه مودم وصل شدن. IP ها ۱۹۲.۱۶۸.۱.۱، ۱۹۲.۱۶۸.۱.۲ و ۱۹۲.۱۶۸.۱.۳ هست. gateway این IP ها ۱۹۲.۱۶۸.۱.۱ هست (gateway میدونه که کدوم IP برای کی هست؛ به عبارت بهتر مودم ما 172.17.0.1/16اینجا همون gateway هست که DHCP و DNS هست).

این شبکه‌ی ما private network هست که از طریق مودم به اینترنت وصل میشه. subnet mask این شبکه هم 24 هست که به این معنی هست که از ۱ تا ۲۵۴ میتونیم بهش IP بدیم؛ 192.168.1.0/24. پس اگه شما تو این شبکه بیای منو ping بکنی میتونی منو ببینی.

حالا فرض کن IP من ۱۹۲.۱۶۸.۱.۱ تو این شبکه docker host هست. وقتی من میام توی داکر خودم یه کانتینر میسازم و استارتش میکنم این کانتینر از docker0 که IP اون 172.17.0.1/16 هست میاد IP میگیره. چرا این کارت شبکه؟ اصلا این docker0 چیه؟

گفتیم که تو داکر چند نوع شبکه داریم، docker0 همون شبکه نوع bridge هست. حالا این docker0 همون gateway داکر هست که کانتینر ها از طریق اون بیرون میان. IP این کانتینر 172.17.0.2 هست.

ولی وقتی که ما میایم چند تا docker host رو swarm بکنیم از شبکه نوع overlay استفاده میشه. اسم این نوع شبکه رو ingress میزارن.

اینجوری بهش نگاه کنید ما میام یه ابر بین همه docker host ها میکشیم. IP هایی که به سرویس های ساخته شده توی داکر سوارم داده میشه از شبکه overlay، که به اسم ingress داخل داکر تعریف شده گرفته میشه. مثلا یه سرویس دیتابیس میسازی و IP این سرویس 10.0.0.14/24 میشه.

حالا شما اگه بیای ping این سرویس رو از ۱۹۲.۱۶۸.۱.۲ (که توی docker swarm نیست) بگیری، ping نمیده. چرا؟ چونکه اون IP بیرون نیومده؛ یعنی به gateway داکر معرفی نکردیش. به همین دلیل ping نمیده. نکته: ping گرفتن با ارسال درخواست http فرق داره.

ممکنه شما یه پورت از اون سرویس expose کرده باشی. یعنی به داکر گفتی که تو تموم سطوح اشغالش بکنی.

داکر
شاید از این پست‌ها خوشتان بیاید