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

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

در ابتدا لازم است بدانید که این برچسب در نسخه های جدیدتر Docker Compose حذف شده است. ولی به دلیل اهمیت آن از یک طرف و از سوی دیگر به دلیل اینکه فایل های Compose زیادی را مشاهده خواهد کرد که از این برچسب استفاده کرده اند، ترجیح دادم این روش را هم به طور مختصر در بخش سوم آموزش کاربردی داکر بیاورم.

برچسب extends در Docker Compose، امکان به اشتراک گذاری پیکربندی های مشترک را بین فایل های مختلف یا حتی پروژه های مختلف به طور کامل فراهم می کند. اگر چندین سرویس دارید که از مجموعه مشترکی از گزینه های پیکربندی استفاده می کنند، extend کردن (گسترش دادن) سرویس ها می تواند خیلی مفید باشد. با استفاده از extends، می‌توانید گزینه‌های سرویس مشترک را در یک مکان تعریف کنید و از هر جایی که نیاز شد به آنها دسترسی داشته باشید.

به خاطر داشته باشید که volumes_from و dependent_on ، بین سرویس هایی که از extends استفاده کرده اند به اشتراک گذاشته نمی شوند. این استثناها وجود دارند تا از وابستگی های بین سرویس ها جلوگیری کنند.

چطوری از بچسب extends استفاده کنیم؟

وقتی که سرویسی را در docker-compose.yml تعریف می کنید، می توانید سرویس دیگری را هم برای توسعه ی آن معرفی کنید:

services:
  web:
    extends:
      file: common-services.yml
      service: webapp

این فایل به Compose دستور می دهد که از پیکربندی سرویس webapp که در فایل common-services.yml تعریف شده است، استفاده کند. فایل common-services.yml به صورت زیر است:

services:
  webapp:
    build: .
    ports:
      - "8000:8000"
    volumes:
      - "/data"

در این حالت، شما دقیقا همان نتیجه ای را می گیرید که در زیر مجموعه ی سرویس web در docker-compose.yml، همین برچسب های ports ،build و volumes را تعریف کنید.

و شما می توانید پیکربندی های بیشتری را در فایل docker-compose.yml بنویسد:

services:
  web:
    extends:
      file: common-services.yml
      service: webapp
    environment:
      - DEBUG=1
    cpu_shares: 5

  important_web:
    extends: web
    cpu_shares: 10

و البته می توانید سرویس های دیگری را هم به آن اضافه کنید و سرویس web را به آنها متصل کنید.

services:
  web:
    extends:
      file: common-services.yml
      service: webapp
    environment:
      - DEBUG=1
    cpu_shares: 5
    depends_on:
      - db
  db:
    image: postgres

مثالی از استفاده ی برچسب extends

گسترش یک سرویس، زمانی مفید است که چندین سرویس دارید و این سرویس ها دارای یک پیکربندی مشترک هستند. مثال زیر یک Compose با دو سرویس برنامه وب و queue worker (سرویس مدیریت صف) است. هر دو سرویس از یک کد استفاده می کنند و بسیاری از گزینه های پیکربندی شان مشترک است.

در فایل common.yml تنظیمات و پیکربندی های مشترک را تعریف می کنیم:

services:
  app:
    build: .
    environment:
      CONFIG_FILE_PATH: /code/config
      API_KEY: xxxyyy
    cpu_shares: 5

در فایل docker-compose.yml هم، سرویس ها را به صورت مجزا تعریف می کنیم:

services:
  webapp:
    extends:
      file: common.yml
      service: app
    command: /code/run_web_app
    ports:
      - 8080:8080
    depends_on:
      - queue
      - db

  queue_worker:
    extends:
      file: common.yml
      service: app
    command: /code/run_worker
    depends_on:
      - queue

 

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

در قسمت بعدی می خواهم، قوانینی که Docker Compose برای ادغام فایل ها و دستورهایی که داده اید استفاده می کند را معرفی کنم...

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