نحوه ساخت ایمیج سفارشی MySql در داکر

فیلم کامل این مقاله در کانال youtube بنده موجود هست.

https://youtu.be/wz6vG3eE7u4


· داکرایز کردن ساختار دیتابیس و دادهای پروژه

· ایجاد کردن کاربر دیتابیس

· اتصال به کانتینر با نرم افزار MySql Wrokbench از بیرون داکر.

در این مقاله داکر و یا دیتابیس را مورد برسی قرار نمیدهیم، هدف مقاله داکرایز کردن یک دیتابیس می باشد.

ابتدا سعی میکنیم یک دیتابیس ساخته و بعد ساختن، کل ساختار و دیتاهای جداول را در یک فایل خروجی بگیریم، برای این کار از اخرین نسخه مای اسکیول ال و ورک بنج استفاده میکنیم.

با دستور زیر از آخرین نسخه مای اسکیول موجود در داکر هاب یک کانتینر می سازیم و بعد سعی میکینم با ورک بنج بهش وصل بشیم و دیتابیسی داخلش ساخته و خروجی بگیریم ازش.

docker run --name default_db -d -e MYSQL_ROOT_PASSWORD=123 -p 3306:3306 mysql:latest

بعد ساخت کانتینر سعی میکنیم با نرم افزار MySql Workbench بهش وصل بشیم. از لینک زیر آخرین نسخه ورک بنچ را میتوانید دانلود کنید.

https://dev.mysql.com/downloads/workbench/

بعد نصب و اجرا کردن ورک بنچ یک کانکشن به کانتینر میسازیم مثل تصویر زیر.

اضافه کردن یک کانکشن جدید
اضافه کردن یک کانکشن جدید

در قسمت کانکشن یک اسم داده و مشخصات کانتینر را وارد میکنیم، پسور 123 برای یوزر روت را داده و از لوکال هاست با پورت 3306 وصل می شویم.

ساخت کاکشن به کانتینر داکر
ساخت کاکشن به کانتینر داکر

بعد اتصال یک دیتابیس با نام testdb میسازیم.

ایجاد دیتابیس فیک
ایجاد دیتابیس فیک

یک جدول به اسم users میسازیم و یکسری دیتای فیک داخل جدود وارد میکنیم.

ساخت جدول users
ساخت جدول users
وارد کردن دیتای فیک به جدول users
وارد کردن دیتای فیک به جدول users


بعد ساخت دیتابیس و ایجاد جدول و اضافه کردن دیتای فیک از این دیتابیس همراه با ساختار و دیتاهای جدول یه خروجی در قالب فایل اسکریپتی میگیریم.

اسکپورت دیتابیس در فایل testdb
اسکپورت دیتابیس در فایل testdb

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

داکرایز دیتابیس و ساخت ایمیج سفارشی.

ابتدا یک فایل متنی به اسم Dockerfile ایجاد میکینم، نام حساس به حروف بزرگ و کوچک میباشد، فایل باید بدون هر پسوندی باشد. من از Visual Studio Code استفاده میکنم شما می توانید از هر ادیتوری استفاده بکنید.

نکته: فایل داکر و فایل اسکریپت دیتابیس باید هر دو در یک مسیر باشند.

FROM mysql:latest

ENV MYSQL_ROOT_PASSWORD 123

ENV MYSQL_DATABASE testdb

ENV MYSQL_USER my_user

ENV MYSQL_PASSWORD 1234

ADD testdb.sql /docker-entrypoint-initdb.d

EXPOSE 3306

سطر یکم: بیس ایمیج رو مشخص میکینم، تگ latest آخرین نسخه MySql موجود در Docker Hub رو استفاده خواهد کرد.

سطر دوم:با تعریف این Environment به یوزر روت پسورد ست کرده و در نتیجه دسترسی به دیتابیس از بیرون به کاربر روت باز میشود.

سطر سوم: با تعریف این Environment دیتابیسی به اسم tsetdb ایجاد میشود، دقت کنید داخل فایل اسکریپت، قطعه کد CREATE DATABASE IF NOT EXISTS testdb نوشته شده یعنی اگر سطر سوم از داکر فایل نوشته نشود اسکریپت خودش دیتابیس رو اگر نباشد خواهد ساخت. دقت داشته باشید داخل اسکریپت بعد دستور ساخت دیتابیس USE testdb نوشته شده باشد.

این دو خط اول فایل اسکریپ باید موجود باشد
این دو خط اول فایل اسکریپ باید موجود باشد

سطر چهارم: با تعریف این Environment یک یوزر به اسم my_user ساخته خواهد شد.

سطر پنجم: با تعریف این Environment پسورد my_user ست شده و در نهایت فعال خواهد بود.

سطر شیشم: با دستور ADD فایل اسکریپتی که از دیتابیس خروجی گرفتیم رو به ایمیچ اضافه میکینم.

سطر هفتم: با دستور EXPOSE پورتی که کانتینر مای اسکیوال روی اون باید اجرا شود را مشخص میکینم.

فایل را در کنار فایل اسکریپت ذخیره کرده و از پاور شل به همان مسیر وارد بشید.

وارد مسیر فایل ها شدن.
وارد مسیر فایل ها شدن.

نکته:ابتدا کانتینر قبلی را با دستور Docker rm defult_db --force پاک میکنیم.

با دستور زیر داکر فایل را بیلد میکینم.

docker build -t custom_mysql_image .

بعد بیلد شدن از ایمیج بیلد شده یک کانتینر با دستور زیر میسازیم.

docker run --name customdb -p3306:3306 -d custom_mysql_image

در این مرحله دیتابیس داکرایز شده و یک کانتینر ازش ساخته شده. حال میتوانیم با MySql Workbench متصل شده به شکلی که در بالا گفته شد و دیتابیس را داخل آن مشاهده کرد.

موفق و پیروز باشید.