چرا سکان آکادمی؟
استفاده از چند فایل برای ساخت فایل Compose نهایی

استفاده از چند فایل برای ساخت فایل Compose نهایی

در این بخش و دو بخش آینده، قصد دارم درباره ی اشتراک گذاری تنظیمات و پیکربندی های مشترک Compose، بین چند فایل یا پروژه ، توضیحاتی را ارائه بدهم. برای این کار از دو روش می توانیم استفاده کنیم:

  1. گسترش یک فایل Compose، با استفاده از چند فایل Compose دیگر، که در همین بخش به آن خواهیم پرداخت.
  2. گسترش سرویس های مجزا با برچسب extends (برای نسخه‌های پایین تر از 2.1)، که در بخش بعدی توضیح خواهم داد.

استفاده از چند فایل Compose

روش استفاده از چند فایل Compose برای گسترش فایل اصلی پیکربندی ها، باعث می شود بتوانیم از یک فایل Compose در محیط ها، پروژه و جریان های کاری مختلف استفاده کنیم. برای مثال شما یک فایل را تولید می کنید و این فایل را در شرایط مختلفی برای ساخت فایل های Compose متفاوتی استفاده می کنید.

به طور پیش فرض، Compose دو فایل docker-compose.yml و docker-compose-override.yml را می خواند. که ایجاد و داشتن فایل دومی در برنامه، به صورت دلخواه است. طبق قرارداد، docker-compose.yml شامل پیکربندی پایه برنامه شماست و فایل override، همانطور که از نامش پیداست، می‌تواند شامل لغو تنظیمات برای سرویس‌های موجود یا تعریف سرویس‌های کاملاً جدید باشد.

اگر بخواهیم از چند فایل استفاده کنیم یا قصد داشته باشیم فایل override را با نام متفاوتی داشته باشیم، باید از ویژگی f– در دستور docker-compose استفاده کنیم و لیست فایل هایی که قصد داریم برای پیکربندی نهایی، Compose باهم ادغام کند را معرفی کنیم در ادامه مثال هایی را برای تان آورده ام که استفاده از این ویژگی را در آنها خواهید دید. هنگامی که از چند فایل پیکربندی استفاده می کنید، باید مطمئن شوید که تمام مسیرهای موجود در فایل ها نسبت به فایل Compose اصلی، آدرس دهی شده اند.

در ادامه، دو مورد از استفاده های رایج برای ادغام چند فایل Compose جهت ساخت فایل Compose نهایی را بهمراه مثال، توضیح می دهم: 

تغییر فایل Compose یک برنامه، برای محیط‌های مختلف:

یکی از رایج ترین دلایلی که به خاطر آن، از چند فایل Compose استفاده می کنیم وقتی است که، برنامه ی درحال توسعه مان را روی حالتی شبیه به فضای نهایی محصول یا هر شرایط دیگری، قرار است بررسی کنیم. در این مواقع، مجبوریم برای هر یک از شرایط، فایل compose را تغییر بدهیم. ولی به جای این تغییرهای مکرر، می توانیم فایل پیکربندی Compose برنامه را به چند فایل مختلف تقسیم کنیم. در ادامه این کار را با هم انجام خواهیم داد.

با یک فایل پایه شروع می کنیم که در آن تنظیمات ابتدایی را مشخص می کنیم:

docker-compose.yml

web:
  image: example/my_web_app:latest
  depends_on:
    - db
    - cache
db:
  image: postgres:latest
cache:
  image: redis:latest 

در این مثال، پیکربندی مربوط به مرحله ی توسعه ی محصول، برای ماشین میزبان Port هایی را مشخص کرده است، کدها را با استفاده از Volume خاصی به کانتینر سوار کرده و image ای را برای web در برچسب build قرار داده.

docker-compose.override.yml

web:
  build: .
  volumes:
    - '.:/code'
  ports:
    - 8883:80
  environment:
    DEBUG: 'true'
db:
  command: '-d'
  ports:
    - 5432:5432
cache:
  ports:
    - 6379:6379

با اجرای docker-compose up به صورت خودکار فایل اصلی و override خوانده شده و اعمال می شود.

تا اینجای کار که تغییر خاصی وجود نداشت ولی صورت مسئله ای که دنبال می کردیم، تغییر فایل Compose نهایی برای شرایط دیگری همچون شرایط Production محصول است. پس باید فایل override دیگری بسازیم که احتمالا در شرایط واقعی، این فایل Compose باید در git دیگری قرار بگیرد.

docker-compose.prod.yml

web:
  ports:
    - 80:80
  environment:
    PRODUCTION: 'true'
cache:
  environment:
    TTL: '500'

برای اینکه برنامه مان را با این پیکربندی ها بسازیم و اجرا کنیم باید از دستور زیر استفاده کنیم.

docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

همانطور که بالاتر هم گفتم، علت اینکه اسم فایل ها را پس از f– در دستور docker-compose آوردیم، تغییر نام فایل override از حالت پیش فرض است.

با استفاده از این دستور، هر سه سرویس مورد نیاز برای برنامه مان، از تنظیمات و پیکربندی های اعلام شده در فایل های docker-compose.yml و docker-compose.prod.yml استفاده می کنند و کاری با فایل override ای که برای حالت توسعه داشتیم (docker-compose.override.yml)، ندارند.

تغییر فایل Compose، برای وظایف موقت:

برخی از کارها را ما بعضی از وقت ها قرار است انجام دهیم. برای مثال قرار است از یک دیتابیس خاص، نسخه ی پشتیبان تهیه کنیم. در این شرایط به جای تغییر فایل Compose اصلی برنامه، می توانیم از یک فایل دیگر استفاده کنیم. برای درک بهتر این موضوع به مثال زیر توجه کنید:

فایل docker-compose.yml را برای تنظیمات اولیه ی برنامه می سازیم:

web:
  image: example/my_web_app:latest
  depends_on:
    - db
db:
  image: postgres:latest

و در فایل docker-compose.admin.yml می توانیم سرویس دیگری را برای تهیه نسخه ی پشتیبان و یا گرفتن خروجی از دیتابیس تعریف کنیم.

    dbadmin:
      build: database_admin/
      depends_on:
        - db

حالا برای اجرای برنامه به صورت عادی، دستور docker-compose up –d را وارد می کنیم و برای اینکه بتوانیم سرویس درنظر گرفته شده برای نسخه ی پشتیبان را هم بالا بیاوریم باید با استفاده از دستور زیر فایل docker-compose.admin.yml را هم در دستور بیاوریم.

docker-compose -f docker-compose.yml -f docker-compose.admin.yml \
run dbadmin db-backup

در این بخش با یکی از ویژگی های جالب Compose آشنا شدیم؛ که برای ساخت فایل پیکربندی نهایی، به ما اجازه می دهد از چندین فایل کوچک استفاده کنیم که هر کدام از آنها می توانند سرویس و یا تنظیماتی را به فایل نهایی اضافه کنند و یا تغییر دهند.

همانطور که گفته شد این قابلیت به ما اجازه می دهد یک فایل Compose نوشته شده را در پروژه های مختلف استفاده کنیم. در بخش بعدی قرار است با برچسب extends آشنا بشویم.

 

در بخش نظرات، منتظر خواندن نظرات شما هستم...

 

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