اجرای nginx توسط Docker Compose

اجرای nginx توسط Docker Compose

در قسمت قبل یک dockerfile برای nginx ایجاد کردیم اما این فایل برای اجرای یک برنامه لاراولی کافی نیست. سرویس های PHP ،Redis ،MySQL و ابزار هایی مثل composer و... هم به کانتینر نیاز دارند. مدیریت همه این کانتینر ها در کنار هم کار سختی است. به همین دلیل ابزاری به اسم docker compose وجود دارد. compose ابزاری  است که برای مدیریت و تعریف برنامه های چند کانتینری استفاده می شود. compose از یک فایل yml استفاده میکند تا بتوانیم کانتینر هایی که نیاز داریم به همراه دستور هایی برای ساخت، اجرا و مدیریت آن ها مشخص کنیم.

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

ابتدای این فایل باید نسخه ای از compose که می خواهیم استفاده کنیم را مشخص کنیم. در حال حاضر آخرین نسخه 3.8 است و ما از این نسخه استفاده می کنیم.

version ‘3.8’

در قدم بعدی باید لیستی از سرویس ها بسازیم. هر سرویس یک کانتینر جدا است که ایمیج (image)، پورت (port) و volume های خودش را دارد. ابتدا با سرویس nginx شروع می کنیم.

nginx:

زیر برچسب nginx می توانیم مشخص کنیم که این سرویس با کدام ایمیج ساخته شود. اگر برای تعریف ایمیج از برچسب image استفاده کنیم آن ایمیج به صورت مستقیم از داکر هاب گرفته می شود.

nginx:
  image: nginx:stable-alpine

از آن جایی که ما یک image شخصی سازی شده برای nginx درست کرده ایم، می خواهیم از همان استفاده کنیم. برای این کار به جای image، برچسب build را به کار می بریم و در زیر مجموعه build برچسب context را تعریف می کنیم تا مسیری که dockerfile مان قرار دارد را مشخص کنیم. از آن جایی که ایمیج ما در همان مسیری قرار دارد که فایل compose هست، با نوشتن . به داکر می فهمانیم که dockerfile در همین مسیر قرار دارد. زیر برچسب context هم از برچسب dockerfile استفاده می کنیم تا نام dockerfile را مشخص کنیم. برای این که همه چیز واضح تر شود اسم dockerfile مان را به nginx.dockerfile تغییر می دهیم:

version: ‘3.8’
 services:
   nginx:
     build:
       context: .
       dockerfile: nginx.dockerfile

 زیر برچسب build از برچسب ports استفاده می کنیم تا لیستی از پورت هایی که می خواهیم از سیستم خودمان به کانتینر وصل کنیم را بنویسیم. در حال حاضر ما فقط پورت 80 را نیاز داریم.

  version: ‘3.8’
 services:
   nginx:
     build:
       context: .
       dockerfile: nginx.dockerfile
     ports:
        - 80:80

برچسب بعدی volumes است که توسط آن لیستی از مسیر هایی که می خواهیم کانتینر در سیستم ما به آن دسترسی داشته باشد را تعریف می کنیم:

  version: ‘3.8’
 services:
   nginx:
     build:
        context: .
       dockerfile: nginx.dockerfile
     ports:
        - 80:80
      volumes:
        - ./src:/var/www/html/public

تعریف سرویس nginx به پایان رسید. آن را اجرا می کنیم تا نتیجه را مشاهده کنیم.  برای اجرا کافی است در مسیر پروژه دستور docker compose up را بنویسیم.

این دستور به سراغ هر سرویسی که در فایل docker-compose تعریف کرده ایم می رود و با ایمیج آن، کانتینری با پورت، volume و هر ویژگی تعریف شده دیگری برای ما ایجاد می کند.

همانطور که می بینید خروجی کانتینر nginx در کنسول قرار می گیرد.

در قسمت بعدی سرویس MySQL را به فایل docker-compose اضافه خواهیم کرد.

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