نگاهی کلی به Compose
Compose، ابزاری برای اجرای برنامه های چند کانتینری داکر است. در Compose شما از یک فایل YAML برای تنظیم کردن سرویس های مختلف برنامه تان استفاده می کنید. سپس با یک دستور ساده، می توانید تمام سرویس های برنامه تان را ایجاد و اجرا کنید. برخی از ویژگی های Compose که باعث کارآمدی بسیار زیاد آن شده است عبارتند از:
- ایجاد چند محیط کاملا جدا از هم برروی یک Host،
- حفظ کردن اطلاعات در زمان ایجاد کانتینرها،
- ایجاد دوباره ی کانتیر فقط در صورت تغییر
و... که این ویژگی ها را به صورت مشروح در ادامه ی همین فصل از آموزش کاربردی داکر توضیح خواهم داد.
منظور از سرویس های برنامه، درواقع اجزایی شبیه به دیتابیس (مثلا Redis) است، که برنامه ی شما می خواهد از آن ها استفاده کند تا وظایف اش را انجام دهد.
Compose، در تمامی مرحله های برنامه از جمله وقتی که برنامه ی ما در مرحله ی محصول نهایی، هنگام توسعه، هنگام تست و همچنین در گردش کار CI هست کاربرد دارد، که بعضی از موارد استفاده ی متداول آن را در ادامه ی همین فصل توضیح خواهم داد.
استفاده از Compose فرآیندی سه مرحله ای دارد:
- محیط برنامه تان را با یک
Dockerfile
تعریف کنید، تا بتواند در هرجای دیگری بازتولید شود. - سرویس های تشکیل دهنده ی برنامه تان را در یک
docker-compose.yml
تعریف کنید تا همه ی این سرویس ها بتوانند در یک محیط ایزوله باهم اجرا شوند. - با اجرای دستور
docker compose up
سرویس Compose راه اندازی و اجرا میشود.
یک فایل docker-compose.yml
به صورت زیر است:
version: "3.9" # optional since v1.27.0
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
در بخش های جلوتر از همین فصل، دوباره به این فایل برمی گردیم و نگاهی عمیق تر به آن خواهیم انداخت.
Compose، درواقع دستوراتی برای کل چرخه ی عمر برنامه شما دارد:
- شروع کار، متوقف کردن و دوباره ساختن اجزا و نیازمندی های برنامه
- مشاهده ی وضعیت اجزای درحال اجرا
- انتقال Log سرویس های درحال اجرا به بیرون از آنها
- اجرای دستورات یکبار مصرف در سرویس
با این توضیحات می توانیم نتیجه گیری کنیم که Compose، راهی راحت و ساده است تا بتوانیم سرویس های مختلف و تنظیماتی که برای هر کدام از آنها نیاز داریم را در فایلی (با نام docker-compose.yml
) نوشته و همراه برنامه مان تحویل دهیم. با استفاده از این فایل، برای تمام طول عمر برنامه مان می توانیم دستوراتی را پیش بینی کنیم تا اجرا شوند.
ویژگی های اصلی Compose
در ادامه برخی از ویژگی های اصلی Compose را باهم بررسی می کنیم. این ویژگی ها باعث شده است تا Compose به ابزاری کارآمد تبدیل شود.
چندین محیط تفکیک شده برروی یک Host ایجاد می کند.
Compose، از نام پروژه برای جدا سازی محیط های برنامه ها از یکدیگر استفاده میکند. برای مثال یکی از کاربردهای نام پروژه در سروری هست که می خواهید زمان توسعه از آن استفاده کنید. خیلی از مواقع شما نیاز دارید که از یک محیط توسعه، کپی هایی داشته باشید. مثلا فرض کنید قرار است یکی از قابلیت های برنامه تان را به روز رسانی کنید. در این شرایط نیاز دارید قابلیت فعلی را روی یک محیط داشته باشید و نسخه ای از آن قابلیت را هم ایجاد کنید که روی آن تغییرات را اعمال کنید. در این شرایط نام پروژه به کمک تان می آید. یا به عنوان مثالی دیگر، برای اینکه جلوی تداخل بین Build های مختلف را در سرورهای CI بگیرید، می توانید نام پروژه را، یک شناسه ی واحد در نظر بگیرید، تا Compose آنها را در محیط های جداگانه ای اجرا و نگهداری کند.
به صورت پیش فرض، نام پروژه، همان نام پوشه اصلی برنامه است. ولی شما می توانید برای پروژه تان نام دلخواهی را در نظر بگیرید. یکی از راه های تعیین نام دلخواه برای نام پروژه، استفاده از پرچم p- است.
توجه داشته باشید؛ پوشه ای که به صورت پیش فرض به عنوان پوشه ی اصلی برنامه شناخته می شود، همان پوشه ایست که فایل Compose در آن قرار دارد. البته ما می توانیم پوشه ی اصلی برنامه را با استفاده از ویژگی project-directory–، به نامی که دلخواه مان هست تغییر بدهیم.
هنگام ایجاد کانتینر جدید، اطلاعات حافظه را حفظ می کند.
Composer، تمامی Volumeهایی که برنامه ها و سرویس های شما از آنها استفاده کرده اند را حفظ می کند. زمانی که دستور docker-compose up
اجرا می شود، به دنبال کانتینرهایی می گردد که در اجراهای قبلی این دستور ایجاد شده اند و اگر کانتینری را پیدا کند، ازVolumeهای کانتینرهای قدیمی یک نسخه برای کانتینر جدید کپی می گیرد. با این فرآیند، می توان اطمینان داشت که داده های تولید شده تا الان، از دست نمی روند.
💡 نکته ی ظریف: اگر از docker-compose در ماشین های Windowsای استفاده می کنید، حتما Environment Variable (متغیرهای محیطی) ویندوز رو بررسی کنید و اگر لازم شد آنها را برای نیازمندی خاص خودتان تغییر بدهید.
فقط کانتینرهایی را دوباره ایجاد می کند که تغییر کرده اند.
Compose، تنظیماتی که برای راه اندازی کانتینر استفاده کرده است را در حافظه خود نگه می دارد. وقتی که سرویسی را Restart می کنید که تغییری نکرده است، Compose از همان کانتینر های موجود، دوباره استفاده می کند. این قابلیت استفاده مجدد از کانتینر ها به این معنی هست که، شما می توانید خیلی سریع شرایط محیطی اجرای برنامه تان را تغییر بدهید.
می توان برای محیط ها و کاربران مختلف شرایط متفاوتی را تنظیم کرد.
یکی از قابلیت های اصلی، امکان استفاده از متغیرها در فایل Compose است. شما می توانید از این قابلیت بهره ببرید و عملیات compose کردن را براساس محیط اجرا و یا کاربر، تنظیم کنید.