تصور کنید یک اپلیکیشن با چندین کانتینر داکر در اختیار دارید و حال برای هماهنگ کردن و مدیریت فرایند استقرار این حجم از کانتینر قصد دارید از طریق یک ابزار مرکزی تمام کارها را انجام دهید. در این شرایط با چالشهای مختلفی روبهرو خواهید بود و در نهایت فرایند مدیریتی بسیار سختی را پیش رو خواهید داشت. داکر کامپوز در این شرایط بهترین ابزاری خواهد بود که در مدیریت Docker Containerهای مختلف میتواند به شما کمک بکند.
در این مطلب از وبلاگ همروش قصد داریم شما را با داکر کامپوز بهخوبی آشنا کنیم و از ویژگیها و چگونگی فرایند کاری آن صحبت کنیم.
داکر کامپوز یا Docker Compose چیست؟
همانطور که میدانید استفاده از تکنولوژی داکر در حال تبدیل شدن به یک استاندارد در بسیاری از شرکتها و کسب و کارهاست. دلایل بسیار زیادی برای این موضوع نیز وجود دارد که با مطالعه ویژگیها و مزایایی داکر میتوانید از این موارد آگاهی کسب کنید.
مدیریت و استفاده از داکر نیز آسان است اما زمانی این بحث چالشبرانگیز میشود که شما چندین کانتینر داشته باشید و بخواهید در نهایت یک اپلیکیشن یا وبسایت یکپارچه را با کانتینرهای مختلف اجرا کنید. در این حالت است که شما به ابزار داکر کامپوز نیاز پیدا خواهید کرد.
به زبان بسیار ساده داکر کامپوز ابزاری است که در مدیریت استقرار کانتینرهای مختلف به شما کمک میکند. استفاده از این ابزار زمانی اهمیت بالایی پیدا میکند که شما در فرایند توسعه اپلیکیشن خود از معماری مبتنی بر میکروسرویس استفاده کنید،
![docker compose](https://blog.hamravesh.com/blog/wp-content/uploads/2024/01/docker-compose-1024x576.png)
در معماری میکروسرویس هر کدام از اپلیکیشنهای کوچک شما (سرویسهای مختلف) در کانتینرهای جداگانه مدیریت و استقرار پیدا میکنند. در نتیجه برای مدیریت کردن این حجم از کانتینر متفاوت با چالشهای بسیار زیادی روبرو خواهید بود که داکر کامپوز قصد دارد این مشکل را حل کند.
با استفاده از داکر کامپوز شما میتوانید با ایجاد یک فایل YAML سرویسهای مختلف را تعریف کرده و اپلیکیشنهایی را که دارای کانتینرهای مختلفی هستند به اشتراک بگذارید. به این صورت شما میتوانید از طریق یک منبع مشترک و متمرکز، پروژهای که چندین کانتینر مختلف دارد را اجرا نمایید. در ارتباط با این فایل در ادامه مطلب بیشتر آشنا خواهید شد.
برای مثال تصور کنید شما قصد دارید در توسعه پروژه خود از Node.js و MongoDB استفاده کنید. در این حالت رویکرد عادی به این صورت است که هر کدام این موارد را باید بهصورت جداگانه توسط ایمیجها و کانتینرهای مختلف مدیریت و اجرا کنید. اما در داکر کامپوز با استفاده از یک فایل YAML همه چیز را از یک نقطه مدیریت خواهید کرد.
کاربردها و مزایای استفاده از Docker Compose
{تصویری از کاربردهای ذکر شده تنها براساس تایتلهاشون که همین زیر نوشتمشون.}
داکر کامپوز به صورت خلاصه فرایند مدیریت کانتینرهای مختلف داکر را آسان میکند، اما جدای از این مورد یکسری مزایا و ویژگیهای منحصر به فرد نیز دارد که با مطالعه آنها میتوانید به صورت عمیقتری با کارکرد این ابزار آشنا شوید:
محیطهای ایزوله شده مختلف با استفاده از هاست یا میزبانی مشترک
با استفاده از داکر کامپوز میتوانید محیطهای ایزوله شده مختلفی را روی یک هاست مشترک قرار دهید. داکر کامپوز برای ایزوله و جدا کردن محیطهای توسعه مختلف از همدیگر تنها از یک Project Name (نام پروژه) استفاده میکند. در واقع این مورد به تفکیک محیطهای توسعه از همدیگر کمک میکند. شما میتوانید از یک نام پروژه در بخشها و سناریوهای مختلفی استفاده کنید.
ذخیره اطلاعات درایو در هنگام ساخت کانتینرها
کامپوز تمام درایوهایی که توسط سرویسهای شما مورد استفاده قرار میگیرد را نگهداری میکند. در این حالت وقتی که کامپوز اجرا شود، کانتینرهایی که قبلا اجرا شدهاند را پیدا کرده و درایوها را از کانتینرهای قدیمی در کانتینرهای جدید کپی میکند. در نهایت تمام این اقدامات برای این انجام میشود تا هیچ اطلاعاتی که مربوط به درایوهاست حذف نشود.
استفاده مجدد از کانتینرها و بهینه بودن در مصرف منابع
داکر کامپوز پیکربندیهایی که برای ایجاد کانتینرها مورد استفاده قرار گرفته را نزد خود کش میکند. در این حالت زمانی که شما قصد راهاندازی مجدد یک سرویس را داشته باشید، در صورتی که تغییری در آن ایجاد نشده باشد، میتوانید از کانتینرهای از پیش موجود دوباره استفاده کنید.
ایجاد محیطی برای تستهای خودکار
یکی از مهمترین بخشهای فرایند CI/CD انجام تستهای خودکار است که برای انجام آن به محیطی برای اجرا تستها نیاز است. کامپوز در این مسیر به شما کمک میکند تا محیطهای جدیدی را برای تست اپلیکیشنها ایجاد کنید. در داکر کامپوز میتوانید تنها با چند دستور ساده محیط تست خود را ایجاد کرده، فایل تست را اجرا کنید و در نهایت محیط تست را حذف کنید.
ارتباطات درونی امن
داکر کامپوز برای برقراری ارتباط میان سرویسهای مختلف یک شبکه مستقل را ایجاد میکند. این موضوع باعث میشود تا یک لایه امنیت به اپلیکیشن اضافه شود چرا که شما نخواهید توانست در خارج از این سازوکار به سرویسها دسترسی داشته باشید و برای ایجاد دسترسی حتما باید بخشی از کلیت سازوکار درونی باشید.
پیکربندی آسان و سریع
از آنجایی که برای مدیریت و استفاده از داکر کامپوز تنها به تعریف یک فایل YAML نیاز دارید با یادگیری فرمت و ساختار این فایل در سریعترین زمان ممکن میتوانید از ویژگیهای و سرویسهای داکر کامپوز استفاده کنید. در نتیجه فرایند پیکربندی و استفاده بسیار آسان و سریعی دارد.
ساختار فایل YAML در داکر کامپوز
داکر کامپوز برای مدیریت کانتینرهای مختلف از یک فایل مرکزی با فرمت YAML استفاده میکند. در این فایل تمام مشخصات لازم برای اجرایی شدن امکانات داکر کامپوز فراهم میشود. برای اینکه به صورت کاملتری با نقش این فایل آشنا شوید بیایید یک مثال را بررسی کنیم. در زیر یک نمونه از فایل YAML را مشاهده خواهید کرد که در ادامه با بخشهای مختلف آن آشنا میشوید:
version: '3'
services:
app:
image: node:latest
container_name: app_main
restart: always
command: sh -c "yarn install && yarn start"
ports:
- 8000:8000
working_dir: /app
volumes:
- ./:/app
environment:
MYSQL_HOST: localhost
MYSQL_USER: root
MYSQL_PASSWORD:
MYSQL_DB: test
mongo:
image: mongo
container_name: app_mongo
restart: always
ports:
- 27017:27017
volumes:
- ~/mongo:/data/db
volumes:
mongodb:
برای اینکه به صورت کامل با ساختار این فایل آشنا شوید بیایید به صورت جداگانه بخشهای مختلف آن را بررسی کنیم:
- version: این دستور به نسخه مورد استفاده از docker-compose اشاره دارد که قصد دارید از آن در این پروژه استفاده کنید.
- services: برای تعیین سرویسهایی که قصد اجرای آنها را دارید باید این دستور را به فایلتان اضافه کنید.
- app: این مورد یک نام سفارشی برای یکی از کانتینرهای شماست.
- image: در این بخش داکر ایمیجی که قصد دارید از آن در این پروژه استفاده کنید را وارد میکنید
- container_name: نام هر کدام از کانتینرهای شما در این قسمت قرار میگیرد.
- restart: این دستور وضعیت راهاندازی و راهاندازی مجدد هر سرویس را مشخص میکند.
- port: برای تعریف یک پورت مشخص که قصد دارید کانتینر روی آن اجرا شود این مورد را مقداردهی میکنید.
- working_dir: دایرکتوری که کانتینر سرویس مربوطه در آن قرار دارد.
- environment: از این مورد برای تعریف متغیرهای محیطی یا Environment Variable استفاده میشود.
- command: این مورد حاوی دستوریست که برای اجرا سرویسها مورد استفاده قرار میگیرد.
این موارد تنها دستورات پایهای و اصلی هستند که در فایل YAML مربوط به Docker Compose استفاده میشوند اما با مطالعه مستندات اصلی متوجه خواهید شد که امکانات و ویژگیهای دیگری نیز وجود دارد که میتوانید از آنها نیز بهره بگیرید.
آشنایی با دستورات داکر کامپوز در محیط ترمینال
برای مدیریت و انجام عملیاتهای مختلف در داکر کامپوز شما باید با دستورات پایهای آن در محیط ترمینال آشنایی داشته باشید. برای همین در ادامه این مطلب قصد دارم با برخی از مهمترین و پایهایترین این دستورات در محیط ترمینال یا CMD آشنا شویم.
دستور | شرح دستور |
docker-compose –help | با استفاده از این دستور لیست تمام راهنماهای دستورات داکر کامپوز و آرگومانهای مختلف آنها به شما نمایش داده خواهد شد. |
docker-compose build | این دستور با مشاهده فایل YAML، در صورت وجود دستور build، آن را اجرا میکند. هر سرویس میتواند یک دستور build داشته باشد. |
docker-compose run | برای اجرا کردن سرویسها از این دستور استفاده میشود. |
docker-compose up | برای ایجاد، ایجاد مجدد و شروع کار داکر کامپوز از این دستور استفاده میشود. |
docker-compose -f [command] | با استفاده از فلگ f- میتوانید موقعیت فایل پیکربندی داکر کامپوز را مشخص کنید. |
docker-compose start | اجرا یا شروع کانتینرهای موجود. |
docker-compose stop | متوقف کردن کانتینرها در فرایند اجرا (بدون حذف آن) |
docker-compose pause | ایجاد مکث در اجرا کانتینرهای مربوط به یک سرویس |
docker-compose unpause | برای غیرفعال کردن دستور قبلی (از حالت مکث درآوردن) از این دستور استفاده میشود. |
docker-compose down | متوقف کردن کانتینرها (حذف کانتینر، شبکهها، Volumeها و ایمیجها) |
docker-compose ps | نمایش لیست کانتینرهایی که در فایل پیکربندی داکر کامپوز وجود دارد. |
docker-compose images | نمایش لیست ایمیجهایی که توسط کانتینرهای ایجاد شده مورد استفاده قرار میگیرد. |
docker-compose ls | نمایش لیست پروژههای درحال اجرا داکر کامپوز |
آشنایی با مفاهیم و کلید واژههای اصلی در داکر کامپوز
برای اینکه به صورت عمیقتری با چیستی داکر کامپوز و امکانات آن آشنا شویم نیاز است تا با یکسری از مفاهیم و کلید واژههای اصلی آن آشنا شویم. به این صورت در موقع مواجه با هر کدام از این واژهها در محیط داکر کامپوز میتوانیم با درک بهتری از ویژگیهای آن استفاده کنیم.
- Services: سرویسها به داکر ایمیجهای مختلفی اطلاق میشود که قصد داریم از طریق داکر کامپوز آنها را به صورت یکجا مدیریت و اجرا کنیم.
- Networks: این کلید واژه (شبکهها) وظیفه متصل کردن داکر کانتینرهای مختلف به همدیگر و ایجاد یک مسیر برای برقراری ارتباط بین آنها را فراهم میکند.
- Volumes: این کلید واژه به قسمتی اطلاق میشود که اطلاعات را به صورت دائمی در خود ذخیره میکند. این اطلاعات میتواند در بین کانتینرهای مختلف در یک فضای کاری به اشتراک گذاشته شود.
- Configs: با استفاده از این ویژگی شما میتوانید بدون ساخت یک داکر ایمیج جدید، رفتار آن را براساس فایلهای ذخیره شده در سرویس قبلی (ٰVolumes) تغییر دهید.
- Secrets: این مورد به فضایی گفته میشود که اطلاعات حساس مربوط به پیکربندیها را در خود ذخیره میکند. برای مثال گواهینامههای سرور از جمله این اطلاعات حساس هستند.
استفاده از داکر کامپوز در پلتفرم ابری دارکوب
با استفاده از پلتفرم ابری دارکوب، شما امکان استقرار اپلیکیشنهایتان را بهسرعت با استفاده از داکر کامپوز خواهید داشت. تنها کافیست هنگام تعریف اپلیکیشن، Docker Compose را انتخاب کرده و محتویات فایل YAML مورد نظر را در آن قرار دهید. پلتفرم ابری دارکوب به صورت خودکار اپلیکیشنهای شما را تشخیص میدهد.
برای مطالعه بیشتر این ویژگی به قسمت مستندات دارکوب مراجعه نمایید.
جمعبندی
داکر کامپوز بهینهترین و استاندارترین روش برای مدیریت داکر کانتینرهای مختلف از طریق یک بخش مرکزی است. این تکنولوژی برای وبسایتها و اپلیکیشنهایی که براساس معماری میکروسرویس پیش میروند و مجبور هستند که برای توسعه پروژههایشان کانتینرهای مختلفی را ایجاد کنند، بسیار حیاتی است.
در این مطلب از وبسایت همروش ما با چیستی داکر کامپوز، ویژگیها و مزیتهای آن، ساختار فایل Compose.yaml و کلیدواژهها و مفاهیم اصلی در داکر کامپوز آشنا شدیم.