Table of Contents

מדוע חשוב איכות הסביבה של צוותים מודרניים

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

מה זה Docker ולמה להשתמש בו לפיתוח?

Docker הוא פלטפורמה קוד פתוח שמאחדת את פריסת היישומים בתוך קל משקל, מכולות ניידות. A מכולה היא יחידה סטנדרטית של תוכנה שאוסף קוד וכל התלויות שלה כך שהיישום פועל במהירות וביעילות מסביבה אחת של מחשוב אחד למשנהו.בניגוד למכונות וירטואליות, מכולות חולקות את הקרנל של מערכת ההפעלה המארחת, מה שהופך אותם הרבה יותר יעילים משאבים ומהירים יותר להתחיל.

באמצעות Docker לסביבות פיתוח פירושו שכל חבר צוות - כולל חדשים - עובד עם ערימה מערכת זהה. אותו מיכל שפועל במחשב הנייד של מפתח יכול לרוץ ללא שינוי בצנרת CI, שרת ממריץ, או ייצור. עקביות זו מבטלת את הסביבה סחף ומפחיתה את הניחושים המעורבים בכישלונות debuing.Docker משלבת גם טוב עם שליטה, ומאפשרת לצוותים לאחסן Dockers ומחברים קבצים אחרים, כמו קוד פתוח עם קודים.

יתרונות מרכזיים של הסביבה המתקרנת עבור Onboarding

שקיפות מול מכונות

כאשר מפתח חדש משטב מחדש את המאגר ורץ:0) הם מקבלים את אותה גרסה פייתון בדיוק, מודולי Node, שירות מסד נתונים, ספריות מערכת שאר הצוות משתמש.לא יותר דיסקרטיות בין macOS, Windows ו- Linux ההתקנה.זה עקבי באופן דרמטי את הזמן שבילה בעיות סביבתיות במהלך השבוע הראשון.

התקנה מהירה ו Teardown

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

בידוד ומניעה לסכסוכים

כל פרויקט פועל בסביבה המיכלית שלו עם מערך של תלות משלו. פרויקט הדורש פייתון 3.9 ועוד צורך ב- Python 3.12 יכול להתקיים בשלווה על אותו מחשב מפתח.בידוד הזה מונע "עבודה על המחשב שלי" באגים הנגרמים על ידי גרסאות לא מקבילות במתקנים גלובליים.

אפשרות לרישום מסמכים

במקום לשמור על מדריכי התקנה ארוכים, שגיאות-פרון, הצוותים יכולים פשוט לתעד: "Install Docker, השיבוט את ה-FLT:1" (Dockerfile ו- docker-compose.yml הופך למקור האמת היחיד של ההגדרה של הסביבה.עדכונים לסביבה (למשל, הוספת שירות cache או שדרוג ספריית) נעשים ב-Docker ו-Computed קבצים באופן אוטומטי.

סקאביה לבדיקות ו- CI/CD

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

צעד אחר צעד מדריך ליצירת סביבת פיתוח דוקרנית

1.כתבו את Dockerfile

הדוקרפטה היא מדפסת כחולה עבור מיכל הפיתוח שלך.זה מפרט תמונה בסיסית (למשל, FLT:2 או FLT 3:3)), מתקין חבילות מערכת, עותקים קוד יישום, וקובע את לוח העבודה. for Development, בדרך כלל רוצה יכולות עומס חם.כאן הוא דוגמא פשוטה עבור Node.js:

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]

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

צור קובץ docker-compose.yml File

עבור רוב הפרויקטים, אתה צריך יותר מאשר רק מיכל היישום - מסד נתונים, מטמון או שירות תור. Docker Compose Orchestrates מספר מכולות, רשתות, כרכים, ומשתנים סביבתיים.דוגמה עבור אפליקציית Node.js עם PostgreSQL ו Redis:

version: '3.8'
services:
 app:
 build: .
 ports:
 - "3000:3000"
 volumes:
 - .:/app
 - /app/node_modules
 environment:
 - DATABASE_URL=postgres://user:pass@db:5432/mydb
 - REDIS_URL=redis://redis:6379
 depends_on:
 - db
 - redis
 db:
 image: postgres:15-alpine
 environment:
 POSTGRES_USER: user
 POSTGRES_PASSWORD: pass
 POSTGRES_DB: mydb
 volumes:
 - db_data:/var/lib/postgresql/data
 redis:
 image: redis:7-alpine
volumes:
 db_data:

שימו לב לנפח של קוד האפליקציות: FLT:6 ואחריו זה מבסס את המנהל המקומי שלך למכל, כך שינויים בקוד משתקפים מיד, תוך שמירה על node modules של מיכל (אשר עשוי להיות שונה מן המארח). דפוס זה מאפשר עומס חם בפיתוח.

3. בנה את התמונה

(או ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇

4.להריץ את ה- Container

(ב) "החליש" (ב) "החליש" (החלל) צריך להיות זמין ב-[[1948]], או לכל מי שפיתם) כדי להתחיל את כל השירותים (התחילה) כדי לפעול באופן מנותק, הקש Ctrl+C או RunFLT:13.

5.שתף את ההתקנה עם הצוות

התחייב את Dockerfile ו docker-compose.yml לשלוט בגרסה, יחד עם קצת יותר מ-readme כי להורות למפתחים חדשים להתקין את Docker Desktop (או Docker Engine) ולנהל את ה-FLT:14 באופן , לדחוף את התמונה המובנה למרשם (למשל Docker Hub, GitHuber Registry) כך יכול למשוך תמונה שנבנתה מראש של הבניין המקומי - אפילו יותר זמן.

שיטות עבודה טובות ביותר עבור סביבת פיתוח Dockerized

שמור תמונות משקל אור ומהיר לבנות

השתמש בתמונות בסיס רזה או אלפינינליות.מזער את מספר השכבות על ידי קיבוץ פקודות הקשורות (למשל, LT:15) להימנע התקנת חבילות מיותרות.עבור פיתוח, ייתכן שתצטרך כלים נוספים כגון כרסול או גט; להוסיף אותם בשלב התפתחות נפרד באמצעות רב-שלב של Docker.

שליטה על הכל בקונפורציה

החנות Dockerfile, docker-compose.yml, וכל תסריטי כניסה מותאמים אישית באותו רצף כמו קוד היישום.זה מבטיח את הסביבה נשאר מסנכרן עם בסיס הקוד. השתמש קובץ FLT:16 כדי לא לכלול קבצים מיותרים (לא דה mods, .git, יומניs) מן המסגרת לבנות במהירות כדי להקטין את גודל התמונה.

אוטומטי בונה ובדיקה עם CI /CD

לדוגמה, עם GitHub Actions, אתה יכול לבנות ולבדוק את תמונת דוקר על כל דחיפה.זה תופס שגיאות תצורה הסביבה מוקדם.התמונה המשמשת לפיתוח ניתן לקדם כדי לייצב וייצור לאחר בדיקות. כלים כמו Docker Compose לעבוד גם בסביבות לשילוב של סוויטות.

מסמך ההגדרה ברורה

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

שימוש בכרך ל- Live Reloading

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

סודות וסביבה משתנים באופן מאובטח

לעולם לא סודות קודים ב-Dockerfils או להלחין קבצים.שימוש במשתנים סביבתיים עבר בריצה, ובייצור, למנף סודות דוקר או בכספת חיצונית.עבור פיתוח, ניתן להשתמש בקובץ FLT 18 שהוזכר על ידי Dockerose (למשל, FLT:19).

מלכודות נפוצות וכיצד להימנע מהם

בעיות עם הר געש

בלינוקס, קבצים שנוצרו בתוך מיכל על ידי משתמש לא-בסיס עשויים להיות בעלי התאמות בעלות עם המשתמש המארח.כדי להימנע מכך, להגדיר את המשתמש המכולה כדי להתאים את המארח UID ו- GID, או להשתמש ב-Docker ללא שורש. על macOS ו- Windows, זה פחות בעיה כי Docker פועל בתוך VM.

לאט לאט לאט לבנות את הזמן מ-Cache Invalidation

אם אתה לעתים קרובות לשנות את Dockerfile, שכבות ה- cache שלך להיות מחוספס, גורם בנייה מלאה.מבנה Dockerfile שלך כך שהוראות שינוי לפחות (למשל, התקנת חבילות מערכת) לבוא ראשון, אז תלות יישומים, אז הקוד.

התנגשות הנמל

אם נמל (למשל, 3000) כבר בשימוש על המארח, Docker Compose להיכשל. השתמש במשתנה הסביבה או מיפוי נמל אחר למפתח. לחלופין, להורות למפתחים להפסיק את השירותים או להשתמש במיפוי נמל דינמי (למשל, FLT 22 כדי להשיג נמל אקראי).

שכחה לבנות מחדש לאחר שינויים בעקביות

כאשר אתה מעדכן (FLT:23 או FLT:24), למכל עדיין יש את התלויות הישנות ( RunFLT:25) כדי לכפות בנייה מחדש.

דוגמאות וסיפורי הצלחה אמיתיים

ארגונים רבים אימצו סביבות dev מבוזרות להאיץ את הצפה.לדוגמה, חברת SaaS בגודל בינוני הפחיתה את זמן ה-SaaS של מפתחים חדשים מ-3 ימים עד שעה על ידי מעבר מהגדרת ידני מורכב לערומה עם PostgreSQL, Redis, ו- microservice backend.The Team תיעד את גישתם ב-FLT:0) Docker זה פוסט-Falvetrated 1:1.

הכלי של Shopify ו- GitHub Codespaces הם דוגמאות מסחריות של סביבות מנוכלות מרחוק.בעוד שאתה לא צריך לאמץ IDE מרחוק מלא, העיקרון נשאר: להגדיר את הסביבה בקוד ולתת למפתחים לסובב אותו מיד. מאמר על FLT:0 Docker Dev EnvironmentsFLT:1 מסביר כיצד לאפשר לצוותים ליצור סביבות חוזרות, משותפות.

פרויקטים בקוד פתוח כמו Laravel Sail (עבור PHP) ו- FLT:0 ⁇ ⁇ רשמי Docker Composeph FLT:1 פיתחו את התבנית הזאת.Lavel Sail לפני אריזה את הסביבה PHP, MySQL, Redis ו- Mailhog לתוך ערימה דוקרנית כי כל מפתח לליבר יכול להתחיל עם פקודה אחת.

בסביבה הקרובה של Modern IDEs

ה- IDEs של היום מספקים תמיכה ראשונה לפיתוח מכולות.הסיומת של Visual Studio מרחוק - Containers מאפשרת לך לפתוח תיקיה בתוך מיכל ולהשתמש בחוויית הקוד ה- VS המלא.הסיומת קוראת קובץ פרוטוקול FLT:26 כדי להגדיר את המכולה, להתקין הרחבות ולהגדיר הגדרות.זה הופך למעשה Docker לתוך מכונת הפיתוח, ביטול הצורך להתקין שעות על המארח.

JetBrains IDEs (IntelliJ, PyCharm, WebStorm) מציעים יכולות התפתחות מרחוק דומות על SSH או ישירות עם Docker. על ידי שילוב של סביבה מתוקרנת עם תכונות IDE אלה, מפתחים מקבלים את הטוב ביותר של שני העולמות: לוח זמנים קבוע מקוטב ניסיון עריכה מוכר עם debuing, linting, ובדיקה משולבת.

שיקולים ביטחוניים עבור יצרני פיתוח

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

  • (ב) ,0) , פועל כמשתמש לא-בסיס: בורא עולם: (ב) יוצר משתמש ב- Dockerfile (למשל, FLT:27) ומעביר אליו עם FLT:28 וזה מקטין את הסיכון של שינויים במערכת מקרית.
  • (FLT:0) תמונות של פרצות: ההרחבה 1 (DueFLT:1) השתמש ב-Docker Scout או בסורקי צד שלישי ב- CI שלך כדי לבדוק תמונות בסיס עבור תמונות בסיס ידועות.עדכון תמונות בסיס קבוע.
  • (ב) ⁇ רשת רשת:0) חשיפה לרשת: 1 ב- docker-compose.yml, לחשוף רק את הנמלים הדרושים לפיתוח.
  • (FLT:0) אל תניף את השקע הדוקר לתוך מיכל אלא אם כן נדרש לחלוטין: ההרחבה 1 (DeveFLT:1) הר השקע דוקר נותן את הגישה ברמת המיכל למארח Docker daemon, המהווה סיכון אבטחה.

ביקורת על ההשפעה: Onboarding Time and Developer Satisfaction

צוותים אשר מאמצים סביבות דוקרות לעתים קרובות מדווחים על שיפורים משמעותיים.על פי חוק של מדינת יישום של דו"ח פיתוח יישומים (Docker) 1, 45% מהנשאלים אמרו כי מיכליזציה מופחתת זמן ההתקנה על ידי יותר ממחצית. שביעות רצון מפתח עולה כי הם מבלים פחות זמן היאבקות עם בעיות ויותר זמן כתיבת קוד.

כדי לכמת את היתרון, לעקוב אחר מדדים כגון זמן ממוצע להתחייב לראשונה עבור שוכרים חדשים, מספר כרטיס תמיכה הקשורה להגדרה, ואת תדירות "עבודה על המחשב שלי" תקריות לאחר מעבר לסביבות דוקרות, צוות של 20 מפתחים ראה ירידה של 70% בבקשות תמיכה בשבוע הראשון ועלייה של 60% בתרומות קוד במהלך החודש הראשון.

מסקנה

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

התחל קטן: מכולות שירות יחיד בפרויקט שלך.לאחר שאתה רואה את היתרונות, להרחיב כדי לכסות את כל השירותים, מסדי נתונים ועוזרי פיתוח.התחייב את הקבצים Docker, לעדכן את ה-ReadME שלך, ולצפות את זמן ההצפה שלך מתכווץ.עם התמיכה הנוספת של מערכות IDEs ו- CIS CI מודרניים, מעולם לא הייתה תקופה טובה יותר לאמץ פיתוח מקוטב מהר יותר, חלק על הסיפון.