داکر کامپوز (Docker Compose)؛ استفاده از متغیرهای خطی
استفاده از متغیرهای خطی و متغیرهای محیطی در داکر کامپوز میتواند کمک زیادی به بهبود روند توسعه اپلیکیشن کند.
داکر کامپوز یکی از بهترین دستورهای پلتفرم داکر برای اجرا و مدیریت اپلیکیشنهای کانتینری است. این دستور به شما اجازه خواهد داد تا بتوانید به سادگی یک یا چند کانتینر را همزمان استفاده کنید. استفاده از متغیرهای خطی و متغیرهای محیطی در داکر کامپوز یکی از دلایل خوبی این دستور در پلتفرم داکر است. اگر به دنبال آشنایی بیشتر با این مورد هستید ادامه این مقاله را از دست ندهید.
مقدمهای بر داکر کامپوز
بر خلاف داکر ران تایم، داکر کامپوز محدود به پلتفرم داکر نیست. دستور کامپوز در ECS (Amazon Elastic Container Service)، ACI (Azure Container Instances) و کوبرنتیز نیز استفاده میشود. علاوه بر این، داکر خدمتی تحت عنوان Compose Specification نیز ارائه داده است که میتواند با سایر فرمتهای پکیجینگ مانند Helm charts یا Kubernetes YAML نیز کار کند. علاوه بر این کامپوز میتواند اپلیکیشنها را روی ACI، Amazon ECS و AWS Fargate نیز مستقر کند. از طرفی به وسیله ابزار تغییر Kompose میتواند منابع کوبرنتیز را نیز پیکربندی کند. برای مثال ادغام Azure به توسعهدهندگان اجازه میدهد که از دستورهای بومی داکر برای اجرای اپلیکیشن در ACI استفاده کنند. برای مثال میتوانند از CLI داکر یا افزونه Virtual Code Studio استفاده کنند. نسخههای ویندوز و مک داکر کامپوز را به صورت پیشفرض روی خود دارند و برای استفاده از این دستور در لینوکس، باید آن را به صورت دستی از وبسایت داکر دریافت کنید.
مفاهیم اصلی داکر کامپوز
مشخصات اصلی کامپوز مفاهیم زیر را به عنوان المانهای اصلی یک فایل کامپوز چند کانتینری یک اپلیکیشن، تعریف میکنند.
- Services، بر اساس یک یا چند فایل ایمیج کانتینر هستند و در داخل داکر ران تایم برای تامین عملکرد اپلیکیشن اجرا میشوند.
- Networks، این مفهوم وظیفه برقراری اتصال روت کردن بین کانتینرها را بر عهده دارد.
- Volumes، این قسمت اطلاعات دائمی را ذخیره میکند و این اطلاعات میتوانند بین کانتینرهای مختلف در فضای کاری منتقل شوند.
- Configs، به سرویس اجازه میدهد تا بدون ساخت یک فایل ایمیج جدید، تغییر رفتار دهد. این قسمت از گزینههایی مانند فایلهای ذخیره شده در Volumes استفاده میکند.
- Secrets، این قسمت نیز اطلاعات حساس پیکربندی سیستم مانند گواهینامههای سرور را نگهداری میکند.
فایل Compose و سینتکس آن
سه مرحله زیر که به آن اشاره کردهایم، به شما اجازه میدهند تا اپلیکیشن خود را با استفاده از کامپوز، مستقر یا دیپلوی کنید.
- با استفاده از یک داکر فایل، ایمیجها و فضای اپلیکیشن خود را تعریف کنید.
- اعضا و قسمتهای یک اپلیکیشن چند کانتینری را به وسیله Docker Compose تعریف و پیکربندی کنید.
- برای استقرار و اجرای برنامه از docker-compose up استفاده کنید.
یک مثال رایج و ساده برای کامپوز کردن یک اپلیکیشن این است که یک وبسایت شامل سرور وب Front-End، سرور ذخیره اطلاعات Back-End و یک فضای دیسک مرتبط را دارد. زمانی که این اپلیکیشن به وسیله سرویسهای کانتینری ایمپلمنت میشود، مفاهیم کامپوز را به شکل زیر به دنبال دارد:
- دو Service و فایلهای ایمیج مربوط به آن (وب و دیتابیس)
- یک Secret (که شامل گواهینامه HTTPS برای Front-end وبسایت است.)
- یک Config (برای HTTP و Fron-End)
- یک Volume دائمی که اطلاعات دیتابیس اپلیکیشن را با خود دارد
- و دو Network (Front-End به اینترنت و Back-End بین وب و سرورهای دیتابیس)
فایل YAML کامپوز برای این پروژه به شکل زیر خواهد شد.
Services:
Frontend:
Image: awesome/webapp
Ports:
- “433:8043”
Networks:
- Front-tier
- Back-tier
Configs:
- Httpd-config
Secrets:
- Server-certificate
Backend:
Image: awesome/database
Volumes:
- Db-data:/etc/data
Networks:
- Back-tier
Volumes:
Db-data:
Driver: flocker
Driver_opts:
Size: “10GiB”
Configs:
Httpd-config:
External: true
Secrets:
Server-certificate:
External: true
Networks:
# The presence of these objects is sufficient to define them
Front-tier: {}
Back-tier: {}
فایلهای کامپوز به صورت معمول به شکل Compose.yaml نامگذاری میشوند از کلمههای کلیدی برای تعریف هر فایل استفاده میشود. گزینههای ران تایم میتواند به وسیله خط فرمان یا کامند لاین، ست شوند یا متغیرهای محیطی یک env_file هستند که پسوند .env را با خود حمل میکنند.
متغیرهای فضای داکر کامپوز
متغیرهای محیطی در هر زبان برنامهنویسی به عنوان لایههای انتزاعی مطرح میشوند که به ادمینهای ادمین اجازه ایجاد تغییر در اطلاعات یا پیکربندی را بدون تغییر در کدنویسی میدهند. در داکر کامپوز ادمینهای IT میتوانند از متغیرهای محیطی برای کلیسازی پیکربندیها در شرایط مختلف استفاده کنند. همچنین میتوانند فضاهای استقرار و مفاد امنیتی را بدون تغییر در فایل اصلی، تغییر دهند. البته از متغیرها میتوان به عنوان خط فرمان نیز استفاده کرد، یا از یک فایل .env برای اجرای آن کمک گرفت. این موارد معمولا در پیکربندیهای پیچیده کاربرد دارند.
چون متغیرهای محیطی در فضاهای مختلفی تعریف میشوند، توسعهدهندگان باید مراقب باشند تا سهوا این موارد را از بین نبرند. ترتیب سنجش برای متغیرهای محیطی به ترتیب زیر هستند:
-
- کامپوز فایل
- متغیرهای محیطی Shell
- فایل محیطی
- داکر فایل
متغیرهای محیطی در این فضا بهتر است تنها مختص به پارامترهای استقرار باشند. پارامترهایی مانند نام اپلیکیشن، ایمیج کانتینر، اسم Volumeها و نقاط mount میتوانند از جمله این پارامترها باشند.
توجه داشته باشید که اطلاعات امنیتی پروژه خود را روی یک فایل محیطی یا متغیر ثبت نکنید. اطلاعاتی مانند رمز عبور، کلیدهای خصوصی SSH، گواهینامههای SSL یا هر اطلاعات دیگری نظیر این اطلاعات نباید به صورت متن نوشته ذخیره شوند. برای ذخیره اینها به جای داکر کامپوز از Swarm Secrets، Kubernetes Secrets یا سرویسهای ابری مانند AWS Secrets Manager یا Google Cloud Secret Manager میتوانید استفاده کنید. فایل کامپوز اصلی از متغیرهای جایگزین برای ارجاع به پارامترهای توضیح داده شده در فایل محیطی استفاده میکند. این فایل از هر دو سینتکس $VARIABLE و ${VARIABLE} پشتیبانی میکند.
متغیرهای محیطی به عنوان یک المان حساس در داکر کامپوز شناخته میشوند. متغیرها به توسعهدهندگان اجازه میدهند که پارامترها و منابع مختلف را بدون تغییر در کدنویسی، اصلاح کنند؛ بنابراین این متغیرها باید عضوی از فضای هر محصولی در فضای داکر کامپوز باشند.
کلام آخر
در این مقاله سعی کردیم تا شما را با استفاده از متغیرهای خطی و متغیرهای محیطی در داکر کامپوز آشنا کنیم. استفاده از این متغیرها میتواند کمک بسیار زیادی به توسعهدهندگان در افزایش سرعت پیشرفت پروژه کند. چرا که با استفاده از این ویژگی میتوان به سادگی کارهای مربوط به تغییر اطلاعات در پیکربندی دادهها را انجام داد.
با یوتاب میتوانید در مخازنی امن و سبک، پروژههای خود را ذخیره و با همکاران خود در فضایی یکپارچه به اشتراک بگذارید و به صورت نامحدود ورژنهای مختلف نرمافزار خود را در مخازن داکر ابر یوتاب نگهداری کنید. با استفاده از ابر مجازی یوتاب میتوانید از سرویس نومد نیز استفاده کنید.