داکر برای برنامه‌نویس‌ها: قسمت پنجم - ارتباط با کانتینر

مقدمه

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


دیدن پورت کانتینر در پورت سیستم

بیاید یک تصویر موجود در داکرهاب به نام nginx رو اجرا کنیم:

این همون وب سرور معروف هست که در پورت ۸۰ به درخواست http ما گوش میده. اما در حال حاضر فقط لاگ‌هایی که میده رو می‌بینیم. برای ارتباط با این کانتینر ما نمی‌تونیم به ip اون درخواست بدیم چون دسترسی بهش نداریم. ما باید یک پورت اون رو expose کنیم. وقتی می‌خوایم یک کانتینر رو اجرا کنیم با آپشن p- بهش میگیم یک پورت از کانتینر رو در یه پورت سیستم publish کنه. جلوی این آپشن اول پورت سیستم و بعد پورت کانتینر رو میدیم:

اینجا من پورت ۸۰ کانتینر رو می‌خواستم چون nginx روی اون جواب میده. پورت سیستم رو هر پورتی که آزاد باشه می‌تونم بذارم که من ۸۰۰۰ گذاشتم. حالا میشه تو مرورگر یا با curl به پورت ۸۰۰۰ سیستم و در نتیجه پورت ۸۰ کانتینر برسم:

به این شکل ارتباط دنیای بیرون رو با کانتینر برقرار می‌کنم. جواب دریافت شده همون صفحه پیشفرض nginx هست.


ارتباط از طریق شل

ممکنه یه موقعی بخوام برم داخل کانتینر و برای بررسی اون چند تا دستور اجرا کنم. در این موقع از exec استفاده می‌کنم. با exec میشه هر دستوری تو کانتینر اجرا کرد:

تو این مثال گفتم در بش hello رو بنویسه.

حالا با exec می‌خوایم بریم داخل کانتینر. بعد از اجرای کانتینر، نام یا id اون رو استفاده می‌کنم تا داخلش شل باز کنم:

دو تا آپشن استفاده کردم: it- که به ما اجازه میده داخل کانتینر به شکل interactive کار کنیم. آخر هم مسیر بش رو دادم تا یه دونه شل اجرا بشه داخل کانتینر. خب الان داخلش هستم. میخوام فایل پیش فرض nginx رو تغییر بدم:

حالا دوباره میرم خارج کانتینر curl می‌کنم:

هورااا! تونستم از طریق دسترسی شل محتوای کانتینر رو تغییر بدم ^_^

در کنار exec یه دستور دیگه هم هست که ممکنه با این اشتباه گرفته بشه. اونم attach هست. به exec هر دستوری بدید یه پروسه جدید شروع می‌کنه کنار پروسه اصلی. اما با attach ما به خود پروسه اصلی وصل میشیم. بیاید ببینیم. اول nginx رو با آپشن d- اجرا می‌کنم:

این آپشن باعث میشه دیگه خروجی‌های کانتینر رو نبینم و در پس زمینه اجرا شه. در عوض فقط id کانتینر رو می‌نویسه. حالا با attach بهش وصل میشم:

الان دوباره خروجی‌های nginx دیده میشه. البته خروجی‌های اولش رو دیگه نشون نمیده و فقط از اون لحظه که دستور رو اجرا کردم به بعد رو میاره.‌


جمع بندی

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

این قسمت هم تموم شد. امیدوارم استفاده کرده باشید. اگه صحبت یا نظری دارید این پایین بفرمایید.

قسمت قبلی

قسمت بعدی