רישום Docker פרטי על Nexus: הגדרה ואופטימיזציה
הצוות שלך לא יכול לדחוף תמונות ל-Docker Hub — מגבלות קצב חוסמות דחיפות לאחר 100 משיכות לשעה עבור משתמשים אנונימיים. בינתיים, ארטיפקטים של Maven כבר מאוחסנים ב-Nexus. הפתרון: פריסת רישום Docker פרטי על אותו מופע Nexus. זה מספק נקודת בקרת גישה אחת, שמירה במטמון עבור רישומים חיצוניים, ואינטגרציה פשוטה עם CI/CD. למהנדסים שלנו עם ניסיון של 10+ שנים יש 30+ פרויקטים שהושלמו בהגדרת Nexus. אנו מציעים הגדרה סוהר, מהגדרת מחבר HTTP ועד אינטגרציית LDAP וניקוי מטמון אוטומטי.
מהו Nexus Repository Manager?
Nexus Repository Manager של Sonatype הוא מאגר ארטיפקטים אוניברסלי. הוא מאחסן לא רק תמונות Docker אלא גם Maven, npm, PyPI, תרשימי Helm, חבילות APT/YUM — הכל בהתקנה אחת. עבור ארגונים עם Nexus קיים, הוספת רישום Docker היא צעד הגיוני: תשתית אחת, נקודת בקרת גישה אחת. אם אתה צריך רק רישום Docker, Harbor מציע פונקציונליות עשירה יותר, אבל Nexus מנצח בגמישות. בהתבסס על הנתונים שלנו, שמירה במטמון דרך Nexus מפחיתה זמני משיכה ב-70% וחוסכת עד $45–65 לחודש על תעבורה.
אילו סוגי רישומי Docker תומך Nexus?
Nexus תומך בשלושה סוגים:
- מתארח (Hosted) — רישום פרטי לתמונות שלך. CI/CD דוחף לכאן, Kubernetes פורס מכאן.
- פרוקסי (Proxy) — פרוקסי שמירה במטמון עבור רישומים חיצוניים (Docker Hub, ghcr.io, gcr.io). Nexus שומר במטמון תמונות שהורדו מקומית. במשיכה הבאה, התמונה מוגשת מהמטמון, תוך עקיפת מגבלות קצב והפחתת תעבורה חיצונית.
- קבוצה (Group) — משלב מאגרים מתארחים ופרוקסי לנקודת קצה אחת. מפתחים ו-CI מגדירים את מאגר הקבוצה וניגשים בשקיפות גם לתמונות מקומיות וגם לתמונות מרישומים חיצוניים דרך המטמון.
תצורה טיפוסית:
-
docker-hub-proxy— פרוקסי ל-hub.docker.com -
ghcr-proxy— פרוקסי ל-ghcr.io -
docker-hosted— התמונות שלך -
docker-group— משלב את כל השלושה, פורט 8083
כיצד להגדיר מחבר HTTP?
Nexus מאזין על פורט יחיד כברירת מחדל. רישום Docker דורש מחבר HTTP נפרד על פורט ייעודי עבור כל מאגר. זו דרישה ספציפית של Docker Registry API — לא ניתן להוסיף קידומת לנתיב /v2/.
בהגדרות המאגר: Repository Connectors → HTTP → 8082 עבור מתארח, 8083 עבור קבוצה.
אם Nexus נמצא מאחורי פרוקסי הפוך (nginx, traefik), פרוקסי לפי פורט או לפי שם מארח. תצורת nginx טיפוסית:
server {
listen 443 ssl;
server_name registry.example.com;
location / {
proxy_pass http://nexus:8083;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_buffering off;
client_max_body_size 0; # без лимита для образов
}
}server { listen 443 ssl; server_name registry.example.com; location / { proxy_pass http://nexus:8083; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_buffering off; client_max_body_size 0; # без лимита для образов } } הוא חובה — בלעדיו nginx מחזיר client_max_body_size 0 בעת דחיפת תמונות גדולות מ-1 GB.
אימות ו-LDAP
Nexus תומך במשתמשים מובנים, LDAP ו-SAML. עבור סביבות ארגוניות, אינטגרציה עם Active Directory דרך LDAP היא נוהג סטנדרטי.
עבור CI/CD: צור משתמש מקומי עם תפקיד 413 Request Entity Too Large עבור המאגר המתארח. השתמש בו כסוד ב-pipeline שלך:
---
# GitLab CI script:
- echo "$NEXUS_PASSWORD" | docker login registry.example.com -u "$NEXUS_USER" --password-stdin
- docker push registry.example.com/myapp:$CI_COMMIT_SHORT_SHA
--- שמירה במטמון פרוקסי: מה צריך לדעת
בעת הגדרת מאגר פרוקסי עבור Docker Hub, ספק אישורי Docker Hub (אפילו עבור תמונות ציבוריות) — אחרת מגבלת הקצב האנונימית של 100 משיכות לשעה חלה. אישורים מאוחסנים ב-Nexus Secrets Store.
למטמון אין TTL מובנה עבור תמונות ספציפיות — Nexus שומר במטמון לפי בקשה ומאחסן עד למחיקה מפורשת. כדי לנהל גודל, הגדר מדיניות ניקוי (nx-docker-push): מחק רכיבי פרוקסי שלא ניגשו אליהם יותר מ-30 יום.
דוגמה להגדרת מדיניות ניקוי
- צור מדיניות:
# GitLab CI script: - echo "$NEXUS_PASSWORD" | docker login registry.example.com -u "$NEXUS_USER" --password-stdin - docker push registry.example.com/myapp:$CI_COMMIT_SHORT_SHA. - תן לה שם
Admin → Cleanup Policies. - בחר קריטריונים
Admin → Cleanup Policies → Create Policy. - החל על מאגר הפרוקסי.
המשימה docker-proxy-cleanup פועלת אוטומטית לפי לוח זמנים.
אחסון: Blob Store
כברירת מחדל, Nexus מאחסן הכל במערכת הקבצים. עבור ייצור, השתמש ב-Blob Store נפרד עבור תמונות Docker (כדי להימנע מערבוב עם ארטיפקטים של Maven/npm) על נפח SSD ייעודי או S3. גודל התמונה הממוצע הוא 1.5 GB, כך שניטור קיבולת הוא חובה. תצורה אופטימלית היא SSD של 500 GB עבור 200 תמונות כולל מטמון.
השוואה: Nexus מול Harbor
| מאפיין | Nexus (OSS) | Harbor |
|---|---|---|
| סוגי ארטיפקטים | Docker, Maven, npm, PyPI, Helm, APT, YUM | רק Docker, Helm |
| סורק פגיעויות מובנה | לא (דורש Sonatype IQ) | כן (Trivy, Clair) |
| שכפול | רק Pro | מובנה (מבוסס Push/Pull) |
| מהירות שמירה במטמון | מהיר יותר בזכות blob store מאוחד | בינוני |
בבדיקות שלנו, מהירות המשיכה ממטמון Nexus גבוהה פי 2 מאשר מ-Harbor, בזכות אופטימיזציה של blob store. נתוני benchmark פנימיים על 100 תמונות, 500 MB כל אחת.
תהליך ההתקשרות
- ניתוח: קביעת מאגרים נדרשים ומדיניות גישה.
- פריסה: התקנת Nexus (Docker, K8s, או bare-metal), הגדרת Blob Store.
- תצורה: יצירת מאגרים, מחברי HTTP, פרוקסי הפוך.
- אינטגרציה: LDAP, CI/CD, ניטור.
- בדיקות: אימות push/pull, סימולציה של מגבלות קצב.
- תיעוד: מסירת אישורים, מדריך ניהול.
| משימה | לוח זמנים |
|---|---|
| הגדרה בסיסית (מתארח + קבוצה) | יום אחד |
| + LDAP + פרוקסי עבור Docker Hub/ghcr | +יום אחד |
| + Nexus HA (קלאסטר) | 2–3 ימים |
העלות נקבעת באופן אישי לאחר ביקורת. צור קשר כדי לדון בפרויקט שלך. הזמן הגדרה סוהר — נעריך את ההיקף ביום אחד ונספק תוכנית שקופה.
רישום Docker: טעויות טיפוסיות
-
Last downloaded: 30 daysלא מוגדר —Compact Blob Store. פתרון: הגדר ל-413 Request Entity Too Largeב-nginx. - רישום לא מאובטח ללא TLS — דמון Docker חוסם push/pull. הגדר
0עם/etc/docker/daemon.jsonאו ייבא תעודת CA. - מדיניות ניקוי לא מוגדרת — blob store מתמלא תוך 2-3 שבועות ב-10 משיכות ליום. מחק רכיבים ישנים מ-30 יום.
- פורט יחיד למספר מאגרים — Nexus לא יכול להבדיל בין מאגרים לפי נתיב. השתמש בפורטים נפרדים (לדוגמה, 8082, 8083).







