Docker file рецепт для Docker images. Как рождается Docker контейнер c помощью Docker build.
תוכן עניינים:
תמונת Docker היא התבנית של מיכלי Docker המכילה את היישום ואת כל מה שאתה צריך כדי להריץ את היישום. מיכל הוא מופע זמן ריצה של תמונה.
במדריך זה נסביר מה זה Dockerfile, איך ליצור תמונה וכיצד לבנות תמונה עם Dockerfile.
מה זה Dockerfile
קובץ Dockerfile הוא קובץ טקסט המכיל את כל הפקודות שמשתמש יכול להפעיל בשורת הפקודה כדי ליצור תמונה. הוא כולל את כל ההוראות הדרושות לדוקר לבניית התמונה.
תמונות ה- Docker מורכבות מסדרה של שכבות של מערכת קבצים המייצגות הוראות ב- Dockerfile של התמונה שמרכיב יישום תוכנה להפעלה.
קובץ ה- Docker לובש את הטופס הבא:
# Comment INSTRUCTION arguments
INSTRUCTION
אינן תלויות רישיות, אך האמנה היא להשתמש ב- UPPERCASE לשמותיה.
להלן הרשימה עם תיאור קצר של כמה מההוראות Dockerfile הנפוצות ביותר:
- ARG - הוראה זו מאפשרת לך להגדיר משתנים שניתן לעבור בזמן הבנייה. ניתן גם להגדיר ערך ברירת מחדל. FROM - תמונת הבסיס לבניית תמונה חדשה. הוראות אלה צריכות להיות ההוראות הראשונות ללא התגובה ב- Dockerfile. החריג היחיד מכלל זה הוא כאשר ברצונך להשתמש במשתנה בטיעון
FROM
. במקרה זה, ניתן להקדיםFROM
ידי הוראותARG
אחת או יותר. LABEL - משמש להוספת מטא נתונים לתמונה, כגון תיאור, גרסה, מחבר.. וכו '. ניתן לציין יותר מ-LABEL
, וכל הוראותLABEL
הן צמד ערכי מפתח. RUN - הפקודות שצוינו בהוראות זו יבוצעו במהלך תהליך הבנייה. כל הוראותRUN
יוצרות שכבה חדשה מעל התמונה הנוכחית. הוספה - משמש להעתקת קבצים וספריות מהמקור שצוין ליעד שצוין בתמונת הדוקר. המקור יכול להיות קבצים או ספריות מקומיים או כתובת אתר. אם המקור הוא ארכיב זפת מקומי, הוא נפרק אוטומטית לתמונת ה- Docker. COPY - דומה ל-ADD
אך המקור יכול להיות רק קובץ או ספרייה מקומיים. ENV - הוראה זו מאפשרת לך להגדיר משתנה בסביבה. CMD - משמש לציון פקודה שתבוצע כשאתה מפעיל מיכל. אתה יכול להשתמש רק בהוראותCMD
אחת ב- Dockerfile שלך. ENTRYPOINT - בדומה ל-CMD
, הוראות זו מגדירה איזו פקודה תבוצע בעת הפעלת מכולה. WORKDIR - הנחיה זו מגדירה את ספריית העבודה הנוכחית להוראותRUN
,CMD
,ENTRYPOINT
,COPY
ו-ADD
. USER - הגדר את שם המשתמש או ה-UID
לשימוש בעת הפעלת הוראותRUN
,CMD
,ENTRYPOINT
,COPY
ו-ADD
. VOLUME - מאפשר לך לחבר ספריית מכונות מארח למכולה. EXPOSE - משמש לציון היציאה בה המכל מקשיב בזמן ריצה.
כדי, לא לכלול קבצים וספריות
.dockerignore
לתמונה, צור קובץ
.dockerignore
בספריית ההקשר. התחביר של
.dockerignore
דומה לזה של קובץ ה-
.gitignore
של ה- Git.
לקבלת התייחסות מלאה והסבר מפורט על הוראות Dockerfile ראו את דף ההתייחסות הרשמי של Dockerfile.
צור קובץ Dockerfile
התרחיש הנפוץ ביותר בעת יצירת תמונות Docker הוא לשלוף תמונה קיימת ממרשם (בדרך כלל מ- Docker Hub) ולציין את השינויים שתרצו לבצע בתמונת הבסיס. תמונת הבסיס הנפוצה ביותר בעת יצירת תמונות Docker היא Alpine מכיוון שהיא קטנה ומותאמת להפעלה ב- RAM.
בדוגמה זו ניצור תמונת Docker לשרת Redis. אנו נשתמש באובונטו האחרונה 18.04 כתמונת בסיס.
ראשית, צור ספרייה שתכיל את ה- Dockerfile וכל הקבצים הדרושים:
mkdir ~/redis_docker
נווט אל הספרייה וצור את ה- Dockerfile הבא:
cd ~/redis_docker
nano Dockerfile
דוקרפיל
FROM ubuntu:18.04 RUN apt-get update && \ apt-get install -y redis-server && \ apt-get clean EXPOSE 6379 CMD
בואו נסביר את המשמעות של כל אחת מהשורות ב- Dockerfile:
- בשורה
1
אנו מגדירים את תמונת הבסיס. הוראותRUN
המתחילות בשורה3
תעדכן את אינדקס apt, תתקין את חבילת "redis-server" ותנקה את המטמון apt. הפקודות המשמשות בהוראות זהות לפקודות בהן היית משתמשת להתקנת redis מחדש בשרת אובונטו. הוראות ה- EXPOSE מגדירה את היציאה עליה מקשיב שרת מחדש. בשורה האחרונה אנו משתמשים בהוראתCMD
כדי להגדיר את פקודת ברירת המחדל. זה יבוצע כאשר המכולה פועלת.
שמור את הקובץ וסגור את העורך.
בניית התמונה
השלב הבא הוא בניית התמונה. לשם כך, הפעל את הפקודה הבאה מהספרייה בה נמצא Dockerfile:
docker build -t linuxize/redis.
האפשרות
-t
מציינת את שם התמונה ובאופן אופציונלי שם משתמש ותג בפורמט 'שם משתמש / שם תמונה: תג'.
התפוקה של תהליך הבנייה תיראה כך:
Sending build context to Docker daemon 3.584kB Step 1/4: FROM ubuntu:18.04 ---> 7698f282e524 Step 2/4: RUN apt-get update && apt-get install -y gosu redis-server && apt-get clean ---> Running in e80d4dd69263… Removing intermediate container e80d4dd69263 ---> e19fb7653fca Step 3/4: EXPOSE 6379 ---> Running in 8b2a45f457cc Removing intermediate container 8b2a45f457cc ---> 13b92565c201 Step 4/4: CMD ---> Running in a67ec50c7048 Removing intermediate container a67ec50c7048 ---> d8acc14d9b6b Successfully built d8acc14d9b6b Successfully tagged linuxize/redis:latest
בסיום תהליך הבנייה התמונה החדשה תופיע ברשימת התמונות:
docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE linuxize/redis latest d8acc14d9b6b 4 minutes ago 100MB ubuntu 18.04 7698f282e524 5 days ago 69.9MB
מפעיל מכולה
כעת, לאחר שנוצרת התמונה, אתה מריץ ממנה מיכל על ידי ריצה:
docker run -d -p 6379:6379 --name redis linuxize/redis
האפשרויות
-d
אומרות לדוקר להפעיל את המכולה במצב מנותק, האפשרות
-p 6379:6379
תפרסם את היציאה 6379 למכונה המארחת
--name redis
מציינת את שם המכולה. הטיעון האחרון
linuxize/redis
הוא שם התמונה, המשמשת להפעלת המיכל.
כאשר המכולה מתחילה, השתמש בפקודה הבאה כדי לרשום את כל המיכלים הרצים:
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6b7d424cd915 linuxize/redis:v0.0.1 "redis-server '--pro…" 5 minutes ago Up 5 minutes 0.0.0.0:6379->6379/tcp redis
כדי לוודא שהכל עובד כמו שצריך להשתמש ב-
redis-cli
כדי להתחבר למיכל הדוקר:
redis-cli ping
על שרת ה- redis להגיב באמצעות
PONG
.
סיכום
מדריך זה כיסה רק את היסודות של השימוש ב- Dockerfiles לבניית תמונות. למידע נוסף על כתיבת Dockerfiles ושיטות העבודה המומלצות המומלצות ראה שיטות מומלצות לכתיבת Dockerfiles.