اجرا سرور MariaDB روی داکر کانتینر

اجرا سرور MariaDB روی داکر کانتینر

مزیت داکر اجرا Mariadb در داکر
مدیریت سرور

اجرا سرور MariaDB روی داکر کانتینر

اجرای دیتابیس در کانتینر از نظر سرعت راه‌اندازی، سادگی استقرار و یکسان بودن محیط توسعه تا اجرا مزیت‌های مهمی دارد. با Docker می‌توان MariaDB یا هر دیتابیس دیگری را در چند دقیقه با نسخه مشخص بالا آورد، وابستگی‌ها را کنترل کرد و بدون درگیر شدن با نصب مستقیم روی سیستم‌عامل، محیطی قابل تکرار ساخت. این موضوع مخصوصاً برای توسعه، تست، CI/CD و حتی برخی سناریوهای عملیاتی بسیار مفید است، چون جابه‌جایی بین سرورها یا بازتولید همان محیط روی سیستم دیگر ساده‌تر می‌شود. همچنین مدیریت نسخه‌ها، ایزوله‌سازی سرویس‌ها و حذف و ایجاد سریع کانتینرها باعث می‌شود نگهداری زیرساخت منظم‌تر و پیش‌بینی‌پذیرتر باشد.

در مقابل، اجرای دیتابیس در کانتینر همیشه بهترین انتخاب نیست و اگر بدون توجه به ذخیره‌سازی پایدار، بکاپ، مانیتورینگ و تنظیمات I/O انجام شود، می‌تواند ریسک از دست رفتن داده یا افت کارایی ایجاد کند. دیتابیس‌ها ذاتاً به دیسک، پایداری، latency پایین و رفتار قابل پیش‌بینی سیستم وابسته‌اند و لایه کانتینر اگر درست طراحی نشود، پیچیدگی بیشتری به مدیریت volume، permission، networking و recovery اضافه می‌کند. در محیط production نیز باید دقت کرد که کانتینری شدن به‌تنهایی مزیت قطعی برای دیتابیس نیست؛ اگر تیم تجربه کافی در مدیریت stateful workload نداشته باشد، اجرای مستقیم روی سرور یا استفاده از سرویس‌های مدیریت‌شده گاهی انتخاب امن‌تر و کم‌هزینه‌تری است. به همین دلیل، کانتینر برای دیتابیس زمانی بهترین نتیجه را می‌دهد که همراه با طراحی درست ذخیره‌سازی، سیاست بکاپ، محدودیت منابع و راهکار بازیابی استفاده شود.

نقش داکر کانتینر در مدیریت منابع

به خوبی میدانیم که مهمترین مزیت داکر در هنگام محدودیت منابع مدیریت صحیح مصرف رم، مصرف IO یا پردازنده است. شما میتوانید هر زمان میخواهید داکر کانیتنر اجرا کنید با سوئیچ -m محدودیت مصرف رم اعمال کنید. مثلا اگر بنویسید docker run -m 512m برنامه اجرا شده هرچه که باشد اجازه ندارد بیشتر از 512 مگابایت رم مصرف کند. البته همواره اعمال محدودیت روی منابع باید دقیق انجام شود تا مانع اختلال باشد مثلا کمتر از دو گیگابایت رم برای دیتابیس تحت بار منطقی نیست.

چطور با داکر MariaDB اجرا کنم؟

اگر بخواهید بدون هیچ ارکستریتوری بصورت خالص ماریا دی را روی داکر کانتینر داشته باشید با از این دستور بهره بگیرید:

docker run -d –name mariadb -e MARIADB_ROOT_PASSWORD=strongpassword -e MARIADB_DATABASE=mydb -e MARIADB_USER=myuser -e MARIADB_PASSWORD=mypassword -p 3306:3306 -v mariadb_data:/var/lib/mysql mariadb:latest

در دستور فوق ما یک سرور دیتابیس ایجاد کردیم البته فراموش نکنید که نسخه پیشفرض mariadb در واقع آخرین نسخه stable در نظر گرفته خواهد شد پس اگر نسخه خاصی در نظر دارید بجای latest باید جایگذاری کنید. لازم است که 4 متغیر اصلی را ارائه کنیم، این موارد با -e در دستور مشخص هستند.

  • MARIADB_ROOT_PASSWORD پسورد روت دیتابیس
  • MARIADB_DATABASE نام دیتابیس پیشفرض که ساخته میشود
  • MARIADB_USER نام یوزری که روی دیتابیس پیشفرض دسترسی خواهد داشت
  • MARIADB_PASSWORD پسورد یوزری که روی دیتابیس پیشفرض دسترسی خواهد داشت.

با سوئیچ -v یک Volume ساختیم که البته الزام و اجباری در ساخت آن نیست اما در واقع از کانیتنر میخواهیم همه داده ها و فایل های مرتبط با دیتابیس ها را در مسیر معینی ذخیره بکند که دسترسی آن از سرور میزبان هم ممکن باشد. در واقع اینکار کمک میکند تا فایلها وابسته به کانتینر نباشند و با از بین بردن کانتینر امکان دسترسی به فایلها جهت بازیابی باشد.

*** معمولا نسخه های غیر Stable مثلا نسخ Rolling در داکرهاب بصورت رسمی عرضه نمیشوند که بتوانید از آنها بهره بگیرید اما تقریبا تمام نسخ Stable مثل 10.6 یا 11.8 در دسترس هستند.

همواره توصیه بر این است که از Docker compose به عنوان ارکستریتور بهره بگیریم تا مدیریت بهتری روی کانتینر داشته باشیم. برای اینکار فقط نیاز است همان پارامتر ها در فایل docker-compose.yml ذخیره شوند. مثال:

services:
mariadb:
image: mariadb:11
container_name: mariadb
restart: unless-stopped
environment:
MARIADB_ROOT_PASSWORD: strongpassword
MARIADB_DATABASE: mydb
MARIADB_USER: myuser
MARIADB_PASSWORD: mypassword
ports:
– “3311:3306”
volumes:
– mariadb_data:/var/lib/mysql

volumes:
mariadb_data:

در مثال بالا ما پورت 3311 سرور را بجای 3306 اساین کردیم به این ترتیب میتوانید کانتینرهای متعدد از Mariadb روی یک سرور داشته باشیم که همه در فضای ایزوله خودشان روی 3306 شنود میکنند اما به ترافیک خارجی روی پورت دیگری مثل 3311 سرویس میدهند.

چطور تنظیمات Mariadb را در کانتینر تغییر دهم؟

به خوبی میدانیم که تنظیمات Mariadb در یک فایل به نام my.cnf است (ممکن است در بعضی نسخه ها نام دیگری داشته باشد) شما میتوانید با اتصال به ترمینال کانتینر آنرا تغییر دهید اما بهتر است هنگام ساخت آنرا تزریق نماییم. به این منظور باید فایل my.cnf دلخواه را در همان دایرکتوری که فایل yml را ساختیم بسازیم سپس فایل docker-compose.yml را اینطور تغییر دهیم:

services:
mariadb:
image: mariadb:11
container_name: mariadb
restart: unless-stopped
environment:
MARIADB_ROOT_PASSWORD: strongpassword
MARIADB_DATABASE: mydb
MARIADB_USER: myuser
MARIADB_PASSWORD: mypassword
ports:
- "3312:3312"
volumes:
- mariadb_data:/var/lib/mysql
- ./my.cnf:/etc/mysql/conf.d/my.cnf:ro

volumes:
mariadb_data:

در انتها با اجرای دستور زیر کانتینر اجرا خواهد شد.

docker compose up -d

سوال: چرا بعد از mycnf واژه ro نوشته شده؟

واژه ro به معنای ReadOnly است یعنی چنانچه به هر دلیلی کانتینر ما هک شد یا ترمینال آن در اختیار نفوذگر قرار گرفت اون امکان تغییر تنظیمات پایه Mariadb را نداشته باشد! باید بدانیم که گاهی آسیب پذیری ها نه در سطح سرویس بلکه در سطح بستر داکر یا ایمیج اتفاق میفتد پس باید حتما جوانب احتیاط را در نظر گرفت.

دیدگاه خود را اینجا بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

فیلدهای دلخواه برای نمایش را انتخاب کنید. سایر فیلدها مخفی می شود. برای ترتیب دلخواه فیلدها را به محل دلخواه بکشید و رها کنید.
  • عكس
  • شناسه محصول
  • امتیاز
  • قیمت
  • موجودی
  • موجودی
  • افزودن به سبد خرید
  • توضیحات
  • محتوا
  • وزن
  • ابعاد
  • اطلاعات تکمیلی
برای مخفی شدن نوار مقایسه، بیرون از کادر کلیک کنید
مقایسه