اجرای کامل برنامه از روی فایل Docker Compose

اجرای کامل برنامه از روی فایل Docker Compose

 در دو قسمت قبلی، با هم فایل docker-compose.yml را برای دو سرویس برنامه مان نوشتیم. حالا وقت آن رسیده است که مراحل راه اندازی برنامه را یادبگیرید.

در ابتدا باید مطمئن بشویم که هیچ کانتینر درحال اجرایی از app و db نداریم. برای این کار همانطور که از فصل های قبلی این آموزش به یاد دارید، ابتدا با دستور docker ps، لیست کانتینرهای درحال اجرا را مشاهده می کنید و در صورتی که کانتینر مشابهی درحال اجرا بود، باید ID آن را برداشته و با دستور <docker rm -f <id، کانتینر مورد نظر را متوقف و حذف کنید.

در ادامه با دستور docker-compose up، به راحتی تمامی سرویس های معرفی شده برای برنامه و کارهایی که برای اجرای آن لازم است، اجرا می شود. در دستور زیر از d- هم استفاده شده است که جهت یادآوری، این پرچم (flag) باعث می شود که همه ی دستورها و کارها در پس زمینه اجرا شود.

docker-compose up -d

با اجرای این دستور، باید خروجی زیر را مشاهده کنیم:

Creating network "app_default" with the default driver
Creating volume "app_todo-mysql-data" with default driver
Creating app_app_1   ... done
Creating app_mysql_1 ... done

همانطور که در خط های اول و دوم خروجی مشاهده می کنید، داکر شبکه ای با نام app_default و حافظه ای با نام app_todo-mysql-data درست کرده است. اگر یادتان باشد، حافظه ای با این نام را خودمان در فایل compose تعریف کرده بودیم ولی شبکه ای با این نام تعریف نکرده بودیم. موضوع این است که، docker compose به صورت پیش فرض برای سرویس های برنامه ی ما یک شبکه تعریف می کند تا آن ها بتوانند در بستر آن شبکه با هم ارتباط داشته باشند.

در خط های سوم و چهارم هم، دو سرویسی که تعریف کرده بودیم، راه اندازی شده است.

در این مرحله برای آشنایی بیشتر با فرآیندهایی که اتفاق افتاده است و البته به این خاطر که توانایی مطالعه ی log ها خیلی مفید است، با دستور docker-compose logs -f می توانیم log ها را بررسی کنیم.

در دستور بالا، وقتی پرچم f- را که سر واژه ی follow است اضافه کردیم، به این معناست که log ها را دنبال کند و به صورت زنده، هر log ای که ثبت شد را به ما نشان دهد.

اگر این دستور را همین الان اجرا کنید، باید خروجی زیر را ببینید:

mysql_1  | 2021-10-23T03:07:16.083639Z 0 [Note] mysqld: ready for connections.
mysql_1  | Version: '5.7.27'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server (GPL)
app_1    | Connected to mysql db at host mysql
app_1    | Listening on port 3000

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

توجه داشته باشید، اگر قصد شما مشاهده ی log های فقط یک سرویس خاص باشد، می توانید نام آن سرویس را به انتهای دستور بالا اضافه کنید. برای مثال با دستور docker-compose logs -f app، فقط log های مربوط به سرویس app را مشاهده می کنید.

💡 نکته

وقتی سرویس app راه افتاد، منتظر می ماند تا سرویس mysql هم راه بیافتد و آماده ی کار بشود سپس برای اتصال به آن تلاش می کند. نکته ی مهمی که لازم است بدانید این است که، داکر به صورت Built-in قابلیت صبر کردن برای راه افتادن کامل کانتینر دیگر و آماده ی کار شدنش را ندارد. یعنی درون خودش این قابلیت وجود ندارد و اگر به این خدمت نیاز داشتید باید از چیزهای دیگری در کنار داکر استفاده کنید. برای مثل، وقتی پروژه ی شما برپایه Node است، می توانید از wait-port در آن بهره ببرید.

برای کسانی که روی لینک عبارت Wait-port کلیک نکردند و توضیحات آن را نخوانده اند، به صورت مختصر باید بگویم که این پکیج یک dependency ساده است که امکان منتظر ماندن برای باز شدن port خاصی را می دهد. این dependency برای زمانی که قصد داریم به یک server یا سرویس دیگری متصل شویم، بسیار مفید است.

مشابه این dependency، در زبان ها و frameworkهای دیگر هم وجود دارد.

در این لحظه شما باید بتوانید برنامه ی خود را مشاهده کرده و از آن استفاده کنید.🦾 و همانطور که حتما خودتان هم متوجه شدید، کل برنامه ی ما فقط و فقط با یک دستور راه افتاد.

مشاهده ی سرویس های برنامه مان در Docker Dashboard

اگر به برنامه ی Docker Dashboard نگاه کنید، یک گروه با نام app خواهید دید. این همان "Project Name" ای هست که از docker compose آمده است و برای نام گذاری گروه کانتینرها استفاده می شود. به صورت پیش فرض project name، نام همان پوشه ای هست که docker-compose.yml در آن قرار دارد.

نمای برنامه ی docker dashboard بعد از ایجاد گروهی از کانتینرها با استفاده docker compose

اگر مثلث کوچکی که کنار اسم گروه است را بزنید، می توانید سرویس هایی که در فایل compose تعریف کرده بودید را مشاهده کنید. البته اسامی نوشته شده در اینجا کمی متفاوت است و توضیحات بیشتری با خود دارد. اسامی نوشته شده در این بخش، براساس الگوی <project-name>_<service-name>_<replica-number> می باشد. در این نام گذاری بخش های اول و دوم که کاملا مشخص است و بخش سوم به تعداد کپی های آن کانتینر اشاره دارد. واژه ی replica به معنای کپی دقیق از یک چیز است که شاید این واژه را در دوره ی آموزش گام به گام Elasticsearch سایت سکان آکادمی زیاد شنیده باشید.

در این بخش به راحتی می توانیم ببینیم، برنامه ی ما شامل چه کانتینرهایی است و برای مثال دیتابیس ما از کدام image برای MySQL استفاده کرده است.

نمای برنامه ی docker dashboard – حالت باز شده ی یک گروه از کانتینرهای ایجاد شده توسط docker compose

با یک دستور همه ی سرویس ها را پایین بکشید.

هر وقت که برای متوقف کردن همه ی سرویس های راه اندازی شده توسط Docker Compose آماده بودید، می توانید از دستور docker-compose down استفاده کنید، یا اگر از Docker Dashboard استفاده می کنید، می توانید روی آیکون سطل آشغال جلوی اسم گروه، کلیک کنید. با این کار، کانتینرها متوقف خواهند شد و شبکه ای که تعریف شده بود پاک می شود.

توجه: حذف Volume

وقتی از این دستور استفاده می کنید، Volume های تعریف شده در Docker Compose حذف نخواهند شد. در صورتی که می خواهید این حافظه های اشغال شده هم آزاد بشوند، نیاز است volumes– را به دستور وارد شده اضافه کنید. همچنین دقت داشته باشید که وقتی از طریق Docker Dashboard عمل حذف را انجام می دهید، Volume های تعریف شده حذف نمی شوند.

در این بخش و دو بخش قبلی، یاد گرفتیم که چطور با استفاده از Docker Compose، راه اندازی و اشتراک گذاری برنامه های چند کانتینری به طور چشم گیری راحت تر می شود. برای این کار یک فایل Compose درست کردیم و دستوراتی که برای راه اندازی برنامه مان داشتیم را، به زبانی قابل فهم برای Docker Compose ترجمه کردیم. در ادامه ی این فصل، قصد دارم کمی وارد جزئیات بیشتر درمورد Docker Compose و دستورات و برچسب هایش بشوم.

دوره در حال تکمیل است ... rocket
کاربر میهمان

دوست گرامی شما به عنوان کاربر میهمان در سایت سکان آکادمی حضور دارید لطفاً برای ارسال دیدگاه ابتدا وارد حساب خود شوید