آشنایی با مشخصات Docker Compose
دوکر (Docker) یکی از ابزارهای فوقالعاده در دنیای توسعه نرمافزار است که به ما کمک میکند برنامهها را در بستههای مستقل و مجزا به نام کانتینر داشته باشیم. اما در دنیای واقعی، اکثر پروژهها شامل چندین خدمات مختلف هستند. اینجاست که Docker Compose وارد عمل میشود و ما را قادر میسازد تا مجموعهای از کانتینرها را بهطور همزمان مدیریت کنیم.
با Docker Compose، شما میتوانید انواع خدمات را با هم به شیوهای ساده و سازمانیافته راهاندازی کنید. با استفاده از یک فایل YAML، میتوانید تمام تنظیمات کانتینرها، شبکهها، و حالتهای داده را مشخص کنید. این فایل به ما این امکان را میدهد که تنظیمات را بهراحتی مدیریت کرده و با یک دستور ساده تمام خدمات را راهاندازی یا متوقف کنیم.
فایل Compose معمولاً شامل تعریف خدمات، شبکهها و حجمها است و به ما اجازه میدهد اطمینان حاصل کنیم که همهچیز در موقعیت درست خود قرار دارد. مثلاً اگر بخواهید یک اپلیکیشن وب را که به یک پایگاه داده نیز نیاز دارد، راهاندازی کنید، میتوانید این دو سرویس را بهراحتی در یک فایل Compose تعریف کنید. این کار باعث میشود که راهاندازی برنامهها به نسبت سادهتر، سریعتر و قابل تکرارتر شود.
حالا بیایید نگاهی به یک نمونه کد از مشخصات Docker Compose بیندازیم و آن را تحلیل کنیم. در کد زیر، یک فایل Compose برای یک اپلیکیشن Node.js به همراه MongoDB آورده شده است:
version: '3'
services:
web:
image: node:14
volumes:
- .:/usr/src/app
ports:
- "3000:3000"
depends_on:
- db
db:
image: mongo
volumes:
- mongo_data:/data/db
volumes:
mongo_data:
در کد بالا، با استفاده از Docker Compose به تعریف دو سرویس پرداختهایم، یکی برای وب و یکی برای پایگاه داده. حال بیایید با هم خط به خط این فایل را بررسی کنیم:
تجزیه و تحلیل کد Docker Compose
version: '3'
این خط نسخه Docker Compose را تعیین میکند. در اینجا از نسخه 3 استفاده شده است، که ویژگیهای معاصر این ابزار را در اختیار ما قرار میدهد.
services:
این بخش شروع تعریف خدمات مختلفی است که قرار است در کانتینرهای جداگانه اجرا شوند.
web:
در اینجا ما سرویس وب را تعریف کردهایم که از یک تصویر Node.js استفاده میکند.
image: node:14
اینجا به تصویر Docker برای Node.js اشاره میکنیم که نسخه 14 آن است.
volumes:
این بخش برای تعریف حجمها (volumes) استفاده میشود که به ما اجازه میدهد بین کانتینر و سیستم میزبان خود فایلها را به اشتراک بگذاریم.
- .:/usr/src/app
این خط بهصراحت مشخص میکند که دایرکتوری جاری را به دایرکتوری /usr/src/app در کانتینر متصل میکنیم.
ports:
این بخش برای مشخص کردن پورتهایی است که باید از کانتینر به سیستم میزبان متصل شوند.
- "3000:3000"
این خط مشخص میکند که پورت 3000 کانتینر به پورت 3000 در میزبان متصل خواهد شد.
depends_on:
این بخش مشخص میکند که سرویس وب به پایگاه داده (db) وابسته است.
- db
این خط اشاره دارد به اینکه سرویس وب باید ابتدا سرویس پایگاه داده راهاندازی شود.
db:
اکنون سرویس پایگاه داده را تعریف میکنیم.
image: mongo
در اینجا به تصویر Docker برای پایگاه داده MongoDB اشاره میکنیم.
volumes:
مشابه سرویس وب، در اینجا هم بهمنظور ذخیرهسازی دائمی دادهها، حجم تعریف میکنیم.
- mongo_data:/data/db
این خط حجم mongo_data را به دایرکتوری /data/db در کانتینر متصل میکند.
volumes:
در این بخش، حجمهای تعریفشده برای کانتینرها را مشخص میکنیم.
mongo_data:
این خط نام حجم mongo_data را مشخص میکند که در سرویس MongoDB از آن استفاده میشود.