שימוש במסד נתונים מקומי ממוסמר מספק גמישות ומפשט את ההקמה. הוא מאפשר העתקה קרובה של סביבות ייצור ללא המורכבות של התקנות בסיס נתונים מסורתיות. Docker מקל על תהליך זה, והופך את התקנת, הניהול והמידרוג של בסיסי נתונים בקונטיינרים מבודדים לפשוט מאוד, עם כמה פקודות בלבד.
במדריך זה, תלמד איך:
- להריץ בסיס נתונים ממוסר מקומי
- להגיע לשלדה של בסיס נתונים ממוסר
- להתחבר לבסיס נתונים ממוסר מהמארח
- לשמור נתוני בסיס נתונים בתקן
- לנקות את המעבדה
תנאימוקדמים
לכדי המדריך זה, עליך להתקין Docker. להוראות התקנה, יש להתייחס לאתר של Docker.
מדריך שלב-אחר-שלב להקמת בסיסי נתונים ממוסרים
1. הריצת בסיס נתונים ממוסר מקומי
רוב מערכות הבסיסים הפופולריות, כגון MySQL، PostgreSQL ו־MongoDB יש תמונות Docker רשמיות זמינות ב Docker Hub. התמונות האלה נבחרו לפי נוהלי הטובה ביותר, כדי להבטיח שיהיה לך גישה למשימות האחרונות ולעדכוני ביטחון.
להתחיל, בקר ב Docker Hub וחפש את הבסיס שאתה מתעניין בו. דף התמונה של כל אחת מספק תשאולים מפורטים על איך להריץ את הקונטיינר, להתאים את ההגדרות ולהכניס את הבסיס לפי הצרכים שלך. למידע נוסף על תמונת MySQL בהדרכה זו, התייחס לדף של תמונת MySQL ב Docker Hub.
להריץ קונטיינר של בסיס, אתה יכול להשתמש או ב GUI של Docker Desktop או ב CLI. להריץ קונטיינר באמצעות CLI, הרץ את הפקודה הבאה במסוף:
$ 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
במסוף:
run docker ps
אתם גם יכולים לבדוק את אותו דבר במסוף של Docker Desktop:
2. נגישות לשלדה של בסיס נתונים מוכלל
כאשר בסיס נתונים רץ בתוך קונטיינר Docker, יתכן שתצטרכו לגשת לשלדה שלו כדי לנהל את בסיס הנתונים, לבצע פקודות או לבצע משימות אדמיניסטרטיביות. Docker מספק דרך פשוטה לעשות זאת באמצעות פקודת docker exec
. בנוסף, אתם יכולים להשתמש בממשק הגרפי של Docker Desktop אם תפילו לזה.
אם אין לכם קונטיינר של בסיס נתונים שרץ כרגע, יילכו להריצת בסיס נתונים מקומי מוכלל. לגישה למסוף של קונטיינר MySQL באמצעות CLI, ניתן להשתמש בפקודת docker exec
הבאה.
docker exec -it my-mysql bash
בפקודה זו:
docker exec
מודיע לDocker שאתם רוצים לבצע פקודה בקונטיינר שרץ.-it
מבטיח שהמסוף אליו אתם מגיעים הוא אינטראקטיבי כך שתוכלו להקליד פקודות לתוכו.my-mysql
הוא שם הקונטיינר של MySQL שלך. אם שמת את הקונטיינר בשם אחר כאשר רצית אותו, השתמש בשם הזה במקום.- הפקודה שאתה רוצה לרוץ בתוך הקונטיינר היא bash. היא פותחת שלדות Bash שמאפשרת לך להתחבר למערכת קבצים של הקונטיינר וליישומים שהותקנו עליו.
- לאחר ביצוע הפקודה הזו, תקבל גישה לשלדות Bash בתוך קונטיינר MySQL שלך, ממנו תוכל לנהל את שרת MySQL שלך ישירות. אתה יכול לרוץ Exit כדי לחזור למסוף שלך.
בדוק אם הקונטיינר של Docker רץ.
run docker ps
ברגע שהתחברת למסוף של הקונטיינר, אתה יכול לרוץ כל כלי שזמין בקונטיינר. הדוגמה (תמונה) הבאה מראה שימוש בMySQL בקונטיינר כדי להציג את בסיסי הנתונים.
Mysql -u root -p
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 כדי להריץ את הכלי עם הפורט הממופה.
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 יוצר אותו אוטומטית עבורך.
כדי להריץ תיכנית בסיס נתונים עם ווליום מוצמד, וודא שהנתונים נשמרים. הרץ את התיכנית והצמד את הווליום.
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 בתוך התיכנית וליצור שולחן.
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
, ולבסוף, היא מכניסה ערך.
תעצור ותסיר את התיכנית. בלי ווליום, השולחן שיצרת יאבד כשתסיר את התיכנית.
docker remove --force my-mysql
תתחיל תיכנית חדשה עם הווליום מוצמד. הפעם, אתה לא צריך לציין אף תואר סביבה משום שהתצורה נשמרת בווליום.
docker run --name my-mysql -v my-db-volume:/var/lib/mysql -d mysql:latest
ודא שהשולחן שיצרת עדיין קיים. אז, השתמש שוב בפקודה docker exec
כדי להריץ MySQL בתוך התיכנית.
docker exec my-mysql mysql -u root -pmy-secret-pw -e "SELECT * FROM mydb.mytable;"
זה הורך שימוש בכלי MySQL בתוך הקונטיינר לבחירת כל הרשומות מהטבלה table. אתה שומע פלט כמו הבא:
column_name
value
5. נקיון תמונת קונטיינר MySQL
להסרת קונטיינר, השתמש בפקודה docker remove
עם שמות או מזהים של קונטיינרים המופרדים ברווחים. לדוגמה:
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