DNS

طرح مشکل:

همواره حین راه‌اندازی سرویس و یک محصول نیاز است تا بین ماژول‌های مختلف ارتباط برقرار شود و نتیجه‌ی این ارتباط می‌تواند محصول نهایی را شکل دهد. به عنوان مثال یک سایت وردپرس که شامل سرویس وردپرس و یک سرویس دیتابیس می‌باشد. ارتباط بین این دو تا سرویس محصول نهایی که همان سایت مد نظر است را شکل می‌دهد. این ارتباط می بایست همواره سریع و پایدار و امن باشد که یکی از مشکلات اصلی resolve شدن این سرویس‌ها است. حال اگر برای هر سرویس یک name در DNS Server تنظیم شود این ارتباط بهتر برقرار می‌شود. خیلی مهم است که این ارتباط امن نیز باشد و کسی از بیرون سرویس به آن دسترسی نداشته باشد.

حالا شما در نظر داشته باشید با استفاده از داکر تمام پروسه‌های خود را جدا کرده و آنها را ایزوله کردید این مشکل بیشتر خودش را نشان خواهد داد که برای این کار نیاز است تا ارتباطات خود را مدیریت کنید و بین کانتینرهای مختلف ارتباط درست و سریع برقرار کنید. سرویس داکر از نسخه‌ی ۱.۱۰ به بعد با ایجاد یک DNS Server توزیع شده به خوبی این امکان را فراهم کرده است که در ادامه به توضیح نحوه‌ی استفاده از آن می‌پردازیم.

در تصویر زیر سیر تکامل شبکه‌ی داکر را به ازای نسخه‌های مختلف سرویس داکر مشاهده می‌کنید.

docker networking
docker networking

استفاده از DNS سرور داخلی داکر:

از نسخه‌ی ۱.۱۰ داکر به بعد این امکان فراهم شد که dns server به صورت داخلی برای داکر وجود داشته باشد که با استفاده از آن برخی از موارد تسهیل می‌شود. بعد از این نسخه این امکان فراهم بود که به صورت داخلی service discovery برای تمامی کانتینرها با توجه به اسم کانتینر و یا net-alias و یا لینک‌های آن وجود داشته باشد.

سرویس DNS داخلی داکر با ip به شماره‌ی 127.0.0.11 در دسترس می‌باشد و همواره داخل فایل resolv.conf کانتینر‌ها این nameserver پیکربندی شده است. اگر داخل یک کانتینر بخواهید کانتینر دیگه‌ای که در همان شبکه هست را صدا کنید تنها نیاز است که نام یا ID آن را استفاده کنید این DNS Server ip آن را پیدا کرده و در اختیار شما قرار می‌دهد. در کل این Dns Server اطلاعات تمامی کانتینرهای داخل یک شبکه را دارد و به راحتی می‌توانید از آن استفاده کنید.

راه‌های مختلفی برای ارتباط با این DNS‌ سرور داخلی داکر وجود دارد و می‌‌توان آن را کانفیگ کرد که در ادامه به برخی از این آپشن‌ها اشاره می‌شود.

نام کانتینر: با استفاده از این آپشن شما برای کانتینر خود یک نام انتخاب می‌کنید که به صورت کامل می‌توانید با همان نام در شبکه‌ی خود کانتینر آن را صدا کنید. البته به صورت خودکار نام برای هر کانتینر ایجاد می‌شود که آن نام نیز معتبر است. با ID هر کانتینر هم می‌توان آن را صدا کرد و بررسی نمود.

–name=CONTAINER-NAME

نام alias: این نام در شبکه‌ی کانتینر معتبر بوده و آن کانتینر علاوه بر نام خود با این نام نیز شناخته می‌شود. شما با اضافه کردن این آپشن می‌توانید برای کانتینر خود یک نام دیگر در DNS قرار دهید.

–network-alias=ALIAS or –alias=ALIAS

ایجاد لینک بین کانتینرها: با استفاده از این آپشن نیز می‌توانید به کانتینر که ایجاد کردید ارتباط برقرار کنید. با این آپشن می‌توان به کانتینرهایی که در یک شبکه با کانتینر شما نیست ارتباط برقرار کرد.

–link=CONTAINER_NAME:ALIAS

تنظیم ip برای DNS سرور: با استفاده از این آپشن شما می‌توانید برای DNS سرور کانتینر خود IP قرار دهید. این ip در فایل resolv.conf به روز می‌شود.

–dns=[IP_ADDRESS…]

تنظیم Domain برای DNS سرور: با استفاده از این آپشن می‌توانید برای DNS سرور کانتینر خود domain قرار دهید و با استفاده از آن می‌توانید تغییراتی در DNS سرور کانتینر خود ایجاد کنید.

–dns-search=DOMAIN…

قرار دادن آپشن‌های دیگر در DNS سرور: با استفاده از این آپشن شما می‌توانید داخل کانتینر خود و فایل resolv.conf آپشن‌هایی که مجاز است را قرار دهید.

–dns-opt=OPTION…

در کل این موضوع خیلی مهم است که بتوانید به خوبی با DNS Server ارتباط برقرار کنید و از آن استفاده کنیم. با دقت مناسب در استفاده از این آپشن‌ها به خوبی می‌‌توان بین کانتینرها ارتباط برقرار کرد.

منبع