איך ליצור דוקר ווינדוס אימג' עם תג Docker Build

האם אתה חדש בתמונות חלונות של Docker? האם אתה עובד כרגע בחנות של Windows ומתוסכל ללמוד על בניית Docker עבור תמונות מיכלים? באת למקום הנכון. הדרך הטובה ביותר ללמוד על משהו חדש היא על ידי ביצוע פעולות עם הפקודות docker build ו־docker build "tag"!

במאמר זה, תלמד כיצד ליצור את התמונה הראשונה שלך של Windows Docker מתוך Dockerfile באמצעות פקודת docker build.

בואו נתחיל!

הבנת תמונות מיכלי Docker

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

אך בימינו, שימוש בתמונות מיכלי Docker גדל, למעשה חלקית בגלל הפופולריות של ארכיטקטורת השירות המיקרוסרו. בתגובה לעלייה בפופולריות של Docker, מיקרוסופט החלה לתמוך בצורה פומבית בתמונות Docker למספר מוצרים נוצרים שלה על הדף שלה ב־Docker Hub. הם אף הוסיפו תמיכה נייטיבית בתמונות עבור Windows כחלק מתכונת המוצר ב־Windows 10 ו־Windows Server 2016!

A Docker image is run on a container by using the Docker Engine. Docker images have many benefits such as portability (applicable to multiple environments and platforms), customizable, and highly scalable.  As you can see below, unlike traditional virtual machines, the Docker engine runs on a layer between the host OS kernel and the isolated application services that are being containerized.

Source: Docker

הבנת בניית Docker ותמונות

הפקודה docker build יכולה להיות מופעלת כדי לאוטומציה של יצירת תמונת תקן של קונטיינר, לאמץ את הפרקטיקה של container-as-code ב-DevOps, ולאינטגרציה של קונטיינריזציה במעגל הפיתוח של הפרויקטים שלך. Dockerfiles הם פשוט קבצי טקסט המכילים הוראות בנייה בהם Docker משתמש כדי ליצור תמונת קונטיינר חדשה שמבוססת על תמונת קונטיינר קיימת.

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

תהליך זה יש לו מספר יתרונות על פני השימוש בתמונת קונטיינר מוכנה:

  1. ניתן לבנות מחדש תמונת קונטיינר למספר גרסאות של Windows – שזה נהדר לבדיקת שינויי קוד על מספר פלטפורמות.
  2. תהליך יעניק לך יותר שליטה על מה שמותקן בקונטיינר. זה יאפשר לך לשמור על גודל הקונטיינר שלך למינימום.
  3. מסיבות אבטחה, ייתכן שתרצה לבדוק את הקונטיינר לגבי פגיעות אבטחה וליישם החמירות בטיחותית לתמונת הבסיס.

דרישות מוקדמות/נדרשות

מאמר זה הוא מדריך על למידת איך לבנות תמונת Docker באמצעות Dockerfile. אם תרצה לעקוב, וודא שיש לך את הדרישות הבאות מתוקנות.

  • Docker for Windows מותקן. אני אשתמש בגרסה 2.1.0.4 של Docker Community Edition (CE) בסביבת העבודה שלי.
  • נדרש גישה לאינטרנט להורדת תמונות Docker
  • מערכת ההפעלה Windows 10+ (גרסה 1709 משמשת למדריך זה)
  • שיפוץ הווירטואליות משולב
  • 5 ג'יגה-בייט של שטח פנוי במחשב המקומי שלך
  • PowerShell 5.0+
  • מדריך זה משתמש ב Visual Studio Code IDE. אבל תרגיש חופשי להשתמש בכל IDE שתעדיף.

הערה: וודא שאתה מפעיל את הגדרות ה- Windows Containers במהלך ההתקנה של Docker.

הכנות מראש

תצטרך תיקייה ראשית כדי לאחסן את כל תמונות ה-Docker והתכניות שתבנה מהן. כדי לעשות זאת, פתח את המסוף של PowerShell או cmd (תשתמש ב-PowerShell במהלך מאמר זה) וצור תיקייה חדשה בשם C: \ תוכניות.

לאחר שהתיקייה נוצרה, החלף אליה. מזהה זה מעביר את תיקיית העבודה הנוכחית של המסוף אל C: \ Containers כדי להגדיר את הורדות ברירת המחדל לתיקייה זו.

PS51> mkdir C:\Containers
PS51> cd C:\Containers

במאמר זה, תקבל קדם צובר. רוב הקבצים שנדרשים לפרויקט זה כבר זמינים. לאחר שהתיקייה נוצרה, בצע Git pull כדי להעתיק את הקבצים הדרושים למאמר זה ממחסן ה-Git של TechSnips לתיקייה C:\Containers. לאחר השלמת הפעולה, בדוק כי התיקייה C:\Containers נראית כמו שמוצג למטה.

Tutorial files

הורדת תמונת Docker של IIS במערכת ההפעלה Windows

המשימה הראשונה היא להוריד "תבנית" או תמונת בסיס. ייתכן ותבנה את תמונת ה-Docker האישית שלך מאוחר יותר, אך תצטרך תחילה להוריד תמונה כדי להתחיל. תוריד את התמונות העדכניות ביותר של IIS ו-Windows Server Core שנדרשות למדריך זה. רשימת התמונות המעודכנות ניתן למצוא בדף ה-תמונות הרשמיות של Docker של Microsoft.

סקירת תמונות הבסיס הנוכחיות של Docker

לפני שתוריד את התמונה ממאגר התמונות, בוא נבדוק את התמונות הבסיס הנוכחיות שיש לך במערכת המקומית. כדי לעשות זאת, הפעל חלון פוורשל בתור מנהל והקלד docker images. פקודה זו תחזיר את כל התמונות במערכת המקומית שלך.

כפי שניתן לראות למטה, התמונות הזמינות ריקות בהתחלה.

PS51> docker images
Docker Build Tag : Listing available Docker images

הורדת התמונה הבסיסית

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

PS51> docker pull mcr.microsoft.com/windows/servercore/iis
Downloading an image from the Docker Hub

עכשיו הרץ docker images ואמור לך להיות באפשרותך לראות את תמונת ה־IIS האחרונה של Microsoft Windows הזמינה עבור המדריך הזה.

PS51> docker images
Viewing available Docker images

בדיקת קובץ ה־Dockerfile

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

פתחו את קובץ ה־Dockerfile בעורך הטקסט האהוב עליכם, C:\Containers\Container1\Dockerfile. תוכן קובץ זה משמש להגדרת איך ייתקבע תמונת הקונטיינר בזמן הבנייה.

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

# מציין שהדמות האחרונה של מיקרוסופט/IIS תשמש כדמות בסיס
# משמש לציין איזו דמות בסיס תשמש בתהליך הבנייה.

# שים לב לכך שהקונבנציה של שמות הדמויות היא "**בעלים/שם אפליקציה : שם תג**"
# (מוצג כ־microsoft/iis:latest); כך שבמקרה שלנו בעל הדמות הוא
# מיקרוסופט והאפליקציה היא IIS עם שם התג "latest" שמשמש
# לציון שתפרוט את הגרסה האחרונה ביותר של הדמות.
FROM microsoft/iis:latest

# מעתיק תוכן מתיקיית wwwroot לתיקיית inetpub/wwwroot בדמות הקונטיינר החדשה
# משמש לציין שברצונך להעתיק את תיקיית WWWroot לתיקיית IIS inetpub WWWroot
# בקונטיינר החדש. אין צורך לציין את הנתיב המלא לקבצים המקומיים שלך
# מכיוון ש־Docker כבר מכיל בתוכו לוגיקה להפנות לקבצים ותיקיות
# יחסית למיקום של קובץ ה־Docker במערכתך. יש לשים לב גם כי
# Docker יכיר רק לקווים נטוים למסלולי קבצים - מאחר שזו דמות
# התקנה במערכת מבוססת Windows ולא Linux.
COPY wwwroot c:/inetpub/wwwroot

# הרץ כמה פקודות PowerShell בתוך הקונטיינר החדש כדי להגדיר את הדמות

# הרץ את פקודות ה־PowerShell כדי להסיר את קבצי ה־IIS ברירת המחדל וליצור
# בריכת אפליקציות חדשה בשם TestPool
RUN powershell Remove-Item c:/inetpub/wwwroot/iisstart.htm -force
RUN powershell Remove-Item c:/inetpub/wwwroot/iisstart.png -force
RUN powershell Import-Module WebAdministration
RUN powershell New-WebAppPool -Name 'TestPool'

# מחשף את היציאה 80 בדמות הקונטיינר החדשה
# משמש לפתיחת יציאה TCP 80 לאפשר חיבור HTTP לאתר.
# אך, השורה הזו מופיעה כהערה, משום שלדמות ה־IIS כבר יש את היציאה
# פתוחה כבר ברירת מחדל.
#EXPOSE 80

# מגדיר את הפקודה הראשית של דמות הקונטיינר
# מציין לדמות להפעיל שומר שירות עבור שירות ה־w3svc.
# כאשר זה מוציין, הקונטיינר יפסיק אוטומטית לרוץ
# אם שירות ה־w3svc מפסיק לרוץ. שורה זו מופיעה כהערה משום שלדמות
# ה־IIS כבר יש כניסה זו במקום כחלק מברירת המחדל.
#ENTRYPOINT ["C:\\ServiceMonitor.exe", "w3svc"]

בניית תמונת Docker חדשה

יש לך את קובץ ה־Dockerfile מוכן לשימוש ותמונת IIS בסיסית הורדה. עכשיו הגיע הזמן לבנות את תמונת ה־Docker החדשה שלך באמצעות קובץ ה־Dockerfile.

כדי לבנות תמונה חדשה, יש להשתמש בפקודת docker build "tag". פקודה זו יוצרת את התמונה. במאמר זה, ניתן לראות מטה שאתה משתמש גם באפשרות -t ** שמחליפה את חלק ה-"tag". אפשרות זו מאפשרת לך לתת לתמונת החדשה שלך שם תג ידידותי וגם להתייחס לקובץ ה־Dockerfile על ידי ציון נתיב התיקייה בה הוא נמצא.

מטה ניתן לראות דוגמה של הבטחה כי הקונסולה נמצאת בתיקיית C:\Containers ואז נבנית תמונת Docker חדשה מה־Dockerfile בתיקייה C:\Containers\Container1.

PS51> cd C:\Containers
PS51> docker build -t container1 .\Container1

ברגע שהתחיל, ניתן לראות את התקדמות הפקודה כאשר היא עוברת דרך כל הוראה בקובץ ה־docker שורה אחר שורה:

Building a progress of the command as it traverses each instruction in the docker filenew Docker image

כאשר הסתיים, עליך להיות עם תמונת Docker חדשה כעת!

עכשיו רוץ את הפקודה docker images כדי להציג את התמונות שזמינות. ניתן לראות מטה דוגמה לתמונת container1 שנוצרה.

Viewing available Docker images

הערה: פקודת docker build —help היא פרמטר שימושי להצגת מידע מפורט על הפקודה של docker שמופעלת.

הפעלת תכולת ה־Docker

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

הפקודה docker run תפעיל תוכניות Docker חדשות בהתבסס על התמונה container1 שיצרת קודם. תוכל לראות משלם לכך למטה.

שים לב שהפרמטר -d משמש. הוא אומר לפועל Docker להתחיל את התמונה במצב נתוך ולצאת כאשר התהליך הראשי המשמש להפעלת התוכנית יצא.

כאשר docker run מסיים, הוא מחזיר את זהות התוכנית הנוצרת. הדוגמה למטה תפסה את זהות זו לתוך משתנה $containerID כך שנוכל להתייחס אליו בקלות מאוחר יותר.

PS51> $containerID = docker run -d container1
PS51> $containerID
Running a Docker container

לאחר שהקונטיינר הופעל, הפעל את הפקודה docker ps. פקודה זו מאפשרת לך לראות אילו קונטיינרים מופעלים כעת באמצעות כל תמונה. שים לב שהתמונה המופעלת מקבלת אוטומטית שם כינוי (busy_habit במקרה זה). כינוי זה משמש לעיתים כתוספת על זיהוי הקונטיינר.

Listing running Docker containers

הרצת קוד בתוך קונטיינר Docker

A new container is built from a new image you just created. Let’s now start actually using that container to run code. Running code inside of a Docker container is done using the docker exec command.

בדוגמה זו, הרץ את docker exec כדי לראות פלט PowerShell לפקודת Get-ChildItem בקונטיינר באמצעות תחביר הפקודה למטה. זה יוודא כי ההוראות בקובץ Dockerfile להסרת קבצי ה-IIS בריריות הצליחו.

PS51> docker exec $containerID powershell Get-ChildItem c:\inetpub\wwwroot

תוכל לראות למטה כי הקובץ היחיד שקיים הוא index.html שפירושו כי הקבצים בריריים הוסרו.

Running PowerShell commands in a Docker container

כעת הרץ את הפקודה ipconfig בתוך הקונטיינר כדי לקבל את כתובת ה-IP המקומית של תמונת הקונטיינר כך שתוכל לנסות להתחבר לאתר ה-IIS.

PS51> docker exec $containerID ipconfig

אתה יכול לראות למטה שהופעלה הפקודה ipconfig בתוך התכולה בדיוק כמו בהפעלה על המחשב המקומי שלך והחזירה את כל מידע ה-IP.

Running ipconfig in a Docker container

בדיקת האתר של IIS

עכשיו הגיע הזמן לחשוף את פרי העבודה שלך! זה הזמן לראות אם השרת של IIS הפועל בתכולת Docker משרת כראוי את עמוד ה- index.html.

פתח דפדפן והדבק את כתובת ה-IP4 שנמצאה דרך הפקודה ipconfig בשורת הכתובות. אם הכל בסדר, אתה צריך לראות הודעת Hello World!! כמו בתמונה למטה.

IIS webpage running in a Docker container

סקירת היסטוריית Docker

פקודה שימושית אחת לשימוש בעת עבודה עם תכולות Docker היא הפקודה docker history. אף על פי שאינה בהכרח קשורה ליצירת תמונה או תכולה בעצמה, פקודת ה-docker history היא פקודה שימושית המאפשרת לך לסקור את השינויים שבוצעו בתמונת התכולה.

PS51> docker history container1

אתה יכול לראות למטה ש-docker history מחזירה את כל פעילות ה- Dockerfile וה-PowerShell שבוצעה בתכולת ה-container1 שבה עבדת.

Inspecting container changes with docker history

ניקוי תמונות Docker הפועלות

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

הרץ את הפקודה docker ps כדי לראות רשימת התכולות הפועלות במערכת שלך:

PS51> docker ps
Viewing available Docker containers

עכשיו עצור את התכולות הפועלות באמצעות הפקודה docker stop:

PS51> docker stop <image nick name: busy_haibt in my case>
PS51> docker stop <image nick name: unruffled_driscoll in my case>
Stopping Docker containers

ולבסוף, אתה יכול להסיר לצמיתות את התכולות העצורות באמצעות הפקודה docker system prune.

PS51> docker system prune
Removing Docker images

קריאה נוספת

Source:
https://adamtheautomator.com/docker-build-tag/