בוני אתרי וורדפרס? נסו את העולם המופלא של docker כדי להרים מיידית וורדפרס על כל מחשב ומחשב. היתרונות הם עצומים: אפשר להרים לא מעט סביבות תוך שניות עם גרסאות PHP שונות וגרסאות מסד נתונים שונות. הסביבה התקלקלה? משהו התחרבש? מורידים ומעלים שוב.
במאמר הקודם למדנו על docker compose לעבודה עם סביבות מורכבות. במקרה הזה וורדפרס היא סביבה מורכבת. מקום אחד שבו אנו מריצים את ה-PHP ומקום שני שבו אנו מריצים את ה-MySQL. בדוגמה במאמר הקודם אנו בנינו PHPMyAdmin ובדוגמה כאן אנו נבנה וורדפרס. העקרון הוא אותו עקרון. קובץ compose שבו מוגדרות שתי הסביבות.
יוצרים תיקיה במחשב ומכניסים לתוכה קובץ בשם docker-compose.yml. ניגשים לחלק של וורדפרס באתר של docker ומאתרים את קובץ ה-compose שמתאים לנו.
version: '3.1'
services:
wordpress:
image: wordpress
restart: always
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
מה שמעניין פה יותר מהכל הוא משתני הסביבה שמפורטים ב-environment. אני חושב שאין צורך להסביר עליהם יותר מדי. רק חשוב להזהיר שאם הדוקר שלכם יושב על סביבה חיצונית (לא סביבת פיתוח) אז זה רעיון ממש ממש רע להשתמש בססמה נוסח "examplepass" בסביבת פרודקשן.
מה הבעיה עם הקובץ הזה? שהוא יעבוד מעולה, אבל יהיה לנו קשה לגשת אל קבצי הוורדפרס כדי להוסיף/לערוך/לשנות אותם. בסופו של דבר אנחנו צריכים לעבוד על תבניות או תוספים. איך עושים את זה? תוספת קטנה שקושרת בין הקבצים של המכונות השונות לדיסק הקשיח שלנו. איך עושים את זה? עם תוספת קטנה לקובץ ה-compose המקורי:
version: '3.1'
services:
wordpress:
image: wordpress
restart: always
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
# Keep your data
volumes:
- ./site:/var/www/html/
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
# Keep your data
volumes:
- ./db:/var/lib/mysql
בגדול, תחת ה-volumes יש את ההגדרה. ראשית התיקיה המקומית (יחסית לקובץ ה-compose) ושנית ההגדרה בתוך המכונה. כך למשל:
./site:/var/www/html/
אומר שהתיקיה site שתהיה בתיקיה שבה יש את קובץ ה-compose במחשב שלנו, תהיה בעצם תיקית ה-var/www/html של המכונה שמחזיקה את קבצי הוורדפרס. הכי קל בעולם. כשנריץ את קובץ ה-compose הוא יצור את התיקיה וגם יאכלס אותה בקבצי הוורדפרס שאותם הוא יוריד.
זה גם נותן לנו persistence. כלומר גם אם נכבה את דוקר ואת המחשב ואחר כך נרים את הכל מחדש – הקבצים יישארו והמידע יישאר.
11 תגובות
תיקון קטן:
כל הקוד של וורדפרס נמצא כבר בתוך ה-docker image, כך שטעינת התיקייה site לתוך /var/www/html מונע אפשרות לשדרג בהמשך או כרגע אם המטרה היא לצרכי בדיקות.
מה שעדיף לעשות, הוא רק למפות את ./site-content:/var/www/html/wp-content, זה יאפשר להתעסק רק עם התוכן המשתנה של וורדפרס מבלי לטעון לתיקייה הנוכחית את כל קוד המקור של וורדפרס.
ועוד משהו קטן, כדאי תמיד לציין tag, כך שאם אתה רוצה לעבוד על גרסה כלשהי של וורדפרס 4.9 שים wordpress:4.9, כמובן שאפשר להיות ספציפיים יותר, אבל גם אם הכוונה היא לעבוד על ה-latest, כדאי לציין גם את זה.
ועוד עוד משהו קטן… מקומית לא כדאי לעבוד עם restart: always, כל פעם שתאתחל את המחשב יהיה שימוש במעבד וזיכרון שיקח לך כמה דקות להבין מאיפה זה מגיע. כדאי לשנות ל-unless-stopped.
https://docs.docker.com/config/containers/start-containers-automatically/
כמה זה בטוח להרים db כמו כאן על דוקר? ראיתי בהרבה מקומות הסתייגויות… נדמה לי שגם בעושים תוכנה דיברו על זה.
אתה בעצם שומר על הדיסק את התוכן של הdb ככה שאם הקונטיינר יפול תוכל לשחזר אותו?
אני מתייחס לשורה של – ./db:/var/lib/mysql
גם בדטאבייס לא ״דוקרי״ התוכן נשמר בדיסק. בדוגמא כאן נעשה מיפוי בין הקבצים בתוך הדוקר קונטיינקר לתיקיה במחשב המארח, ככה שגם מחיקה של הקונטיינר תאפשר העלאה של קונטיינר חדש עם אותם הנתונים.
יכול להעיד מנסיוני שמסדי נתונים על דוקר זה דבר נפלא ופשוט, אבל בהחלט דורש קצת יותר הגדרות בפרודקשן (בעיקר בהיבטי זיכרון)
היי
תותחים..ממש עניני ומופרט…
שאלה קטנה..מה ההבדל בין שמירה שביצעתם ל pvc..?
תודה
שאלה – נניח שעד עכשיו השתמשתי ב-xampp ויש לי התקנת וורדפרס בתיקיית ה-htdocs עם DB בתיקיה הרלוונטית של xampp והכל.
האם אני יכול ליצור קובץ docker-compose.yml עם הנתונים התואמים להתקנה הקיימת והוא יריץ לי אותה בקונטיינר?
תודה על ההדרכה הפשוטה והנהירה.
משום מה כל פעם שהמחשב עושה אתחול הוורדפרס עולה כ"לא מותקן", ורק אחרי הורדה והפעלה מחדש של הדוקר חוזרת הגרסה המותקנת. למישהו יש הסבר לתופעה?
מסתבר שזה אירוע כללי בחלונות 10 כבר שנה וחצי. הזוי:
https://github.com/docker/for-win/issues/584#issuecomment-286792858
בווינדוס 10 HOME הImage של DB עושה ריסט אינסופי..
יש למישהו פתרון?
גם הוספה של
command: "–innodb_use_native_aio=0"
לא עזרה
סדרת מדריכים מעולה (עזרה לי להרים מכונת פיתוח בדקות בודדות) עם זאת אני רואה שהקבצים תחת user www-data מה שלא מאפשר לי לשמור את הקבצים שאני עורך בצורה נוחה.
יש פתרון דוקרי לנושא?
הסדר לא משנה?
קודם הרי אמורים להקים db ורק אז את האפליקציה שמעליו.
כאן בקובץ docker-compose.yml. כתבת הפוך