מערכת רשמת אקוורדים היא ספריה אחסון שממנה אתה יכול לשלוח ולהוציא תמונות אקוורדים.

יש רבים מרשמות ציבוריים ופרטיים שזמינים לפיתוח כמו 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.