ערב טוב לכל קוראי הבלוג, היום החלטתי לעשות demo בנושא docker. הוא הראשון מתוך סדרה מתוכננת. כיוון שזה ה-demo הראשון, מאוד אשמח שתתנו את דעתכם עליו בתגובות או במייל אליי.
אני מניח שבשלב הזה כבר התקנתם docker על המחשב שלכם. ה-demo יהיה בשיטת hands on כך שתראו פה דברים שאולי אינכם מכירים. באינטרנט יש את כל המידע, אני מזמין אתכם לחפש וללמוד (וכמובן שאם בכל זאת לא הבנתם, תשאלו אותי). אני אנסה להעביר לכם את המידע החשוב והמעניין.
מה ה-use case?
אתם רוצים להרים nginx (שרת web) בתוך container על המחשב שלכם, איך תעשו את זה?
ב-docker hub מרוכזים docker images. נחפש שם docker image שמכיל nginx. לאחר חיפוש הגענו לתוצאה הבאה:
ניכנס אליה ואז ללשונית של Tags.
נחפש במסך הבא את הטקסט alpine (הפצה לינוקסית קלת משקל):
נגלול למטה ונבחר docker image שה-tag שלו הוא alpine. זאת אמורה להיות התוצאה:
כדי להוריד את ה docker image למחשב שלנו נעתיק את הפקודה שרשומה מצד ימין למעלה ונריץ אותה ב shell של מערכת ההפעלה שלכם.
הפלט אמור להיות משהו כזה:
כמו שרשמתי במאמר הקודם, container הוא instance רץ של image. לכן, נרצה ליצור container מה-image שהורדנו.
בעמוד הראשי של כל docker-image, תראו תיעוד לגבי השימוש בו. במקרה שלנו זה נמצא כאן.
בואו נעשה את זה טיפה יותר מעניין, נניח שנרצה לשנות את קובץ ה-index.html של ה-nginx כדי שירשום לנו Hello. נוכל לעשות זאת אם נערוך מחדש את ה-docker image שעכשיו הורדנו.
איך נערוך את ה-docker image?
ניצור קובץ בתיקייה שבה אנחנו נמצאים בשם index.html
נשים בו את התוכן הבא:
<h1> Hello </h1>
לפי התיעוד, nginx מחפש קבצים שהוא יכול להגיש תחת התיקייה /usr/share/nginx/html. הוא מכיל שם קובץ index.html שהתוכן שלו נראה כך:
כעת נכתוב קובץ ששמו Dockerfile. כך, כשנבנה docker image בעצמנו – הוא יחפש קובץ כזה שיכיל את סט ההוראות.
אנחנו נרצה לדרוס את התוכן של index.html עם הקובץ שלנו. לכן, נשים ב-Dockerfile את התוכן הבא:
FROM nginx:alpine COPY index.html /usr/share/nginx/html/index.html
אנחנו נותנים שתי הוראות. הראשונה היא הצהרה על כך שאנחנו משתמשים ב-nginx:alpine כ-base image שלנו. השנייה היא העתקה של קובץ שיצרנו אל תוך נתיב ב-nginx:alpine.
כך אמורה להיראות התיקייה שלנו:
עכשיו, נפתח shell מתוך התיקייה ואז נבנה את ה-image הזה בעזרת הפקודה:
docker build -t our-nginx:latest .
אנחנו אמורים לראות בפלט של הפקודה שזה עבר בהצלחה. כעת נריץ את ה-image הזה בתוך container (אגב, לא היינו חייבים לעשות docker pull כדי להשתמש ב-nginx:alpine. אם הוא לא היה מוצא אותו לוקאלית – הוא היה מחפש ב-docker hub):
docker run -it --rm -d -p 8080:80 --name our-cool-nginx-container our-nginx:latest
לא אסביר על כל ה-flagים שיש פה, אבל כן אסביר שיצרנו container שמבוסס על our-nginx:latest. בנוסף, 8080:80 אחרי p- מתייחס ל-port forwarding. כל תעבורה שמגיעה ל-host בפורט 8080, תעבור ל-container בפורט 80.
אחרי השורה הזאת נריץ את הפקודה:
docker ps
כך נדע שה-container רץ.
איך נדע שהכול עבד?
ניגש ל http://localhost:8080 ונראה שמוצג לנו עמוד עם הטקסט Hello:
איך נעצור ונמחק את ה-container שיצרנו?
docker container stop our-cool-nginx-container
כדאי לדעת: כשהרצנו את ה-container עם rm– הגדרנו שברגע שה-container ייעצר הוא גם יימחק. אם לא היינו עושים את זה, ה-container היה נשאר במצב stop. כדי לבדוק אם הוא נמחק, נריץ את הפקודה הבאה אחרי שעצרנו אותו:
docker ps -a
הפקודה הזאת תראה לנו container-ים שהם גם במצב stopped. כדי למחוק אותם מחליפים את המילה stop ב- rm.
לסיכום, זה היה demo ראשון ובסיסי בעולם ה-docker. חשוב שתמשיכו להתנסות בעצמכם ותוודאו שהבנתם הכול. אני כמובן אשמח לשמוע הארות, הערות, שאלות וכל שעולה על דעתכם ?.
אדיר ממש. אשמח לעוד demoים
Demo מצוין! מדהים לראות בלוגים בתחום ה DevOps בעברית!
בהצלחה! יוזמה מבורכת