✕ סגור 
צור קשר
תודה על ההתעניינות .

Thank you! Your submission has been received!

Oops! Something went wrong while submitting the form

איך להתחיל לעבוד עם דוקר: תפעול קונטיינרים

רן בר זיק
|
קלה
|
Nov 27, 2018
alt="facebook"alt="linkedin"
להרשמה לניוזלטר

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

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

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

docker run --name mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.6

בואו ונעבור שוב על הפקודה הזו:

docker run –name mysql – הפקודה של docker run היא יצירת הקונטיינר, מה שמגיע אחרי הפלאג של name הוא השם שאנו בוחרים לקונטיינר הזה.

e- זה פלאג שלא הכרנו, הוא מאפשר להכניס משתני סביבה לתוך הקונטיינר עם יצירתו. במקרה הזה אני מכניס את משתנה הסביבה MYSQL_ROOT_PASSWORD. איך אני יודע שאני חייב להשתמש בו? כי כתוב את זה בדוקומנטציה של קובץ ההגדרות הרשמי:

MYSQL_ROOT_PASSWORD

This variable is mandatory and specifies the password that will be set for the MySQL root superuser account

d- אומר שהקונטיינר ירוץ ברקע.

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

אחרי שהרצתי את הפקודה, אני יכול להריץ את

docker ps -a

ולראות שהקונטיינר הזה פעיל!

עכשיו מה? בניגוד ל-PHP, למסד נתונים אני צריך להתחבר. יש כמה דרכים להתחבר למסד נתונים אבל הדרך הפשוטה ביותר היא דרך שורת הפקודה. כן, בדיוק כמו MySQL שמותקן בלינוקס אני יכול להכנס אל הקונטיינר ולהריץ שאילתה! איך עושים את זה? פשוט וקל! הכירו את פקודת docker exec מדובר בפקודה שיכולה להריץ דברים על הקונטיינר. במקרה הזה אני רוצה להריץ את ה-bash שיש בקונטיינר של MySQL. מה זה bash? זה הטרמינל של הקונטיינר. זה הכל.

docker exec -it mysql bash

אז מה יש לנו פה? docker exec היא הפקודה

it- זה פלאגים (נפרדים) שבגדול גורמים לפקודה לפתוח shell משלה.

mysql  זה השם של הקונטיינר. שימו לב שזה השם שלו – mysql כפי שהגדרתי עם docker run.

bash  זו הפקודה שאני רוצה להריץ.

ברגע שאני עושה את זה אני נכנס לתוך המכונה. אפשר לראות את השם שלה שהוא בעצם hash. אני יכול לשוטט במכונה ולהריץ פקודות כרצוני, אפילו ls -al שמשמעותו בלינוקסית (למי שלא יודע) זה הצגת כל הקבצים והספריות במקום הנוכחי.

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

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

docker exec -it mysql mysql -pmy-secret-pw

אבל ברוב הפעמים יש לי כבר קובץ SQL שאני רוצה להכניס אותו למסד הנתונים שלי. איך אני עושה את זה? גם כאן docker exec בא לעזרתי. אם אני עובד בלינוקס, אז MySQL מאפשר לי בקלות לייבא או לייצא נתונים. הדבר היחידי שאני צריך זה ליצור מסד נתונים. בדוגמה הזו יצרתי מסד נתונים (באמצעות CREATE DATABASE)  בשם internet ואני מייבא אליו את מסד הנתונים של האתר הזה.

cat il.sql | docker exec -i mysql /usr/bin/mysql -pmy-secret-pw internet_il

זה הכל. יש כאן קצת סינטקס לינוקסי אבל לא צריך להיבהל – בגדול:

cat il.sql – אני לוקח את קובץ il.sql. שימו לב שהוא חייב להיות במקום שבו אני מריץ את הפקודה. באופן דיפולטיבי, ה-shell של דוקר נפתח בחלונות בתיקיית המשתמש.

docker exec – אנחנו מכירים

i- פלאג של אינטראקטיביות, מונע מהחיבור להסגר עד סוף הפעולה.

mysql – השם של הקונטיינר

/usr/bin/mysql -pmy-secret-pw internet_il – זו הפקודה שאני מריץ בלינוקס על מנת לייבא נתונים כאשר אני משתמש בסיסמה ובשם מסד הנתונים. זה הכל.

ייצוא הוא פשוט אף יותר עם השורה הזו אני מבצע ייצוא של internet_il לקובץ backup.sql.

docker exec mysql /usr/bin/mysqldump -u root -p=my-secret-pw internet_il > backup.sql

והנה סרטון שבו אני מסביר איך זה עובד:

מאת: רן בר זיק, מתכנת ובלוגר

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

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

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

docker run --name mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.6

בואו ונעבור שוב על הפקודה הזו:

docker run –name mysql – הפקודה של docker run היא יצירת הקונטיינר, מה שמגיע אחרי הפלאג של name הוא השם שאנו בוחרים לקונטיינר הזה.

e- זה פלאג שלא הכרנו, הוא מאפשר להכניס משתני סביבה לתוך הקונטיינר עם יצירתו. במקרה הזה אני מכניס את משתנה הסביבה MYSQL_ROOT_PASSWORD. איך אני יודע שאני חייב להשתמש בו? כי כתוב את זה בדוקומנטציה של קובץ ההגדרות הרשמי:

MYSQL_ROOT_PASSWORD

This variable is mandatory and specifies the password that will be set for the MySQL root superuser account

d- אומר שהקונטיינר ירוץ ברקע.

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

אחרי שהרצתי את הפקודה, אני יכול להריץ את

docker ps -a

ולראות שהקונטיינר הזה פעיל!

עכשיו מה? בניגוד ל-PHP, למסד נתונים אני צריך להתחבר. יש כמה דרכים להתחבר למסד נתונים אבל הדרך הפשוטה ביותר היא דרך שורת הפקודה. כן, בדיוק כמו MySQL שמותקן בלינוקס אני יכול להכנס אל הקונטיינר ולהריץ שאילתה! איך עושים את זה? פשוט וקל! הכירו את פקודת docker exec מדובר בפקודה שיכולה להריץ דברים על הקונטיינר. במקרה הזה אני רוצה להריץ את ה-bash שיש בקונטיינר של MySQL. מה זה bash? זה הטרמינל של הקונטיינר. זה הכל.

docker exec -it mysql bash

אז מה יש לנו פה? docker exec היא הפקודה

it- זה פלאגים (נפרדים) שבגדול גורמים לפקודה לפתוח shell משלה.

mysql  זה השם של הקונטיינר. שימו לב שזה השם שלו – mysql כפי שהגדרתי עם docker run.

bash  זו הפקודה שאני רוצה להריץ.

ברגע שאני עושה את זה אני נכנס לתוך המכונה. אפשר לראות את השם שלה שהוא בעצם hash. אני יכול לשוטט במכונה ולהריץ פקודות כרצוני, אפילו ls -al שמשמעותו בלינוקסית (למי שלא יודע) זה הצגת כל הקבצים והספריות במקום הנוכחי.

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

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

docker exec -it mysql mysql -pmy-secret-pw

אבל ברוב הפעמים יש לי כבר קובץ SQL שאני רוצה להכניס אותו למסד הנתונים שלי. איך אני עושה את זה? גם כאן docker exec בא לעזרתי. אם אני עובד בלינוקס, אז MySQL מאפשר לי בקלות לייבא או לייצא נתונים. הדבר היחידי שאני צריך זה ליצור מסד נתונים. בדוגמה הזו יצרתי מסד נתונים (באמצעות CREATE DATABASE)  בשם internet ואני מייבא אליו את מסד הנתונים של האתר הזה.

cat il.sql | docker exec -i mysql /usr/bin/mysql -pmy-secret-pw internet_il

זה הכל. יש כאן קצת סינטקס לינוקסי אבל לא צריך להיבהל – בגדול:

cat il.sql – אני לוקח את קובץ il.sql. שימו לב שהוא חייב להיות במקום שבו אני מריץ את הפקודה. באופן דיפולטיבי, ה-shell של דוקר נפתח בחלונות בתיקיית המשתמש.

docker exec – אנחנו מכירים

i- פלאג של אינטראקטיביות, מונע מהחיבור להסגר עד סוף הפעולה.

mysql – השם של הקונטיינר

/usr/bin/mysql -pmy-secret-pw internet_il – זו הפקודה שאני מריץ בלינוקס על מנת לייבא נתונים כאשר אני משתמש בסיסמה ובשם מסד הנתונים. זה הכל.

ייצוא הוא פשוט אף יותר עם השורה הזו אני מבצע ייצוא של internet_il לקובץ backup.sql.

docker exec mysql /usr/bin/mysqldump -u root -p=my-secret-pw internet_il > backup.sql

והנה סרטון שבו אני מסביר איך זה עובד:

מאת: רן בר זיק, מתכנת ובלוגר

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
רן בר זיק
בואו נעבוד ביחד
צרו קשר