MySQL، یک سیستم مدیریت پایگاه داده رابطه‌ای منبع باز معروف و محبوب برای وب سرور است. این پایگاه داده، داده‌ها را به شیوه‌ای معنی‌دار ذخیره کرده و ساختار می‌دهد و دسترسی آسان را تضمین می‌نماید.

Docker، مجموعه‌ای از محصولات بصورت platform-as-a-service است که از توسعه CI/CD پشتیبانی می‌کند. Docker به کاربران اجازه می‌دهد، برنامه‌هایی را در محیط‌های مجازی که container نامیده می‌شوند، توسعه داده و به کار ببرند. با یک image واحد، Docker می‌تواند، یک برنامه را با همه کتابخانه‌ها و وابستگی‌های آن راه‌اندازی کند.

در این آموزش، نحوه استقرار MySQL Docker container و نحوه شروع کار با پایگاه داده کانتینری شده آموزش داده شده است.

 

به منظور دنبال کردن این آموزش به موارد زیر نیاز خواهید داشت:

  • دسترسی به خط فرمان/پنجره ترمینال
  • یک حساب کاربری با امتیازات sudo یا دسترسی به حساب root
  • یک Docker نصب شده

 

اجرای MySQL Docker Container

چنانچه می‌خواهید پایگاه داده را سریع و بدون استفاده از منابع زیاد تنظیم کنید، استقرار MySQL در یک container، یک راه حل سریع و کارآمد است. این راه حل تنها برای برنامه‌های کوچک و متوسط مناسب است و برای برنامه‌های کاربردی در سطح سازمانی، MySQL Docker container مناسب وجود ندارد.

استفاده از نرم افزار Docker به منظور راه‌اندازی پایگاه داده به طور فزاینده‌ای در برنامه‌های مقیاس کوچک محبوب شده است؛ چراکه به جای داشتن سرور جداگانه برای میزبانی پایگاه داده، شما می‌توانید یک container پایگاه داده MySQL را مستقر نمایید.

چندین container می‌تواند برروی رایانه شما اجرا شود. containerها هسته و کتابخانه‌های میزبان یکسانی را به اشتراک می‌گذارند؛ اما برنامه یا نرم افزار مستقر را در واحدهای مجزا بسته بندی می‌کنند. این باعث می‌شود پایگاه داده فوق العاده سبک بوده و سرعت بالایی داشته باشد.

 

این مطلب نیز ممکن است برای شما مفید باشد: نحوه راه اندازی Laravel ،Nginx و MySQL با Docker Compose

 

نصب MySQL Docker Container

راه‌اندازی یک پایگاه داده در Docker به سادگی ایجاد یک container مبتنی بر MySQL image است. به منظور راه‌اندازی و اجرای MySQL container، مراحل زیر را دنبال نمایید.

توجه: در اینجا فرض کرده‌ایم که Docker را در سیستم خود دارید.

 

مرحله 1: دریافتMySQL Docker Image  

1. با دریافت Docker image مناسب برای MySQL شروع کنید. شما می‌توانید نسخه مورد نظر را بارگیری نمایید یا آخرین نسخه را مطابق دستور زیر دریافت کنید:

sudo docker pull mysql/mysql-server:latest

اگر می‌خواهید نسخه خاصی از MySQL را داشته باشید، latest داخل دستور را با شماره نسخه مورد نظر جایگزین نمایید.

 

2. با لیست کردن imageهای بارگیری شده Docker، تأیید کنید که image اکنون به صورت محلی ذخیره شده است:

sudo docker images

خروجی باید شامل mysql/mysql-server در بین imageهای ذکر شده باشد.

 

مرحله 2: استقرار MySQL Container

1. هنگامی‌که مطمئن شدید که image را دارید، با استفاده از دستور زیر یک container جدید MySQL استقرار نمایید:

sudo docker run --name=[container_name] -d [image_tag_name]

[container_name] را با نام دلخواه خود جایگزین کنید. اگر نامی ارائه ننمایید، docker یک نام تصادفی ایجاد می‌کند.

گزینه d- به docker دستور می‌دهد، container را به عنوان یک سرویس در پس زمینه اجرا کند.

نام image بارگیری شده در مرحله 1 را جایگزین [image_tag_name] نمایید.

در این مثال، ما یک container به نام mysql_docker با برچسب نسخه latest ایجاد می‌کنیم:

sudo docker run --name=[container_name] -d mysql/mysql-server:latest

2. سپس، با استفاده از دستور زیر بررسی نمایید که آیا MySQL container در حال اجرا است:

docker ps

شما باید container تازه ایجاد شده را در خروجی مشاهده کنید. خروجی شامل جزئیات container است که یکی از آن‌ها، وضعیت این محیط مجازی است. وضعیت، پس از اتمام راه‌اندازی، از health:starting تا healthy تغییر می‌کند.

 

مرحله 3: اتصال به MySQL Docker Container

1. قبل از اینکه بتوانید container سرور MySQL را به میزبان متصل نمایید، باید با استفاده از دستور زیر مطمئن شوید که بسته کلاینت MySQL نصب شده است:

apt-get install mysql-client

2. سپس، فایل logs را برای MySQL container باز کنید تا رمز اصلی ایجاد شده را بیابید:

sudo docker logs [container_name]

برای container مربوط به mysql_docker، باید دستور زیر را اجرا نمایید:

sudo docker logs mysql_docker

3. در خروجی حرکت کرده و خط [Entrypoint] GENERATED ROOT PASSWORD را پیدا نمایید، رمز عبور را در یک دفترچه یادداشت یا ویرایشگر متن کپی و جایگذاری کنید تا بعداً از آن استفاده نمایید.

 

4. سپس، با تایپ کردن دستور زیر به پوسته bash مربوط به MySQL container بروید:

sudo docker exec -it [container_name] bash

به عنوان مثال برای container ایجاد شده کافیست دستور زیر را اجرا کنید:

sudo docker -it mysql_docker bash

5. در صورت درخواست از شما، رمز عبور root را که از فایل logs کپی کرده‌اید، ارائه دهید. با این کار، کلاینت MySQL به سرور متصل می‌شود.

 

6. در نهایت، رمز عبور root سرور را برای محافظت از اطلاعات خود تغییر دهید:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '[newpassword]';

[newpassword] را با یک رمز عبور قوی انتخابی خود جایگزین نمایید.

 

پیکربندی MySQL Container

هنگامی‌که یک MySQL container را نصب می‌کنید، گزینه‌های پیکربندی آن را در دایرکتوری /etc/mysql/my.cnf پیدا خواهید کرد.

در صورت نیاز به تغییر پیکربندی، یک فایل پیکربندی جایگزین در دستگاه میزبان ایجاد کرده و آن‌ها را داخل container بصورت mount قرار دهید.

1. ابتدا یک دایرکتوری جدید روی دستگاه میزبان ایجاد کنید:

sudo mkdir -p /root/docker/[container_name]/conf.d

2. یک فایل پیکربندی MySQL سفارشی در داخل آن دایرکتوری ایجاد نمایید:

sudo nano /root/docker/[container_name]/conf.d/my-custom.cnf

3. پس از ورود به فایل، خطوط مربوط به پیکربندی مورد نظر خود را اضافه کنید.

به عنوان مثال، اگر می‌خواهید حداکثر تعداد اتصالات را به 250 (به جای 151 پیش فرض) افزایش دهید، خطوط زیر را به فایل پیکربندی اضافه نمایید:

[mysqld]
max_connections=250

 

4. فایل را ذخیره کرده و از آن خارج شوید.

5. به منظور اعمال تغییرات، باید MySQL container را حذف کرده و مجدداً اجرا نمایید. این بار، container از ترکیبی از تنظیمات پیکربندی از فایل تازه ایجاد شده و فایل‌های پیکربندی پیش فرض استفاده می‌کند.

برای انجام این کار، container را اجرا کرده و مسیر volume را با دستور زیر نگاشت نمایید:

docker run \
--detach \
--name=[container_name] \
--env="MYSQL_ROOT_PASSWORD=[my_password]" \
--publish 6603:3306 \
--volume=/root/docker/[container_name]/conf.d:/etc/mysql/conf.d \
mysql

6. به منظور اطمینان از اینکه container پیکربندی را از میزبان بارگیری کرده است، دستور زیر را اجرا کنید:

mysql -uroot -pmypassword -h127.0.0.1 -P6603 -e 'show global variables like "max_connections"';

در خروجی باید مشاهده کنید که حداکثر تعداد اتصالات در حال حاضر 250 است.

 

مدیریت ذخیره سازی داده‌ها

به طور پیش فرض، docker داده‌ها را در volume داخلی خود ذخیره می‌کند.

برای بررسی موقعیت volumeها می‌توانید از دستور زیر استفاده نمایید:

sudo docker inspect [container_name]

همانطور که مشاهده می‌کنید /var/lib/mysql در volume داخلی mount شده است.

 

شما می‌توانید مکان دایرکتوری داده‌ها را نیز تغییر داده و یکی در میزبان ایجاد نمایید. داشتن volume در خارج از container به دیگر برنامه‌ها و ابزارها اجازه می‌دهد تا در مواقع نیاز به volumeها دسترسی پیدا کنند.

1. ابتدا، یک volume مناسب در میزبان پیدا کرده و یک دایرکتوری داده روی آن ایجاد نمایید:

sudo mkdir -p /storage/docker/mysql-data

2. اکنون container را مجدداً راه‌اندازی کرده و دایرکتوری ساخته شده را mount نمایید:

docker run \
--detach \
--name=[container_name] \
--env="MYSQL_ROOT_PASSWORD=my_password" \
--publish 6603:3306 \
--volume=/root/docker/[container_name]/conf.d:/etc/mysql/conf.d \
--volume=/storage/docker/mysql-data:/var/lib/mysql \
mysql

اگر container را بررسی می‌کنید، باید مشاهده کنید که MySQL container اکنون داده‌های خود را روی سیستم میزبان ذخیره می‌کند. بدین منظور دستور زیر را اجرا نمایید:

sudo docker inspect [container_name]

 

شروع، توقف و راه‌اندازی مجدد MySQL Container

هنگامی‌که فرآیند در حال اجرایی در container متوقف می‌شود، container به طور خودکار متوقف می‌شود.

برای راه‌اندازی MySQL container دستور زیر را اجرا کنید:

sudo docker start [container_name]

به منظور متوقف سازی MySQL container از دستور زیر استفاده نمایید:

sudo docker stop [container_name]

برای راه‌اندازی مجدد MySQL container دستور زیر را اجرا کنید:

sudo docker restart [container_name]

 

حذف MySQL container

قبل از حذف MySQL container، مطمئن شوید که ابتدا آن را متوقف کرده‌اید.

سپس، با استفاده از دستور زیر docker container را حذف نمایید:

sudo docker rm [container_name]

 

 

 

منبع:

phoenixnap