מערכת רשמת אקוורדים היא ספריה אחסון שממנה אתה יכול לשלוח ולהוציא תמונות אקוורדים.
יש רבים מרשמות ציבוריים ופרטיים שזמינים לפיתוח כמו Docker Hub, Amazon ECR, וGoogle Cloud Artifact Registry. אבל לפעמים במקום לסמוך על ספק חיצוני, אתה אולי תרצה לאחסן את התמונות שלך בעצמך. זה יעניק לך יותר שליטה על איך הרשמת האקוורדים מוגדרת והמקום בו מאחסן התמונות האקוורדיות.
המאמר הזה הוא מדריך ידני שילמח אתך על איך לאחסן בעצמך רשמת אקוורדים.
תוכן המאמר
תהיינה לך הרבה יותר תועלת מהמאמר הזה אם אתה כבר מורגל לשימוש בכלים כמו Docker ו NGINX ושימושים בסה"כ במושג מאפיין התא.
מהו תמונה תא?
לפני שאנחנו נדבר על מערכות ריגסציום, בואו נבין מה היא תמונה תא. בקיצור, תמונה תא היא ערימה שכוללת את כל הקבצים, ספרי הביתות וההגדרות הנחוצים להריץ תא. הן מורכבות משכבותבהן כל שכבה מייצגת ערימת שינויים במערכת הקבצים שמוסיפה, מוסיפה או מערבבת קבצים.
הדרך הכי נפוצה ליצירת תמונה תא היא בעזרת Dockerfile.
# בניית תמונה
docker build -t pliutau/hello-world:v0 .
# בדיקה של תמונות מקומיות
docker images
# מאגר סימן מזהה תמונה יצירה גודל
# hello-world latest 9facd12bbcdd 22 שניות לאחרונה 11MB
זה יוצר תמונה תוך תא שנאחסינה על המכונה המקומית שלך. אך מה אם תרצה לשתף את התמונה הזו עם אחרים או להשתמש בה על מכונה אחרת? זה המקום בו מגיעים מערכות רשימות התאים.
מה הוא מערך התאים?
מערך התאים הוא קטלוג אחסון בו ניתן להוליך ולשלוח תמונות תאים. התמונות מוסודות במאגרים, שהם אוסף של תמונות תאים קשורות בשם אחד. לדוגמה, במערך Docker Hub, nginx הוא שם המאגר של תמונות תאי NGINX בגרסאות שונות.
חלק מהמערכות האלה הם מקומים ציבוריים, שבמשמעותם, התמונות שמאחסנות בהם נגישות לכל אחד ברשת. מערכות ציבוריות כמו Docker Hub הם אפשרות טובה לאחסון פרויקטים פתוחים.
מצד שני, מערכות פרטיות מספקות דרך לשלב בהן אבטחה ופרטיות לאחסון תמונות תאים עסקיים, בין אם הם מאחסנים בעיקר בענן או במקום. המערכות הפרטיות האלה נובעות לעיתים עם תכונות אבטחה מתקדמות ותמיכה טכנית.
יש רשימה גדלה של מערכות פרטיות כמו Amazon ECR, GCP Artifact Registry, GitHub Container Registry, וגם Docker Hub מציע תכונה למאגר פרטי.
כמפתח, אתה מתקשר עם רשומת מיכלים כאשר אתה משתמש בפקודות docker push
ו־docker pull
.
docker push docker.io/pliutau/hello-world:v0
# במקרה של Docker Hub ניתן גם לדלג על חלק הרשומה
docker push pliutau/hello-world:v0
בואו נסתכל על האנטומיה של כתובת URL של תמונת מיכל:
docker pull docker.io/pliutau/hello-world:v0@sha256:dc11b2...
| | | |
↓ ↓ ↓ ↓
registry repository tag digest
למה תרצה להכניס לשימוש רשומת מיכלים באופן עצמאי
לעיתים קרובות, במקום לסמוך על ספק כמו AWS או GCP, תרצה לארח את התמונות שלך בעצמך. דבר זה שומר על התשתית שלך בפנים ומפחית את התלות שלך בספקים חיצוניים. במספר תעשיות המוחזקות בדרישות קשות, זהו כולל דרישה.
רישומת מיכלים שאורחת עצמית פועלת על השרתים שלך, מעניקה לך יותר שליטה על אופן ההגדרה של הרישומת ועל מקום אירוח התמונות של המיכלים. בו זמנית, זה מתקיים בעלות של שמירה ואבטחת הרישומת.
כיצד לארח באופן עצמאי רישומת מיכלים
קיימות מספר פתרונות לרישומת מיכלים פתוחים הזמינים. הפתרון הפופולרי ביותר נתמך רשמית על ידי Docker, נקרא registry, עם המימוש שלו לאחסון והפצת תמונות מיכלים וארטיפקטים. כך שניתן להפעיל רישומת משלך בתוך מיכל.
הנה השלבים העיקריים להפעלת רישומת על שרת:
-
התקן Docker ו־Docker Compose על השרת.
-
קבע והפעל את המיכל של registry.
-
רץ NGINX על מנת לטפל בTLS ולהעביר בקשות אל אחסון הרישיונים.
-
הגדר סיסמאות SSL ומתגדל את האימייל.
שלב 1: התקנה של Docker ו Docker Compose על השרת
ניתן להשתמש בשרת כלשהו שתומך על Docker. לדוגמה, ניתן להשתמש בנקודה DigitalOcean Droplet עם Ubuntu. עבור הדמות הזו השתמשתי ב Google Cloud Compute כדי ליצור מחשב וירטואלי עם Ubuntu.
neofetch
# מערכת ההפעלה: Ubuntu 20.04.6 LTS x86_64
# מערך המעבדה: Intel Xeon (2) @ 2.200GHz
# הזירת הזיכרון: 3908MiB
אחרי שנכנסים לתוך המחשב הוירטואלי שלנו, עלינו להתקין Docker ו Docker Compose. Docker Compose הוא אפשרי, אך הוא מקל יותר לניהול יישומים עם כמה תחביבים.
# התקנה של מנוע הדוקר ו docker-compose
sudo snap install docker
# אימות ההתקנה
docker --version
docker-compose --version
שלב 2: הגדרה וריציית התחתית ה
אחסון הרישיוניםבהמשך אנחנו צריכים להגדיר את התחתית הזו. הם שונים compose.yaml יעשו תחתית אחסון עם תחביב לאחסון התמונות ות
services:
registry:
image: registry:latest
environment:
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.password
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
volumes:
# מount את הקובץ עם הסיסמאות
- ./registry/registry.password:/auth/registry.password
# מount את התיקייה עם המידע
- ./registry/data:/data
ports:
- 5000
קובץ הסיסמאות המוגדר בREGISTRY_AUTH_HTPASSWD_PATHמשמש לאמת את המשתמשים בזמן שהם מורידים או מעלים תמונות מהרגיסטרי. עלינו ליצור קובץ סיסמאות בעזרת הפקט הhtpasswd. אנחנו גם צריכים ליצור תיקייה לאחסון התמונות.
mkdir -p ./registry/data
# התקנת htpasswd
sudo apt install apache2-utils
# יצירת קובץ סיסמאות. שם משתמש: busy, סיסמא: bee
htpasswd -Bbn busy bee > ./registry/registry.password
עכשיו אנחנו יכולים להתחיל את התוך הרגיסטרי. אם אתם רואים את המסר הזה, אז הכל עובד כפי שהיינו צריכים:
docker-compose up
# הריצה מוצלחת צריכה ליצור משהו כמו זה:
# registry | level=info msg="listening on [::]:5000"
שלב 3: בעיית הנייגין עבור TLS
כפי שהזכרתי קודם, אנחנו יכולים להשתמש בנייגין עבור TLS והעברת הבקשות אל תוך התוך הרגיסטרי.
רגיסטרי דוקר דורש סימן סיסמא סולידי ומואצה כדי לעבוד. אתה יכול להשתמש במשהו כמו Let's Encryptאו להשיג אותו באופן ידני. ודא שיש לך שם הרשת שמוכוון אל השרת (registry.pliutau.com במקרה שלי). עבור הדמות הזו אני כבר השיגתי את הסימנים בעזרת certbot ושמתי אותם בתיקייה ./nginx/certs</di
מאז אנחנו מנהלים את מערכת הג 'רסים של דוקר בתוך תא, אנחנו יכולים להריץ NGINX בתוך תא גם על-ידי הוספת שירות נוסף למפות compose.yaml:
services:
registry:
# ...
nginx:
image: nginx:latest
depends_on:
- registry
volumes:
# מount את ההגדרות של nginx
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
# מount את התעודות שנרכשו מ Let's Encrypt
- ./nginx/certs:/etc/nginx/certs
ports:
- "443:443"
הקובץ של ה nginx.conf שלנו יכול להיראות כך:
worker_processes auto;
events {
worker_connections 1024;
}
http {
upstream registry {
server registry:5000;
}
server {
server_name registry.pliutau.com;
listen 443 ssl;
ssl_certificate /etc/nginx/certs/fullchain.pem;
ssl_certificate_key /etc/nginx/certs/privkey.pem;
location / {
# הגדרה חשובה לגבי התמונות הגדולות
client_max_body_size 1000m;
proxy_pass http://registry;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 900;
}
}
}
מוכן להתחיל!
אחרי השלבים האלה, אנחנו יכולים להריץ את התאים של הג'רסים ושל Nginx.
docker-compose up
עכשיו, מצידו של הלקוח, אתה יכול להעלות ולשלוח את התמונות מהג'רסים שלך. אבל קודם כל אנחנו צריכים להתחבר לג'רסים.
docker login registry.pliutau.com
# שם המשתמש: עסיסי
# סיסמה: דבי
# התחברות נעשתה בהצלחה
הזמן לבנות ולהעלות את התמונה שלנו לג'רסים המשלמת על-ידינו:
docker build -t registry.pliutau.com/pliutau/hello-world:v0 .
docker push registry.pliutau.com/pliutau/hello-world:v0
# v0: digest: sha256:a56ea4... size: 738
על השרת שלך ניתן לבדוק את התמונות המעלות בתוך תיקיית הנתונים:
ls -la ./registry/data/docker/registry/v2/repositories/
אפשרויות נוספות
על פי הדוגמה הקודמת, אתה יכול גם להריץ את הג'רסים על קובעץ קובעץ קובעץ קובעץ. או שאתה יכול להשתמש בשירות הג'רסים הניהל ע
גם אם אתה רוצה לקבל משהו שמתחבר לעזרתך למאגר העצמי שלך, אתה יכול להשתמש בפרוייקט כמו joxit/docker-registry-ui ולהריץ אותו בתא נפרד.
סיכום
מאגרי העקבות האוטומטיים המשאלים מאפשרים לך לקבל שליטה מושלמת במאגר שלך ובדרך בה הוא מופץ. באותו זמן, זה מגיע עם מחיר של שימור ואבטחה של המאגר.
לגמרי מה שאתה מסיק למנהיגות מאגר עצמאי, עכשיו אתה יודע איך לעשות את זה. ממש לאחר מכן אתה יכול להשוות את האפשרויות השונות ולבחור את האחת הטובה ביותר עבור הדרכך האישית שלך.
אתה יכול למצוא את כל הקוד המקורי להדגמה הזו על GitHub. גם אתה יכול לצפות בו כסרטון על ערימת הסרטונים שלנו בYouTube.
Source:
https://www.freecodecamp.org/news/how-to-self-host-a-container-registry/