יצירת מאגר מרוחק ב-Docker Hub

מאגרי מידע מרוחקים ב-Artifact Registry מאפשרים להשתמש ב-proxy ולשמור במטמון תמונות של קונטיינרים מ-Docker Hub כדי לצמצם את זמן האחזור של ההורדה ולעקוף מגבלות קצב לא מאומתות. במדריך למתחילים הזה מוסבר איך להגדיר את פרטי הכניסה ל-Docker Hub ב-Secret Manager, ליצור מאגר מרוחק ולמשוך תמונת לדוגמה.

לפני שמתחילים

  1. נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry, Secret Manager APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  7. To initialize the gcloud CLI, run the following command:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Artifact Registry, Secret Manager APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  13. To initialize the gcloud CLI, run the following command:

    gcloud init
  14. יוצרים חשבון ב-Docker Hub.

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות ליצירת מאגר מרוחק של Docker Hub, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:

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

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

בחירת מעטפת

כדי להשלים את המדריך למתחילים הזה, משתמשים ב-Cloud Shell או במעטפת המקומית.

Cloud Shell
‫
Cloud Shell היא סביבת מעטפת לניהול משאבים שמתארחים ב- Google Cloud. הוא מגיע עם Docker ו-Google Cloud CLI, ממשק שורת הפקודה הראשי של Google Cloud.
מעטפת מקומית
אם אתם מעדיפים להשתמש במעטפת המקומית, עליכם להתקין את Docker ואת ה-CLI של gcloud בסביבה שלכם.

הפעלת Cloud Shell

כדי להפעיל את Cloud Shell:

  1. עוברים אל Google Cloud המסוף.

    ‫Google Cloud console

  2. לוחצים על הלחצן Activate Cloud Shell (הפעלת Cloud Shell):  .

בחלק התחתון של המסוף ייפתח סשן של Cloud Shell בתוך מסגרת. משתמשים בשורת הפקודה הזו כדי להריץ פקודות gcloud.

הגדרת מעטפת מקומית

כדי להתקין את ה-CLI של gcloud ואת Docker, מבצעים את השלבים הבאים:

  1. מתקינים את ה-CLI של gcloud. כדי לעדכן התקנה קיימת, מריצים את הפקודה gcloud components update.

  2. אם Docker עדיין לא מותקן, צריך להתקין אותו.

  3. כדי לבצע פעולות במאגרי מידע, ל-Docker נדרשת גישת הרשאה. ב-Linux או ב-Windows, מוסיפים את המשתמש שמשמש להפעלת פקודות Docker לקבוצת האבטחה של Docker. ב-macOS אין צורך לבצע את השלב הזה כי Docker Desktop פועל במכונה וירטואלית כמשתמש Root.

    Linux

    קבוצת האבטחה של Docker נקראת docker. כדי להוסיף את שם המשתמש, מריצים את הפקודה הבאה:

    sudo usermod -a -G docker ${USER}
    

    Windows

    קבוצת האבטחה של Docker נקראת docker-users. כדי להוסיף משתמש משורת הפקודה של האדמין, מריצים את הפקודה הבאה:

    net localgroup docker-users DOMAIN\USERNAME /add
    

    כאשר:

    • ‫DOMAIN הוא הדומיין של Windows.
    • ‫USERNAME הוא שם המשתמש שלכם.
  4. כדי שהשינויים במינוי לקבוצה ייכנסו לתוקף, צריך לצאת מהחשבון ולהיכנס אליו שוב. אם אתם משתמשים במכונה וירטואלית, יכול להיות שתצטרכו להפעיל מחדש את המכונה הווירטואלית כדי שהשינויים במינוי ייכנסו לתוקף.

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

    docker run --rm busybox date
    

    הדגל --rm מוחק את מופע הקונטיינר ביציאה.

הגדרת אימות ב-Docker Hub

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

יצירת אסימון גישה אישי ב-Docker Hub

  1. מתחברים ל-Docker Hub.
  2. יוצרים אסימון גישה אישי עם הרשאות לקריאה בלבד.
  3. מעתיקים את טוקן הגישה.

  4. שומרים את אסימון הגישה בקובץ טקסט במחשב המקומי או ב-Cloud Shell.

שמירת אסימון הגישה האישי בסוד

console

  1. נכנסים לדף Secret Manager במסוף Google Cloud .

    כניסה לדף Secret Manager

  2. בדף Secret Manager, לוחצים על Create Secret (יצירת סוד).

  3. בדף Create secret, בשדה Name, נותנים שם לסוד my-secret

  4. בשדה Secret value (ערך הסוד), מזינים את טוקן הגישה האישי שלכם ב-Docker Hub.

  5. משאירים את הקטע אזורים ללא שינוי.

  6. לוחצים על הלחצן Create secret.

‫CLI של gcloud

gcloud secrets create my-secret --data-file="/path/to/file.txt"

כאשר /path/to/file.txt הוא המיקום של קובץ הטקסט עם אסימון הגישה האישי.

מעניקים לחשבון השירות של Artifact Registry גישה לסוד

console

  1. נכנסים לדף Secret Manager במסוף Google Cloud .

    כניסה לדף Secret Manager

  2. בדף Secret Manager, לוחצים על תיבת הסימון לצד my-secret.

  3. אם החלונית לא פתוחה, לוחצים על Show Info Panel כדי לפתוח אותה.

  4. בחלונית המידע, לוחצים על Add Principal.

  5. באזור הטקסט New principals, מזינים את כתובת האימייל של חשבון השירות של Artifact Registry. כתובת האימייל בחשבון השירות של Artifact Registry היא בפורמט הבא

    service-PROJECT-NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com

    כאשר PROJECT-NUMBER הוא מספר הפרויקט.

    כדי למצוא את מספר הפרויקט:

    • נכנסים לדף Dashboard במסוף Google Cloud .

      כניסה לדף Dashboard

    • לוחצים על הרשימה הנפתחת Select from (בחירה מתוך) בחלק העליון של הדף.

    • בחלון בחירה מתוך שמופיע, בוחרים את הפרויקט.

      מזהה הפרויקט ומספר הפרויקט מוצגים בכרטיס Project info בלוח הבקרה של הפרויקט.

  6. בתפריט הנפתח Select a role, בוחרים באפשרות Secret Manager ואז באפשרות Secret Manager Secret Accessor.

‫CLI של gcloud

gcloud secrets add-iam-policy-binding my-secret \
    --member="serviceAccount:service-PROJECT-NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com" \
    --role="roles/secretmanager.secretAccessor"

כאשר PROJECT-NUMBER הוא מספר הפרויקט.

כדי למצוא את מספר הפרויקט:

  • נכנסים לדף Dashboard במסוף Google Cloud .

    עוברים לדף Dashboard

  • לוחצים על הרשימה הנפתחת Select from (בחירה מתוך) בחלק העליון של הדף.

  • בחלון בחירה מתוך שמופיע, בוחרים את הפרויקט.

    מזהה הפרויקט ומספר הפרויקט מוצגים בכרטיס Project info בלוח הבקרה של הפרויקט.

יצירת מאגר מרוחק

כדי ליצור מאגר מרוחק ב-Artifact Registry בשם quickstart-docker-hub-remote במיקום us-central1 עם פרטי הכניסה שלכם ב-Docker Hub, מריצים את הפקודה הבאה:

gcloud artifacts repositories create quickstart-docker-hub-remote \
    --project=PROJECT_ID \
    --repository-format=DOCKER  \
    --location=us-central1 \
    --description="Remote Docker repository" \
    --mode=remote-repository \
    --remote-repo-config-desc="Docker Hub" \
    --remote-docker-repo=DOCKER-HUB \
    --remote-username=USERNAME \
    --remote-password-secret-version=projects/PROJECT/secrets/my-secret/versions/1

כאשר:

  • ‫quickstart-docker-hub-remote הוא שם המאגר. שמות המאגרים חייבים להיות ייחודיים לכל מיקום מאגר בפרויקט.
  • ‫PROJECT_ID הוא מזהה הפרויקט. אם לא מציינים את הדגל הזה, המערכת משתמשת בפרויקט הנוכחי או בפרויקט ברירת המחדל.
  • ‫us-central1 הוא המיקום האזורי או המיקום במספר אזורים של המאגר. אפשר להשמיט את הדגל הזה אם מגדירים ברירת מחדל. כדי לראות רשימה של מיקומים נתמכים, מריצים את הפקודה gcloud artifacts locations list.
  • ‫"Remote Docker repository" הוא התיאור האופציונלי של המאגר. אל תכללו מידע אישי רגיש, כי תיאורי המאגר לא מוצפנים.
  • ‫"Docker Hub" הוא תיאור אופציונלי של הגדרת המאגר החיצוני עבור המאגר המרוחק הזה.
  • ‫DOCKER-HUB מגדיר את מאגר המרוחק במעלה הזרם ל-Docker Hub הציבורי במעלה הזרם.
  • ‫USERNAME הוא שם המשתמש שלכם ב-Docker Hub.
  • ‫projects/PROJECT/secrets/my-secret/versions/1 היא גרסת הסוד שיצרתם כדי לאחסן את טוקן הגישה האישי שלכם ב-Docker Hub.

‫Artifact Registry יוצר את המאגר ומוסיף אותו לרשימת המאגרים.

הגדרת אימות Docker

כדי לדחוף או למשוך תמונות, צריך להגדיר את Docker כך שישתמש ב-Google Cloud CLI כדי לאמת בקשות ל-Artifact Registry.

  1. מתחברים ל-CLI של gcloud בתור המשתמש שיריץ את פקודות Docker.

    gcloud auth login
    
  2. כדי להגדיר אימות למאגרי Docker באזור us-central1, מריצים את הפקודה הבאה:

    gcloud auth configure-docker us-central1-docker.pkg.dev
    

    הפקודה מעדכנת את ההגדרות של Docker. עכשיו אפשר להתחבר אל Artifact Registry בפרויקט Google Cloud כדי לשלוח תמונות ולמשוך אותן.

מידע על שיטות אימות אחרות זמין במאמר בנושא שיטות אימות.

שליפת תמונה למאגר מרוחק

  1. מתחברים ל-CLI של gcloud בתור המשתמש שיריץ את פקודות Docker.

    gcloud auth login
    
  2. מורידים תמונה מ-Docker Hub למחשב ולמאגר המרוחק באמצעות הפקודה הבאה:

    docker pull us-central1-docker.pkg.dev/PROJECT/quickstart-docker-hub-remote/busybox:latest
    

    כאשר:

    • ‫us-central1 הוא המיקום של המאגר המרוחק.
    • ‫us-central1-docker.pkg.dev הוא שם המארח של מאגר Docker שיצרתם.
    • ‫PROJECT הוא מזהה הפרויקט ב- Google Cloud. אם מזהה הפרויקט מכיל נקודתיים (:), כדאי לעיין במאמר בנושא פרויקטים בהיקף הדומיין.
    • ‫quickstart-docker-hub-remote הוא המזהה של המאגר שיצרתם.
    • ‫busybox הוא שם התמונה שרוצים למשוך מ-Docker Hub אל quickstart-docker-hub-remote.
    • ‫latest היא הגרסה המתויגת של התמונה שרוצים למשוך מ-Docker Hub.

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

  3. מציגים את רשימת הארטיפקטים שמאוחסנים במאגר המרוחק:

    gcloud artifacts packages list \
        --location=us-central1 \
        --repository=quickstart-docker-hub-remote
    

    הפלט אמור להיראות כך:

    Listing items under project my-project, location us-central1, repository quickstart-docker-hub-remote.
    
    PACKAGE: busybox
    CREATE_TIME: 2023-06-19T18:59:09
    UPDATE_TIME: 2023-06-19T18:59:10
    

הסרת המשאבים

כדי לא לצבור חיובים לחשבון Google Cloud על המשאבים שבהם השתמשתם בדף הזה:

מחיקת המאגר

אם אתם רוצים לשמור את הפרויקט ולמחוק רק את משאב המאגר, אתם צריכים לפעול לפי השלבים שמפורטים בקטע הזה. אם רוצים למחוק את הפרויקט כולו, צריך לפעול לפי השלבים במאמר מחיקת הפרויקט.

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

כדי למחוק את המאגר:

המסוף

  1. פותחים את הדף Repositories במסוף Google Cloud .

    פתיחת הדף Repositories

  2. ברשימת המאגרים, בוחרים במאגר quickstart-docker-hub-remote.

  3. לוחצים על Delete.

gcloud

כדי למחוק את מאגר quickstart-docker-hub-remote, מריצים את הפקודה הבאה:

gcloud artifacts repositories delete quickstart-docker-hub-remote \
    --location=us-central1

מחיקת הפרויקט

  1. במסוף Google Cloud , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.

המאמרים הבאים