יצירת מאגר מרוחק ב-Docker Hub
מאגרי מידע מרוחקים ב-Artifact Registry מאפשרים להשתמש ב-proxy ולשמור במטמון תמונות של קונטיינרים מ-Docker Hub כדי לצמצם את זמן האחזור של ההורדה ולעקוף מגבלות קצב לא מאומתות. במדריך למתחילים הזה מוסבר איך להגדיר את פרטי הכניסה ל-Docker Hub ב-Secret Manager, ליצור מאגר מרוחק ולמשוך תמונת לדוגמה.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
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.enablepermission. 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.-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init -
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
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.enablepermission. 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.-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init - יוצרים חשבון ב-Docker Hub.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות ליצירת מאגר מרוחק של Docker Hub, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
-
כדי ליצור מאגרים מרוחקים ולתת גישה למאגרים ספציפיים: אדמין Artifact Registry (
roles/artifactregistry.admin) בפרויקט -
כדי ליצור סודות ולנהל אותם: התפקיד Secret Manager Admin (
roles/secretmanager.admin) בפרויקט
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
בחירת מעטפת
כדי להשלים את המדריך למתחילים הזה, משתמשים ב-Cloud Shell או במעטפת המקומית.
- Cloud Shell
- Cloud Shell היא סביבת מעטפת לניהול משאבים שמתארחים ב- Google Cloud. הוא מגיע עם Docker ו-Google Cloud CLI, ממשק שורת הפקודה הראשי של Google Cloud.
- מעטפת מקומית
- אם אתם מעדיפים להשתמש במעטפת המקומית, עליכם להתקין את Docker ואת ה-CLI של gcloud בסביבה שלכם.
הפעלת Cloud Shell
כדי להפעיל את Cloud Shell:
עוברים אל Google Cloud המסוף.
לוחצים על הלחצן Activate Cloud Shell (הפעלת Cloud Shell):
.
בחלק התחתון של המסוף ייפתח סשן של Cloud Shell בתוך מסגרת.
משתמשים בשורת הפקודה הזו כדי להריץ פקודות gcloud.
הגדרת מעטפת מקומית
כדי להתקין את ה-CLI של gcloud ואת Docker, מבצעים את השלבים הבאים:
מתקינים את ה-CLI של gcloud. כדי לעדכן התקנה קיימת, מריצים את הפקודה
gcloud components update.אם Docker עדיין לא מותקן, צריך להתקין אותו.
כדי לבצע פעולות במאגרי מידע, ל-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 הוא שם המשתמש שלכם.
כדי שהשינויים במינוי לקבוצה ייכנסו לתוקף, צריך לצאת מהחשבון ולהיכנס אליו שוב. אם אתם משתמשים במכונה וירטואלית, יכול להיות שתצטרכו להפעיל מחדש את המכונה הווירטואלית כדי שהשינויים במינוי ייכנסו לתוקף.
כדי לוודא ש-Docker פועל, מריצים את פקודת Docker הבאה, שמחזירה את השעה והתאריך הנוכחיים:
docker run --rm busybox dateהדגל
--rmמוחק את מופע הקונטיינר ביציאה.
הגדרת אימות ב-Docker Hub
כדי למנוע שימוש במכסת Docker Hub לא מאומתת, מומלץ לבצע אימות ל-Docker Hub כשמשתמשים במאגרי מידע מרוחקים. מאגרים מרוחקים מאפשרים להוסיף את שם המשתמש שלכם ב-Docker Hub ואת אסימון הגישה האישי שנשמר כסוד כדי לבצע אימות ב-Docker Hub.
יצירת אסימון גישה אישי ב-Docker Hub
- מתחברים ל-Docker Hub.
- יוצרים אסימון גישה אישי עם הרשאות לקריאה בלבד.
מעתיקים את טוקן הגישה.
שומרים את אסימון הגישה בקובץ טקסט במחשב המקומי או ב-Cloud Shell.
שמירת אסימון הגישה האישי בסוד
console
-
נכנסים לדף Secret Manager במסוף Google Cloud .
-
בדף Secret Manager, לוחצים על Create Secret (יצירת סוד).
-
בדף Create secret, בשדה Name, נותנים שם לסוד
my-secret -
בשדה Secret value (ערך הסוד), מזינים את טוקן הגישה האישי שלכם ב-Docker Hub.
-
משאירים את הקטע אזורים ללא שינוי.
-
לוחצים על הלחצן Create secret.
CLI של gcloud
gcloud secrets create my-secret --data-file="/path/to/file.txt"
כאשר /path/to/file.txt הוא המיקום של קובץ הטקסט עם אסימון הגישה האישי.
מעניקים לחשבון השירות של Artifact Registry גישה לסוד
console
-
נכנסים לדף Secret Manager במסוף Google Cloud .
-
בדף Secret Manager, לוחצים על תיבת הסימון לצד
my-secret. -
אם החלונית לא פתוחה, לוחצים על Show Info Panel כדי לפתוח אותה.
-
בחלונית המידע, לוחצים על Add Principal.
-
באזור הטקסט New principals, מזינים את כתובת האימייל של חשבון השירות של Artifact Registry. כתובת האימייל בחשבון השירות של Artifact Registry היא בפורמט הבא
service-PROJECT-NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com
כאשר PROJECT-NUMBER הוא מספר הפרויקט.
כדי למצוא את מספר הפרויקט:
-
נכנסים לדף Dashboard במסוף Google Cloud .
-
לוחצים על הרשימה הנפתחת Select from (בחירה מתוך) בחלק העליון של הדף.
-
בחלון בחירה מתוך שמופיע, בוחרים את הפרויקט.
מזהה הפרויקט ומספר הפרויקט מוצגים בכרטיס Project info בלוח הבקרה של הפרויקט.
-
-
בתפריט הנפתח 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 .
-
לוחצים על הרשימה הנפתחת 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.
מתחברים ל-CLI של gcloud בתור המשתמש שיריץ את פקודות Docker.
gcloud auth loginכדי להגדיר אימות למאגרי Docker באזור
us-central1, מריצים את הפקודה הבאה:gcloud auth configure-docker us-central1-docker.pkg.devהפקודה מעדכנת את ההגדרות של Docker. עכשיו אפשר להתחבר אל Artifact Registry בפרויקט Google Cloud כדי לשלוח תמונות ולמשוך אותן.
מידע על שיטות אימות אחרות זמין במאמר בנושא שיטות אימות.
שליפת תמונה למאגר מרוחק
מתחברים ל-CLI של gcloud בתור המשתמש שיריץ את פקודות Docker.
gcloud auth loginמורידים תמונה מ-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.
-
מציגים את רשימת הארטיפקטים שמאוחסנים במאגר המרוחק:
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 על המשאבים שבהם השתמשתם בדף הזה:
מחיקת המאגר
אם אתם רוצים לשמור את הפרויקט ולמחוק רק את משאב המאגר, אתם צריכים לפעול לפי השלבים שמפורטים בקטע הזה. אם רוצים למחוק את הפרויקט כולו, צריך לפעול לפי השלבים במאמר מחיקת הפרויקט.
לפני שמסירים את המאגר, צריך לוודא שכל התמונות שרוצים לשמור זמינות במיקום אחר.
כדי למחוק את המאגר:
המסוף
פותחים את הדף Repositories במסוף Google Cloud .
ברשימת המאגרים, בוחרים במאגר
quickstart-docker-hub-remote.לוחצים על Delete.
gcloud
כדי למחוק את מאגר quickstart-docker-hub-remote, מריצים את הפקודה הבאה:
gcloud artifacts repositories delete quickstart-docker-hub-remote \ --location=us-central1
מחיקת הפרויקט
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.