افزودن MySQL به فایل Docker Compose

افزودن MySQL به فایل Docker Compose

درقست قبلی، سرویس یا همان کانتینر اول مان را در فایل Docker Compose نوشتیم و از این به بعد، می توانیم از خدمات Compose استفاده کنیم و خیال مان از موارد زیادی راحت باشد. همانطور که از بخش یک برنامه با چند کانتینر (Multi container apps) به خاطر دارید، برنامه ی ما چند کانتینر مختلف داشت (یکی برنامه ی اصلی و دیگری دیتابیس MySQL). در این بخش، وقت آن رسیده است که سرویس MySQL را هم در فایل Compose تعریف کنیم.

همانطور که یادتان هست دستوری که برای این کار در بخش 7-2 داشتیم به شکل زیر بود:

docker run -d \
  --network todo-app --network-alias mysql \
  -v todo-mysql-data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=secret \
  -e MYSQL_DATABASE=todos \
  mysql:5.7

و توضیح داده بودیم که اگر از PowerShell استفاده می کنید باید از دستور زیر بهره ببرید:

PS> docker run -d `
  --network todo-app --network-alias mysql `
  -v todo-mysql-data:/var/lib/mysql `
  -e MYSQL_ROOT_PASSWORD=secret `
  -e MYSQL_DATABASE=todos `
  mysql:5.7

   1. در ابتدا باید به فایل Compose مان سرویس جدیدی را با نام mysql اضافه کنیم. که به صورت خودکار شبکه ای با این نام مستعار (Alias) هم ایجاد خواهد شد.

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

version: "3.7"
 services:
   app:
     # The app service definition
   mysql:
     image: mysql:5.7

برای اینکه کدهای نوشته شده در این بخش از آموزش، فقط برای MySQL باشد و از طرفی با زیاد بودن کدها تمرکزتان خراب نشود، در فایل Compose بخش مربوط به سرویس (کانتینر) app را پاک کردم تا جلوی چشم نباشد. ولی در فایلی که شما درست می کنید لازم نیست آن بخش ها پاک شود. برای همین به جای آن یک comment با متن The app service definition نوشتم.

   2. حالا باید Volume را مشخص کنیم و اتصال حافظه را به این کانتینر برقرار کنیم. همانطور که از آموزش های قبلی یادتان هست، وقتی کانتینر را با دستور docker run اجرا می کنید، Volume به صورت خودکار درست می شود. ولی وقتی از Compose استفاده می کنیم این اتفاق نمی افتد. در نتیجه نیاز است در لایه ای بالاتر (یعنی هم رده با services)، برچسبی با عنوان volumes داشته باشیم و حافظه ی مورد نظرمان را در آن تعریف کنیم. دقت کنید که اتصال بین این volume تعریف شده و محل حافظه، در سرویس مشخص خواهد شد.

نکته: اگر فقط نام حافظه (volume) را مشخص کنید، می توانید از تنظیم های پیشفرض تعریف Volume بهره ببرید. ولی امکانات و تنظیمات بیشتری هم می توانید انجام دهید که در بخش های بعدی از همین فصل، به آن ها خواهیم پرداخت.

version: "3.7"
 services:
   app:
     # The app service definition
   mysql:
     image: mysql:5.7
     volumes:
       - todo-mysql-data:/var/lib/mysql
 volumes:
   todo-mysql-data:

همانطور که مشاهده می کنید یک برچسب سطح بالا، با عنوان volumes داریم که در آن نامی برای volume مشخص کرده ایم و یک برچسب هم با عنوان volumes در سرویس mysql تعریف کردیم که نقطه ی اتصال این حافظه با پوشه بندی روی هارد را مشخص می کند.

   3. در مرحله ی آخر فقط نیاز است که متغیرهای محیطی را تعریف کنیم.

version: "3.7"
 services:
   app:
     # The app service definition
   mysql:
     image: mysql:5.7
     volumes:
       - todo-mysql-data:/var/lib/mysql
     environment:
       MYSQL_ROOT_PASSWORD: secret
       MYSQL_DATABASE: todos
 volumes:
   todo-mysql-data:

در این مرحله باید فایل کامل شده ی docker-compose-yml مان به شکل زیر تبدیل شده باشد:

version: "3.7"
services:
  app:
    image: node:12-alpine
    command: sh -c "yarn install && yarn run dev"
    ports:
      - 3000:3000
    working_dir: /app
    volumes:
      - ./:/app
    environment:
      MYSQL_HOST: mysql
      MYSQL_USER: root
      MYSQL_PASSWORD: secret
      MYSQL_DB: todos
  mysql:
    image: mysql:5.7
    volumes:
      - todo-mysql-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: todos
volumes:
  todo-mysql-data:

در قسمت بعدی یاد می گیریم چطور کل برنامه مان را از روی فایل compose بالا بیاوریم.

درصورتی که سوال یا نظری داشتید، ممنون میشم از طریق بخش نظرات با من درمیان بذارید.

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

دوست گرامی شما به عنوان کاربر میهمان در سایت سکان آکادمی حضور دارید لطفاً برای ارسال دیدگاه ابتدا وارد حساب خود شوید