איך להריץ מסד נתונים של MySQL בתוך תוכנת Docker

שימוש במסד נתונים מקומי ממוסמר מספק גמישות ומפשט את ההקמה. הוא מאפשר העתקה קרובה של סביבות ייצור ללא המורכבות של התקנות בסיס נתונים מסורתיות. Docker מקל על תהליך זה, והופך את התקנת, הניהול והמידרוג של בסיסי נתונים בקונטיינרים מבודדים לפשוט מאוד, עם כמה פקודות בלבד.

במדריך זה, תלמד איך:

  • להריץ בסיס נתונים ממוסר מקומי
  • להגיע לשלדה של בסיס נתונים ממוסר
  • להתחבר לבסיס נתונים ממוסר מהמארח
  • לשמור נתוני בסיס נתונים בתקן
  • לנקות את המעבדה

תנאימוקדמים

לכדי המדריך זה, עליך להתקין Docker. להוראות התקנה, יש להתייחס לאתר של Docker. 

מדריך שלב-אחר-שלב להקמת בסיסי נתונים ממוסרים

1. הריצת בסיס נתונים ממוסר מקומי

רוב מערכות הבסיסים הפופולריות, כגון MySQL، PostgreSQL ו־MongoDB יש תמונות Docker רשמיות זמינות ב Docker Hub. התמונות האלה נבחרו לפי נוהלי הטובה ביותר, כדי להבטיח שיהיה לך גישה למשימות האחרונות ולעדכוני ביטחון. 

להתחיל, בקר ב Docker Hub וחפש את הבסיס שאתה מתעניין בו. דף התמונה של כל אחת מספק תשאולים מפורטים על איך להריץ את הקונטיינר, להתאים את ההגדרות ולהכניס את הבסיס לפי הצרכים שלך. למידע נוסף על תמונת MySQL בהדרכה זו, התייחס לדף של תמונת MySQL ב Docker Hub.

להריץ קונטיינר של בסיס, אתה יכול להשתמש או ב GUI של Docker Desktop או ב CLI. להריץ קונטיינר באמצעות CLI, הרץ את הפקודה הבאה במסוף:

Shell

 

$ docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -d mysql:latest

 

בפקודה זו:

  • --name my-mysql מייעד את השם my-mysql לקונטיינר שלך לשם התייחסות קלה יותר.
  • -e MYSQL_ROOT_PASSWORD=my-secret-pw שקול להגדרת סיסמת השורש (root) עבור MySQL להיות my-secret-pw. החליפו my-secret-pw בסיסמה בטוחה לפי בחירתכם.
  • -e MYSQL_DATABASE=mydb יכול ליצור בסיס נתונים בשם mydb. אתם יכולים לשנות mydb לשם בסיס נתונים לפי רצונכם.
  • -d מריץ את הקונטיינר במצב מנותק, כלומר הוא רץ ברקע.
  • mysql:latest מציין שאתם רוצים להשתמש בגרסה החדשה ביותר של תמונת MySQL.

לאימות שהקונטיינר שלכם רץ, הריצו docker ps במסוף:

Shell

 

run docker ps

אתם גם יכולים לבדוק את אותו דבר במסוף של Docker Desktop:

2. נגישות לשלדה של בסיס נתונים מוכלל

כאשר בסיס נתונים רץ בתוך קונטיינר Docker, יתכן שתצטרכו לגשת לשלדה שלו כדי לנהל את בסיס הנתונים, לבצע פקודות או לבצע משימות אדמיניסטרטיביות. Docker מספק דרך פשוטה לעשות זאת באמצעות פקודת docker exec. בנוסף, אתם יכולים להשתמש בממשק הגרפי של Docker Desktop אם תפילו לזה.

אם אין לכם קונטיינר של בסיס נתונים שרץ כרגע, יילכו להריצת בסיס נתונים מקומי מוכלל. לגישה למסוף של קונטיינר MySQL באמצעות CLI, ניתן להשתמש בפקודת docker exec הבאה.

Shell

docker exec -it my-mysql bash 

בפקודה זו:

  • docker exec מודיע לDocker שאתם רוצים לבצע פקודה בקונטיינר שרץ.
  • -it מבטיח שהמסוף אליו אתם מגיעים הוא אינטראקטיבי כך שתוכלו להקליד פקודות לתוכו.
  • my-mysql הוא שם הקונטיינר של MySQL שלך. אם שמת את הקונטיינר בשם אחר כאשר רצית אותו, השתמש בשם הזה במקום.
  • הפקודה שאתה רוצה לרוץ בתוך הקונטיינר היא bash. היא פותחת שלדות Bash שמאפשרת לך להתחבר למערכת קבצים של הקונטיינר וליישומים שהותקנו עליו.
  • לאחר ביצוע הפקודה הזו, תקבל גישה לשלדות Bash בתוך קונטיינר MySQL שלך, ממנו תוכל לנהל את שרת MySQL שלך ישירות. אתה יכול לרוץ Exit כדי לחזור למסוף שלך.

בדוק אם הקונטיינר של Docker רץ.

Shell

 

run docker ps

ברגע שהתחברת למסוף של הקונטיינר, אתה יכול לרוץ כל כלי שזמין בקונטיינר. הדוגמה (תמונה) הבאה מראה שימוש בMySQL בקונטיינר כדי להציג את בסיסי הנתונים.

Shell

Mysql -u root -p

MySQL

 

mysql> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mydb               |

| mysql              |

| performance_schema |

| sys                |

+--------------------+

5 rows in set (0.00 sec)

 

mysql> create database testdb;

Query OK, 1 row affected (0.11 sec)

 

mysql> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mydb               |

| mysql              |

| performance_schema |

| sys                |

| testdb             |

+--------------------+

6 rows in set (0.00 sec)

 

mysql> connect testdb;

Connection id:    12

Current database: testdb

 

mysql> SHOW TABLES;

Empty set (0.02 sec)

 

mysql> create table test (id numeric,fname varchar(20));

Query OK, 0 rows affected (0.10 sec)

 

mysql> SHOW TABLES;

+------------------+

| Tables_in_testdb |

+------------------+

| test             |

+------------------+

1 row in set (0.00 sec)

 

mysql> insert into test values (1,'arvind');

Query OK, 1 row affected (0.08 sec)

 

mysql> commit;

Query OK, 0 rows affected (0.00 sec)

 

mysql> select * from test;

+------+--------+

| id   | fname  |

+------+--------+

|    1 | arvind |

+------+--------+

1 row in set (0.00 sec)

הטבלה שיצרנו והנתונים ששמרנו בטבלת המבחן יהיו רק זמינים עד כדי שנשתמש באותו קונטיינר; כל הנתונים יאבדו ברגע שניצור או נבנה קונטיינר חדש.

אתה יכול לאמת זאת על ידי יציאה מהקונטיינר והיכנס מחדש לבסיס הנתונים של הקונטיינר כדי לבדוק אם קיימים נתונים. תראה שהנתונים עדיין קיימים בבסיס הנתונים כל עוד הקונטיינר רץ.

3. התחבר לבסיס נתונים מוכל במכשיר המארח שלך

להתחבר למסד נתונים מוכלל במכשיר המארח שלך, יש למפות פורט בתוך הכלי לפורט במכשיר המארח. התהליך הזה מבטיח שהמסד הנתונים בתוך הכלי יהיה נגיש דרך רשת המארח. ל-MySQL, הפורט ברירת המחדל הוא 3306. על ידי חשיפת הפורט הזה, אתה יכול להשתמש בכלים שונים לניהול מסדי נתונים או יישומים על מכשיר המארח שלך כדי לתקשר עם מסד הנתונים MySQL.

לפני שתתחיל, אתה חייב להסיר כל כלים שהרצת קודם לכן עבור המדריך הזה. כדי לעצור ולהסיר כלי, או:

  • במסוף, הרץ את docker remove --force my-mysql כדי להסיר את הכלי בשם my-mysql;
  • או, במסך דשבורד Docker, בחר בסמל Delete ליד הכלי שלך בתצוגת הכלים.

לאחר מכן, אתה יכול להשתמש ב-GUI של Docker Desktop או ב-CLI כדי להריץ את הכלי עם הפורט הממופה.

Shell

 

docker run -p 3307:3306 --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -d mysql:latest

בפקודה הזו, -p 3307:3306 ממפה את הפורט 3307 על המארח לפורט 3306 בכלי.

4. שמירת נתוני מסד בווליום

שמירת נתוני מסד בווליום של Docker היא חיונית כדי להבטיח שהנתונים שלך ישרדו אחרי הפעלה מחדש והסרה של הכלי. ווליום של Docker מאפשר לך לאחסן קבצי מסד נתונים מחוץ לשכבה הכתובה של הכלי, מה שמאפשר לך לשדרג את הכלי, להחליף בסיסים, ולחלוק נתונים בלי לאבד אותם. אתה יכול להצמיד ווליום לכלי מסד נתונים שלך באמצעות CLI של Docker או GUI של Docker Desktop.

שים לב: שוב, כפי שנעשה קודם בחלק "חיבור למסד נתונים מוכלל", לפני שתתחיל, עליך להסיר כל תיכנים שהרצת קודם לפי המדריך הזה.

לאחר מכן, אתה יכול להשתמש בממשק ה-GUI של Docker Desktop או ב-CLI כדי להריץ את התיכנית עם ווליום.

כדי להריץ את תיכנית הבסיס הנתונים שלך עם ווליום מוצמד, הוסף את האופציה —v לפקודת docker run שלך. זה מציין שם ווליום ואת הנתיב שבו הבסיס הנתונים שומר את נתוניו בתוך התיכנית. אם הווליום לא קיים, Docker יוצר אותו אוטומטית עבורך.

כדי להריץ תיכנית בסיס נתונים עם ווליום מוצמד, וודא שהנתונים נשמרים. הרץ את התיכנית והצמד את הווליום.

Shell

docker run –name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -v my-db-volume:/var/lib/mysql -d mysql:latest

הפקודה הזו מצמידה את הווליום בשם my-db-volume לתיקייה /var/lib/mysql בתיכנית.

צור נתונים בבסיס הנתונים. השתמש בפקודה docker exec כדי להריץ MySQL בתוך התיכנית וליצור שולחן.

Shell

docker exec my-mysql mysql -u root -pmy-secret-pw -e "CREATE TABLE IF NOT EXISTS mydb.mytable (column_name VARCHAR(255)); INSERT INTO mydb.mytable (column_name) VALUES ('value');"

 

הפקודה הזו משתמשת בכלי MySQL בתיכנית כדי ליצור שולחן בשם mytable עם עמודה בשם column_name, ולבסוף, היא מכניסה ערך.

תעצור ותסיר את התיכנית. בלי ווליום, השולחן שיצרת יאבד כשתסיר את התיכנית.

Shell

docker remove --force my-mysql

תתחיל תיכנית חדשה עם הווליום מוצמד. הפעם, אתה לא צריך לציין אף תואר סביבה משום שהתצורה נשמרת בווליום.

Shell

docker run --name my-mysql -v my-db-volume:/var/lib/mysql -d mysql:latest

ודא שהשולחן שיצרת עדיין קיים. אז, השתמש שוב בפקודה docker exec כדי להריץ MySQL בתוך התיכנית.

Shell

docker exec my-mysql mysql -u root -pmy-secret-pw -e "SELECT * FROM mydb.mytable;"

 

זה הורך שימוש בכלי MySQL בתוך הקונטיינר לבחירת כל הרשומות מהטבלה table. אתה שומע פלט כמו הבא: 

SQL

 

column_name

value

5. נקיון תמונת קונטיינר MySQL 

להסרת קונטיינר, השתמש בפקודה docker remove עם שמות או מזהים של קונטיינרים המופרדים ברווחים. לדוגמה:

Shell

 

docker remove --force 90b8831a4b8
docker remove --force 36252896d6ff
docker remove --force d86dff3809e8

סיכום

בסופו של דבר, הרצת MySQL עם Docker מספקת פתרון נייד, סקילבילי ויעיל לניהול מאגרי מידע. קונטיינרים מבודדים של Docker עוזרים להקל על התקנה, להפחית בעיות תאימות ולאופטימוז את שימוש במשאבים. על ידי איפשור של שליטה קלה על גרסאות ואיפוס סביבות, Docker תומך בפיתוח ובדיקה מהירים. זה הינו אידיאלי לניהול מאגרי MySQL במיקרו-שירותים, כך שהם קלים להרצה ולסקילינג בעוד שמקיימים ביצועים חזקים.

Source:
https://dzone.com/articles/guide-for-running-mysql-database-in-docker-container