/docker-messenger

The final project of Greenweb holding Docker course

Primary LanguagePHP

پروژه نهائی بوت‌کمپ آموزشی داکر در هولدینگ گرین‌وب

هدف از این پروژه، مرور مباحث مطرح شده و حل یک موضوع جدید توسط دانشجویان میباشد.

صورت مسأله

شرایطی را فراهم کنید که دو کانتینر که در یک شبکه نیستند و هیچ راه ارتباطی به وسیله شبکه به صورت مستقیم بایکدیگر ندارند بتوانند پیامی را بین همدیگر مخابره کنند. میتوان کانتینر واسطی را بین این دو کانتینر در نظر گرفت که توسط هر دو کانتینر در شبکه قابل رویت میباشد. شاید تصویر زیر گویاتر باشه:

index

به عنوان یک سناریو واقعی تصور کنید در هر کانتینر یک و دو، متغیرهای محیطی خاصی با مقادیر خاصی وجود دارد که فقط خود همان کانتینر از آن متغیر و مقدارش اطلاع دارد. فرض کنید میخواهیم این مقادیر بین دو کانتینر یک و دو که هیچ شبکه مستقیم به جز واسط بین‌شان وجود ندارد به اشتراک گذاشته شود. یعنی مثلا بتوان داخل کانتینر اول به هر نحو و هر روشی که شده، مقدار متغیرهای محیطی مربوطه را از کانتینر دوم پرس‌وجو کنیم و بالعکس. یکی از روش‌های حل این مساله ساده، در این مخزن پیاده‌سازی شده است. میتوانید فایل docker-compose.yml را مطالعه کنید تا با نحوه انجام این کار بیشتر آشنا شوید.

نحوه اجرا

git clone https://github.com/amirbagh75/docker-messenger docker-messenger
cd docker-messenger
docker-compose up -d

نحوه پرس‌وجو

میتوانید برای نمونه وارد کانتینر شماره یک شوید و یک درخواست http ارسال کنید:

docker-compose exec app1 sh
/app # curl bridge/app2

دستور curl bridge/app2 یعنی به کانتینر واسط که نام آن‌را در این مثال bridge گذاشتیم، درخواست http روی مسیر /app2 ارسال میکنیم. این درخواست توسط کانتینر واسط که در این‌جا یک وب‌سرور Nginx میباشد به کانتینر دوم پراکسی میشود و جواب توسط کانتینر دوم به واسط برمیگردد و در نهایت کانتینر واسط جواب را به کانتینر اول میرساند. جواب بازگشتی بدین صورت میباشد:

{
    "APP_ID": "App 2",
    "SECRET": "8211584750"
}