قصد داریم به روشی ساده نحوه استفاده از داکر کامپوز فایل و استفاده از فرمان docker-compose را توضیح دهیم. بصورت خلاصه و جهت مرور، docker-compose  یک ابزار جهت اجرای دسته ای از کانتینرهاست که فرآیند اجرا شدن کانتنیرها، بر اساس دستورالعمل هایی که در فایل docker-compose.yml ذخیره می شود صورت می پذیرد. (البته این ابزار از فایلی با فرمت json نیز پیشتیبانی می کند که در پایان به آن اشاره شده است.)جهت روشن شدن موضوع، فرض کنید تعدادی کانتینر را جهت اجرای یک اپلیکشن خاص بایستی اجرا کنید. در این سناریو، قصد داریم اپلیکشنهای وب سرور Nginx و بانک اطلاعاتی mysql  را در قالب دو کانتینر مجزا اجرا کرده و سپس به تست عملکرد آنها بپردازیم.

در نظر داشته باشید، شیوه اجرای کانتینرها در این مثال، ایجاد کامپوزفایل و استفاده از دستور مربوطه می باشد، هرچند که روشهای دیگری نیز جهت اجرای همزمان چند کانتینر نیز وجود دارد.

اجرای کانتینرها با داکر کامپوز تحت فایل yml:

با توجه به اینکه قرار است از داکر کامپوز استفاده کنیم، ابتدا یک فایل پیکربندی با نام docker.compose.yml ایجاد کنید و مطابق دستورالعمل های زیر آنرا ذخیره کنید.  (دستورالعملها و پارامترهای وارد شده بر اساس نوع سرویس و تنظیمات شما می تواند متفاوت باشد)
در این فایل، رمزهای عبور مربوط به بانک اطلاعاتی و حساب کاربری روت از فایهای متنی مجزایی فراخوانی می شود که لازم است آن فایلها با دستور openssl مقداردهی شوند. البته برخی از این روش استفاده نکرده، و مقادیر مربوط به پسوردها را مستقیما در فایل وارد می کنند. 

$ openssl rand -base64 32 > db_password.txt

$ openssl rand -base64 32 > db_root_password.txt

اکنون برای شروع یک فایل با نام docker-compose.yml بسازید و دستورات زیر را در آن وارد و سپس آنرا با پسوند yml ذخیره کنید. درنظر داشته باشید مقادیر وارد شده می تواند با پارامترهای این سناریو متفاوت باشد که این موضوع بستگی به نوع کانتینر شما و تنظیمات آن خواهد داشت.

version: '3.1'
services:
  #Nginx Service
   webserver:
     image: nginx:alpine
     container_name: webserver
     restart: unless-stopped
     ports:
       - "80:80"
       - "443:443"
   #Mysql DB
   db:
     image: mysql:5.7
     container_name: Mysqldb
     restart: unless-stopped
     volumes:
       - db_data:/var/lib/mysql
     ports:
       - "3306:3306"
     environment:
       MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD_FILE: /run/secrets/db_password
     secrets:
       - db_root_password
       - db_password
secrets:
   db_password:
     file: db_password.txt
   db_root_password:
     file: db_root_password.txt

volumes:
    db_data:

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

$ docker-compose up -d
$ docker-compose ps

در مرحله پایانی و پس از اجرای صحیح کانتینرهای وب سرور و بانک اطلاعاتی می توانید با آنها ارتباط برقرار کرده و از صحت عملکرد آنها اطمینان حاصل نمایید.

$ curl http://localhost

$ docker exec -it Mysqldb mysql -u root -p

اجرای کانتینرها با داکر کامپوز تحت فایل Json:

در ادامه مقاله، با توجه به پشتیبانی Docker-compose از فرمت فایلی json بد ندیدیم تا فرمت پیشنهادی آنرا برای مثال اینجا قرار دهیم. قطعا فرآیند ایجاد و اجرای کانتینر همانند مراحل قبل با فرمت yml بوده و تنها تغییر در ساختار فایل ایجاد شده با پسوند json خواهد بود. 

{
   "version": "3.1",
   "services": {
      "webserver": {
         "image": "nginx:alpine",
         "container_name": "webserver",
         "restart": "unless-stopped",
         "ports": [
            "80:80",
            "443:443"
         ]
      },
      "db": {
         "image": "mysql:5.7",
         "container_name": "Mysqldb",
         "restart": "unless-stopped",
         "volumes": [
            "db_data:/var/lib/mysql"
         ],
         "ports": [
            "3306:3306"
         ],
         "environment": {
            "MYSQL_ROOT_PASSWORD_FILE": "/run/secrets/db_root_password",
            "MYSQL_DATABASE": "wordpress",
            "MYSQL_USER": "wordpress",
            "MYSQL_PASSWORD_FILE": "/run/secrets/db_password"
         },
         "secrets": [
            "db_root_password",
            "db_password"
         ]
      }
   },
   "secrets": {
      "db_password": {
         "file": "db_password.txt"
      },
      "db_root_password": {
         "file": "db_root_password.txt"
      }
   },
   "volumes": {
      "db_data": null
   }
}

کافی است در این مرحله یک فایل با پسوند json ساخته و آنرا با دستور sudo docker-compose -f myapp.json up -d اجرا کنید.

فرستادن دیدگاه


حامیان