העתקת תמונות בין מאגרי מידע

אפשר להשתמש בכלי gcrane כדי להעתיק תמונות בין מאגרי Docker ב-Artifact Registry.

אפשר גם להשתמש בכלי כדי להעתיק תמונות מ-Container Registry ל-Artifact Registry.

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

צריך לוודא שהדרישות הבאות מתקיימות:

  1. יצרתם את מאגר Docker של היעד ב-Artifact Registry עבור התמונות שאתם מעתיקים.

  2. יש לכם את ההרשאות הנדרשות:

    • התפקיד 'צפייה באובייקטים של אחסון' (roles/storage.objectViewer) או תפקיד עם הרשאות שוות ערך למאגר שממנו מעתיקים.

    • הרשאת כתיבה ב-Artifact Registry‏ (roles/artifactregistry.writer) או תפקיד עם הרשאות שוות למאגר היעד.

סקירה כללית

הכלי gcrane מפשט את ההעתקה בין מאגרי מידע, והוא תומך ב:

  • העתקה של קבוצות תמונות באמצעות פקודה אחת, כולל כל התמונות בנתיב שצוין או כל התמונות שמאוחסנות במארח רב-אזורי בפרויקט.
  • דילוג על שכבות תמונה שכבר הועלו.

הסרה של תמונות שלא בשימוש

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

הגדרת gcrane

אפשר להריץ את gcrane בסביבות הבאות:

  • מכונה של Compute Engine – משתמשים באפשרות הזו אם רוצים להעתיק מספר גדול יותר של קונטיינרים.

    עלויות: זמן הפעולה של המכונה במכונה הווירטואלית של Compute Engine. אם המכונה הווירטואלית נמצאת במיקום שונה ממאגר המקור, יכול להיות שיחולו חיובים על תעבורת נתונים יוצאת ברשת על התמונות שאתם מעתיקים.

  • Cloud Shell – אפשרות להעתקת קבוצות קטנות של כ-40GB או פחות. מכיוון שהכלי gcrane מדלג על העלאה של שכבות תמונה שכבר הועלו, המגבלה הזו היא לנתונים חדשים שאתם מעתיקים.

    העתקה של מאגרי מידע גדולים עלולה לגרום לניתוק של Cloud Shell אחרי שהבקשה חורגת מהזמן הקצוב לתגובה (10 דקות).

    עלויות: אם מופעלת אינטראקציה עם מאגר תמונות שנמצא במיקום אחר ממיקום המאגר של המקור, יכול להיות שיחולו חיובים על תעבורת נתונים יוצאת ברשת. אי אפשר לבחור את המיקום של סשן Cloud Shell. כדי לבדוק את המיקום של הסשן הנוכחי, מריצים את הפקודה:

    curl metadata/computeMetadata/v1/instance/zone
    

מומלץ להשתמש בגרסה העדכנית של הכלי gcrane כדי ליהנות מכל התכונות והשיפורים הזמינים. הוראות ההגדרה בקטעים הבאים כוללות שלבים להורדת הגרסה העדכנית.

כדי לבדוק את הגרסה של התקנת gcrane קיימת, מריצים את הפקודה:

gcrane version

הגדרת Compute Engine

כדי להעתיק תמונות באמצעות gcrane ממכונה וירטואלית של Compute Engine:

  1. איך יוצרים מופע של VM? כדי לצמצם את העלויות, כדאי ליצור את המופע באותו מיקום שבו נמצא הרישום שממנו מעתיקים.
  2. כברירת מחדל, המכונה הווירטואלית משויכת לחשבון השירות שמוגדר כברירת מחדל ויש לה הרשאות לשליפת תמונות. צריך לשנות את היקף הגישה כך שמופע המכונה הווירטואלית יוכל לדחוף תמונות.

    1. מפסיקים את המכונה הווירטואלית. מידע נוסף על עצירת מכונה

    2. כדי לשנות את היקף הגישה, מריצים את הפקודה:

      gcloud compute instances set-service-account INSTANCE --scopes=storage-rw
      

      מחליפים את INSTANCE בשם של מופע המכונה הווירטואלית.

    3. מפעילים מחדש את מכונת ה-VM. מידע נוסף זמין במאמר הפעלת מכונה מושבתת.

  3. מתחברים למופע של המכונה הווירטואלית באמצעות SSH.

  4. מריצים את הפקודה הבאה כדי להוריד את gcrane.

    curl -L \
    https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \
    -o go-containerregistry.tar.gz
    
  5. מריצים את הפקודות הבאות כדי להפוך את הפקודה gcrane לניתנת להרצה.

    tar -zxvf go-containerregistry.tar.gz
    chmod +x gcrane
    sudo mv gcrane /usr/local/bin/
    
  6. מריצים את הפקודה gcrane --help כדי לוודא שההתקנה בוצעה.

עכשיו אפשר להעתיק תמונות. כדי להמשיך:

הגדרת Cloud Shell

  1. פותחים חלון Cloud Shell.

    פתיחת Cloud Shell

  2. מגדירים את פרויקט ברירת המחדל. מחליפים את PROJECT במזהה הפרויקט שבו מותקנים Container Registry ו-Artifact Registry.

    gcloud config set project PROJECT
    
  3. מריצים את הפקודה הבאה כדי להוריד את הכלי gcrane.

    curl -L \
    https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \
    -o go-containerregistry.tar.gz
    
  4. מריצים את הפקודות הבאות כדי להפוך את הפקודה gcrane לניתנת להרצה.

    tar -zxvf go-containerregistry.tar.gz
    chmod +x gcrane
    sudo mv gcrane /usr/local/bin/
    
  5. מריצים את הפקודה gcrane --help כדי לוודא שההתקנה בוצעה.

עכשיו אפשר להעתיק תמונות. כדי להמשיך:

הגדרת מכונה מקומית

  1. מורידים את gcrane ממאגר GitHub. לדוגמה, הפקודה הבאה מורידה את הפצת Linux x86-64 משורת הפקודה.

    curl -L \
    https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \
    -o go-containerregistry.tar.gz
    
  2. מריצים את הפקודות הבאות כדי להפוך את הפקודה gcrane לניתנת להרצה. הפקודות מניחות שהקובץ שהורד נקרא go-containerregistry.tar.gz.

    tar -zxvf go-containerregistry.tar.gz
    chmod +x gcrane
    sudo mv gcrane /usr/local/bin/
    
  3. מריצים את הפקודה gcrane --help כדי לוודא שההתקנה בוצעה.

עכשיו אפשר להעתיק תמונות. כדי להמשיך:

זיהוי תמונות להעתקה

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

כדי להציג רשימה של תמונות קיימות, מריצים את הפקודה:

gcrane ls LOCATION-docker.pkg.dev/PROJECT/REPOSITORY

כדי להציג רשימה של התגים שמשויכים לתמונה, מריצים את הפקודה:

gcrane ls LOCATION-docker.pkg.dev/PROJECT/IMAGE

כדי להציג רשימה של תמונות באופן רקורסיבי בנתיב ספציפי, מריצים את הפקודה:

gcrane ls -r LOCATION-docker.pkg.dev/PROJECT/PATH

לכל אחת מהפקודות:

  • מחליפים את LOCATION במיקום המאגר.
  • מחליפים את PROJECT במזהה הפרויקט.
  • מחליפים את PATH בנתיב להעתקה.

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

העתקת תמונות

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

כדי להעתיק תמונה אחת, מריצים את הפקודה:

gcrane cp LOCATION1-docker.pkg.dev/PROJECT1/REPOSITORY1/IMAGE1 \
LOCATION2-docker.pkg.dev/PROJECT2/REPOSITORY2/IMAGE2

כדי להעתיק תמונות באופן רקורסיבי מתחת לנתיב ספציפי במאגר, מריצים את הפקודה:

gcrane cp -r LOCATION1-docker.pkg.dev/PROJECT1/REPOSITORY1/IMAGE1/PATH1 \
LOCATION2-docker.pkg.dev/PROJECT2/REPOSITORY2/IMAGE2/PATH2

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

gcrane cp -r LOCATION1-docker.pkg.dev/PROJECT1/REPOSITORY1 \
LOCATION2-docker.pkg.dev/PROJECT2/REPOSITORY2

מחליפים את הערכים הבאים:

  • LOCATION1 הוא המיקום של מאגר המקור.
  • LOCATION2 הוא המיקום של מאגר היעד.
  • PROJECT1 הוא Google Cloud מזהה הפרויקט שמשויך למאגר המקור.
  • PROJECT2 הוא Google Cloud מזהה הפרויקט שמשויך למאגר היעד.
  • REPOSITORY1 הוא השם של מאגר המקור.
  • REPOSITORY2 הוא השם של מאגר היעד.
  • IMAGE1 היא התמונה שרוצים להעתיק.
  • IMAGE2 הוא השם של האימג' במאגר היעד.

דוגמאות

הפקודה הבאה מעתיקה את my-image:tag1 מהמאגר repo1 למאגר repo2 באותו פרויקט ואזור.

gcrane cp us-west1-docker.pkg.dev/my-project/repo1/my-image:tag1 \
us-west1-docker.pkg.dev/my-project/repo2/my-image:tag1

הפקודה הבאה מעתיקה באופן רקורסיבי את כל התמונות בתיקייה test-images/testing במאגר repo1 לאותו נתיב במאגר repo2.

gcrane cp -r us-west1-docker.pkg.dev/my-project/repo1/test-images/testing \
us-west1-docker.pkg.dev/my-project/repo2/test-images/testing

הפקודה הבאה מעתיקה את כל התמונות ממאגר my-repo בפרויקט dev-project למאגר my-repo בפרויקט אחר שנקרא prod-project.

gcrane cp -r us-west1-docker.pkg.dev/dev-project/my-repo \
us-west1-docker.pkg.dev/prod-project/my-repo