سفارشی کردن پایگاه داده MySQL در داکر — راهنمای کاربردی

۱۲۹ بازدید
آخرین به‌روزرسانی: ۱۸ شهریور ۱۴۰۲
زمان مطالعه: ۴ دقیقه
سفارشی کردن پایگاه داده MySQL در داکر — راهنمای کاربردی

توسعه‌دهندگان زیادی از داکر برای راه‌اندازی یک پایگاه داده محلی استفاده می‌کنند. بدین ترتیب تست کردن کد و نوشتن داده‌ها بدون نصب و پیکربندی ابزارهای زیاد ممکن خواهد بود. در این مقاله، با روش سفارشی کردن پایگاه داده داکر آشنا می‌شویم. همچنین در نوشته «داکر چیست» نیز به معرفی جامع داکر و ارائه راهنمایی برای شروع به کار با آن پرداخته شده است. با این که مراحل کار برای پایگاه داده MySQL توضیح داده می‌شود، اما PostgreSQL نیز روال مشابهی دارد. با ما همراه باشید و یک MySQL سفارشی بسازید که شامل جداول و داده‌های مطلوب شما باشد.

یک مقاله آموزشی جامع دیگر نیز برای آموزش داکر در مجله فرادرس منتشر شده است که مطالعه آن به علاقه‌مندان پیشنهاد می‌شود:

ایجاد اسکریپت‌های SQL

ما اسکریپت‌های SQL خود را ایجاد خواهیم کرد که شامل آن دسته از گزاره‌های SQL هستند که می‌خواهیم روی پایگاه داده خود اجرا کنیم. یک دایرکتوری ایجاد می‌کنیم که در آن کار خواهیم کرد.

ضمناً یک دایرکتوری فرعی ایجاد می‌کنیم که اسکریپت‌های sql. را در آن ذخیره می‌کنیم.

$ mkdir -p ~/my-mysql/sql-scripts
$ cd ~/my-mysql/sql-scripts

ما می‌خواهیم پایگاه داده خود را با یک جدول به نام «کارمندان» (employees) سفارشی‌سازی کنیم. جدول باید شامل یک ردیف با یک کارمند و ستون‌های نام، نام خانوادگی، دپارتمان و ایمیل (first name ،last name ،department و email) باشد.

یک فایل به نام CreateTable.sql بسازید. این فایل شامل گزاره SQL برای ایجاد جدولی به نام employees خواهد بود. ما می‌خواهیم چهار ستون به جدول اضافه کنیم.

1CREATE TABLE employees (
2first_name varchar(25),
3last_name  varchar(25),
4department varchar(15),
5email  varchar(50)
6);

یک فایل به نام InsertData.sql بسازید. این فایل شامل گزاره ما برای درج داده‌ها در جدول employees است.

1INSERT INTO employees (first_name, last_name, department, email) 
2VALUES ('Lorenz', 'Vanthillo', 'IT', 'lvthillo@mail.com');

دستور tree را اجرا کنید تا تأیید شود که دو اسکریپت وجود دارد و در دایرکتوری درستی ذخیره شده است.

1$ cd ~/my-mysql
2$ tree
3└── sql-scripts
4    ├── CreateTable.sql
5    └── InsertData.sql

ایجاد یک ایمیج داکر برای پایگاه داده سفارشی شده MySQL

اکنون که اسکریپت‌ها آماده هستند، می‌توانیم یک Dockerfile بنویسیم تا ایمیج داکر خود را بر مبنای ایمیج رسمی MySQL (+) بسازیم.

$ cd ~/my-mysql/

$ vi Dockerfile

محتوای داکرفایل به صورت زیر است:

# Derived from official mysql image (our base image)
FROM mysql

# Add a database
ENV MYSQL_DATABASE company

# Add the content of the sql-scripts/ directory to your image
# All scripts in docker-entrypoint-initdb.d/ are automatically
# executed during container startup
COPY./sql-scripts/ /docker-entrypoint-initdb.d/

ایمیج داکر خود را بسازید:

$ cd ~/my-mysql/
$ docker build -t my-mysql.
Sending build context to Docker daemon 4.608kB
Step 1/2: FROM mysql
latest: Pulling from library/mysql
Digest: sha256:691c55aabb3c4e3b89b953dd2f022f7ea845e5443954767d321d5f5fa394e28c
Status: Downloaded newer image for mysql:latest
---> 5195076672a7
Step 2/2: ADD sql-scripts/ /docker-entrypoint-initdb.d/
---> 25065c3d93c0
Successfully built 25065c3d93c0
Successfully tagged my-mysql:latest

و کانتینر MySQL خود را از ایمیج بسازید:

$ docker run -d -p 3306:3306 --name my-mysql \
-e MYSQL_ROOT_PASSWORD=supersecret my-mysql

اینک می‌توانیم روال کار را تأیید کنیم. درون کانتینر از exec استفاده خواهیم کرد:

1$ docker exec -it my-mysql bash
2root@c86ff80d7524:/# mysql -uroot -p
3Enter password: (supersecret)
4mysql> show databases;
5+--------------------+
6| Database           |
7+--------------------+
8| information_schema |
9| company            |
10| mysql              |
11| performance_schema |
12| sys                |
13+--------------------+
145 rows in set (0.00 sec)
15mysql> use company;
16Reading table information for completion of table and column names
17You can turn off this feature to get a quicker startup with -A
18Database changed
19mysql> show tables;
20+-------------------+
21| Tables_in_company |
22+-------------------+
23| employees         |
24+-------------------+
251 row in set (0.00 sec)
26mysql> show columns from employees;
27+------------+-------------+------+-----+---------+-------+
28| Field      | Type        | Null | Key | Default | Extra |
29+------------+-------------+------+-----+---------+-------+
30| first_name | varchar(25) | YES  |     | NULL    |       |
31| last_name  | varchar(25) | YES  |     | NULL    |       |
32| department | varchar(15) | YES  |     | NULL    |       |
33| email      | varchar(50) | YES  |     | NULL    |       |
34+------------+-------------+------+-----+---------+-------+
354 rows in set (0.00 sec)
36mysql> select * from employees;
37+------------+-----------+------------+-------------------+
38| first_name | last_name | department | email             |
39+------------+-----------+------------+-------------------+
40| Lorenz     | Vanthillo | IT         | lvthillo@mail.com |
41+------------+-----------+------------+-------------------+
421 row in set (0.01 sec)

چنان که می‌بینید اسکریپت کار می‌کند. بدین ترتیب ما ایمیج داکر پایگاه داده MySQL سفارشی خودمان را داریم. این راه‌حلی عالی برای توسعه محلی بین چند توسعه‌دهنده است. با اشترک ایمیج داکر هر توسعه‌دهنده می‌تواند با شروع کانتینر از ایمیج پایگاه داده مربوطه استفاده کند.

با این وجود، لازم به اشاره است که این راه‌حل همواره هم بهترین راه‌حل نیست:

  • اگر داده‌های زیادی وارد کنید، اندازه ایمیج به مقدار زیادی افزایش خواهد یافت.
  • زمانی که داده‌ها به‌روزرسانی می‌شوند، باید یک ایمیج جدید بسازیم.

به همین دلیل است که روش دیگری برای سفارشی‌سازی MySQL داکر نیز وجود دارد.

استفاده از Bind Mounts برای سفارشی‌ کردن پایگاه داده MySQL در داکر

در بخش آخر، اسکریپت‌ها را درون کانتینر رسمی داکر MySQL سوار می‌کنیم.

$ docker run -d -p 3306:3306 --name my-mysql \
-v ~/my-mysql/sql-scripts:/docker-entrypoint-initdb.d/ \
-e MYSQL_ROOT_PASSWORD=supersecret \
-e MYSQL_DATABASE=company \
Mysql

بدین ترتیب بار دیگر اسکریپت تأیید می‌شود. از همان مراحل که قبلاً اجرا کردیم استفاده می‌کنیم: exec درون کانتینر استفاده می‌شود تا وجود جدول و داده‌ها بررسی شود.

این روش انعطاف‌پذیر است، اما توزیع آن در میان توسعه‌دهنده‌ها کمی دشوارتر خواهد بود. همه توسعه‌دهنده‌ها باید اسکریپت‌ها را در دایرکتوری خاصی در سیستم محلی خود ذخیره کنند و باید در زمان اجرای دستور docker run به یک دایرکتوری خاص اشاره کنند..

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۱ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
better-programming
نظر شما چیست؟

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