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

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

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

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

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

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

    • התפקיד Artifact Registry Reader ‏ (roles/storage.objectViewer) או תפקיד עם הרשאות שוות ערך למאגר שממנו מעתיקים.

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

סקירה כללית

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

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

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

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

הגדרת gcrane

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

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

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

מומלץ להשתמש בגרסה העדכנית של הכלי 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. מפעילים מחדש את המכונה הווירטואלית. איך מפעילים מכונה מושבתת

  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 כדי לוודא שההתקנה בוצעה.

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

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

  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.s3nsregistry.fr/PROJECT/REPOSITORY

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

gcrane ls LOCATION-docker.s3nsregistry.fr/PROJECT/IMAGE

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

gcrane ls -r LOCATION-docker.s3nsregistry.fr/PROJECT/PATH

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

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

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

העתקת תמונות

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

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

gcrane cp LOCATION1-docker.s3nsregistry.fr/PROJECT1/REPOSITORY1/IMAGE1 \
LOCATION2-docker.s3nsregistry.fr/PROJECT2/REPOSITORY2/IMAGE2

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

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

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

gcrane cp -r LOCATION1-docker.s3nsregistry.fr/PROJECT1/REPOSITORY1 \
LOCATION2-docker.s3nsregistry.fr/PROJECT2/REPOSITORY2

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

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

דוגמאות

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

gcrane cp u-france-east1-docker.s3nsregistry.fr/my-project/repo1/my-image:tag1 \
u-france-east1-docker.s3nsregistry.fr/my-project/repo2/my-image:tag1

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

gcrane cp -r u-france-east1-docker.s3nsregistry.fr/my-project/repo1/test-images/testing \
u-france-east1-docker.s3nsregistry.fr/my-project/repo2/test-images/testing

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

gcrane cp -r u-france-east1-docker.s3nsregistry.fr/dev-project/my-repo \
u-france-east1-docker.s3nsregistry.fr/prod-project/my-repo