אתם יכולים להשתמש בקובצי אימג' של קונטיינרים מ-Docker Hub כדי להריץ את המשימות שלכם ב-Cloud Build. בנוסף, אם תהליך הבנייה יוצר תמונות, אפשר להעלות אותן ל-Docker Hub. בדף הזה מוסבר איך לכתוב קובצי הגדרות של build כדי לדחוף ולמשוך תמונות של Docker Hub. סקירה כללית של כל השדות שזמינים בקובץ הגדרות build מופיעה במאמר סקירה כללית של הגדרות build.
שליפת תמונות ציבוריות מ-Docker Hub
אפשר למשוך תמונות Docker רשמיות, תמונות שאושרו על ידי Docker ותמונות מותאמות אישית שמאוחסנות ב-Docker Hub בשלב הבנייה, על ידי ציון שם התמונה בשדה name. קודם Cloud Build ימשוך את קובץ האימג' שצוין מ-Docker Hub, ואז ישתמש בו כדי להריץ את שלב ה-build.
בדוגמה שלמטה, Cloud Build מושך את קובץ האימג' של Docker עבור maven כדי להריץ את הפקודה mvn שצוינה ב-args:
YAML
steps:
- name: "maven"
args: ["mvn", "--version"]
JSON
{
"steps": [
{
"name": "maven",
"args": [
"mvn",
"--version"
]
}
]
}
אחסון פרטי כניסה של Docker ב-Secret Manager
כדי למשוך קובצי אימג' פרטיים ולדחוף קובצי אימג' ציבוריים ופרטיים ל-Docker Hub, Cloud Build צריך לבצע אימות ל-Docker באמצעות פרטי הכניסה שלכם. כדי לכלול פרטי כניסה של Docker ב-builds, קודם צריך לאחסן את פרטי הכניסה ב-Secret Manager, ואז להעניק ל-Cloud Build הרשאה לגשת לסוד מ-Secret Manager.
כדי לאחסן פרטי כניסה של Docker ב-Secret Manager:
נכנסים לדף Secret Manager במסוף Google Cloud :
בדף Secret Manager, לוחצים על Create Secret (יצירת סוד).
בדף יצירת Secret, בשדה שם, מזינים
docker-username.בשדה Secret value (ערך סודי), מזינים את שם המשתמש שלכם ב-Docker.
משאירים את הקטע אזורים ללא שינוי.
לוחצים על הלחצן Create secret.
חוזרים על השלבים שלמעלה כדי לאחסן את הסיסמה של Docker ב-Secret Manager.
כדי להעניק לחשבון השירות שבו אתם משתמשים לבנייה את תפקיד ה-IAM Secret Manager Secret Accessor (גישה לסודות ב-Secret Manager):
פותחים את הדף Secret Manager במסוף Google Cloud :
מסמנים את התיבה של הסוד שמתאים לשם המשתמש והסיסמה שלכם ב-Docker.
אם החלונית לא פתוחה, לוחצים על Show info panel כדי לפתוח אותה.
בחלונית, בקטע Permissions, לוחצים על Add principal.
בשדה New principals, מזינים את כתובת האימייל של חשבון השירות.
בתפריט הנפתח Select a role, בוחרים בתפקיד Secret Manager Secret Accessor.
לוחצים על Save.
שליפת תמונות פרטיות מ-Docker Hub
כדי לשלוף תמונות פרטיות מ-Docker Hub:
חשוב לוודא שאחסנתם את פרטי הכניסה של Docker ב-Secret Manager ונתתם ל-Cloud Build הרשאות גישה לסוד.
בקובץ תצורת ה-build:
- אחרי כל ה-build
steps, מוסיפים שדהavailableSecretsשמציין את גרסת הסוד ואת משתנה הסביבה של שם המשתמש והסיסמה ב-Docker. - בשלב ה-build שבו רוצים לציין את שם המשתמש והסיסמה:
- כדי להשתמש בכלי bash בשלב build, מוסיפים שדה
entrypointשמפנה אלbash. הפעולה הזו נדרשת כדי להתייחס למשתנה הסביבה של הסוד. - מוסיפים שדה
secretEnvשמציין את משתנה הסביבה של שם המשתמש והסיסמה. - בשדה
args, מוסיפים את הדגל-cכארגומנט הראשון. כל מחרוזת שמעבירים אחרי -c נחשבת לפקודה. מידע נוסף על הפעלת פקודות bash עם -c זמין במסמכי התיעוד של bash. - כשמציינים את הסוד בשדה
args, צריך לציין אותו באמצעות משתנה הסביבה עם הקידומת$$.
- כדי להשתמש בכלי bash בשלב build, מוסיפים שדה
The following build config file shows how to login to Docker using the Docker username and password stored in Secret Manager, and run a private image.
YAML
steps: - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker login --username=$$USERNAME --password=$$PASSWORD'] secretEnv: ['USERNAME', 'PASSWORD'] - name: "gcr.io/cloud-builders/docker" entrypoint: 'bash' args: ['-c', 'docker run $$USERNAME/REPOSITORY:TAG'] secretEnv: ['USERNAME'] availableSecrets: secretManager: - versionName: projects/PROJECT_ID/secrets/DOCKER_PASSWORD_SECRET_NAME/versions/DOCKER_PASSWORD_SECRET_VERSION env: 'PASSWORD' - versionName: projects/PROJECT_ID/secrets/DOCKER_USERNAME_SECRET_NAME/versions/DOCKER_USERNAME_SECRET_VERSION env: 'USERNAME'JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker login --username=$$USERNAME --password=$$PASSWORD" ], "secretEnv": [ "USERNAME", "PASSWORD" ] }, { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker run $$USERNAME/REPOSITORY:TAG" ], "secretEnv": [ "USERNAME" ] } ], "availableSecrets": { "secretManager": [{ "versionName": "projects/PROJECT_ID/secrets/DOCKER_PASSWORD_SECRET_NAME/versions/DOCKER_PASSWORD_SECRET_VERSION", "env": "PASSWORD" }, { "versionName": "projects/PROJECT_ID/secrets/DOCKER_USERNAME_SECRET_NAME/versions/DOCKER_USERNAME_SECRET_VERSION", "env": "USERNAME" }] } }Replace the placeholder values in the above commands with the following:
PROJECT_ID: The ID of the Google Cloud project where you've stored your secrets.DOCKER_USERNAME_SECRET_NAME: The secret name corresponding to your Docker username.DOCKER_USERNAME_SECRET_VERSION: The secret version of your Docker username.DOCKER_PASSWORD_SECRET_NAME: The secret name corresponding to your Docker password.DOCKER_PASSWORD_SECRET_VERSION: The secret version of your Docker password.REPOSITORY: The name of your Docker repository from where you're pulling the image.TAG: The tag name of your image.
- אחרי כל ה-build
Use the build config file to manually start a build or to automate builds using triggers.
Pushing images to Docker Hub
To push public and private images to Docker Hub:
Make sure you've stored your Docker credentials in Secret Manager and granted permissions for Cloud Build to access the secret.
In the build config file:
- After all the build
steps, add anavailableSecretsfield specifying the secret version and the env variable for the Docker username and password. - In the build step where you want to specify the username and password:
- Add an
entrypointfield pointing tobashto use the bash tool in the build step. This is required to refer to the environment variable for the secret. - Add a
secretEnvfield specifying the environment variable for username and password. - In the
argsfield, add a-cflag as the first argument. Any string you pass after-cis treated as a command. For more information on running bash commands with -c, see the bash documentation. - When specifying the secret in the
argsfield, specify it using the environment variable prefixed with$$.
- Add an
The following example build config file shows how to login to Docker, build an image with source code stored locally, and then push the image to Docker repository.
YAML
steps: - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker login --username=$$USERNAME --password=$$PASSWORD'] secretEnv: ['USERNAME', 'PASSWORD'] - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker build -t $$USERNAME/REPOSITORY:TAG .'] secretEnv: ['USERNAME'] - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker push $$USERNAME/REPOSITORY:TAG'] secretEnv: ['USERNAME'] availableSecrets: secretManager: - versionName: projects/PROJECT_ID/secrets/DOCKER_PASSWORD_SECRET_NAME/versions/DOCKER_PASSWORD_SECRET_VERSION env: 'PASSWORD' - versionName: projects/PROJECT_ID/secrets/DOCKER_USERNAME_SECRET_NAME/versions/DOCKER_USERNAME_SECRET_VERSION env: 'USERNAME'JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker login --username=$$USERNAME --password=$$PASSWORD" ], "secretEnv": [ "USERNAME", "PASSWORD" ] }, { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker build -t $$USERNAME/REPOSITORY:TAG ." ], "secretEnv": [ "USERNAME" ] }, { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker push $$USERNAME/REPOSITORY:TAG" ], "secretEnv": [ "USERNAME" ] } ], "availableSecrets": { "secretManager": [{ "versionName": "projects/PROJECT_ID/secrets/DOCKER_PASSWORD_SECRET_NAME/versions/DOCKER_PASSWORD_SECRET_VERSION", "env": "PASSWORD" }, { "versionName": "projects/PROJECT_ID/secrets/DOCKER_USERNAME_SECRET_NAME/versions/DOCKER_USERNAME_SECRET_VERSION", "env": "USERNAME" }] } }מחליפים את ערכי ה-placeholder בפקודות שלמעלה בערכים הבאים:
-
PROJECT_ID: מזהה Google Cloud הפרויקט שבו מאוחסנים הסודות. -
DOCKER_USERNAME_SECRET_NAME: שם הסוד שמתאים לשם המשתמש שלכם ב-Docker. -
DOCKER_USERNAME_SECRET_VERSION: הגרסה הסודית של שם המשתמש שלכם ב-Docker. -
DOCKER_PASSWORD_SECRET_NAME: השם הסודי שמתאים לסיסמה שלכם ב-Docker. -
DOCKER_PASSWORD_SECRET_VERSION: גרסת הסוד של הסיסמה שלכם ל-Docker. -
REPOSITORY: השם של המאגר ב-Docker שאליו אתם מעלים את האימג'. -
TAG: שם התג של התמונה.
אפשר להשתמש בקובץ ההגדרות של ה-build כדי להתחיל build באופן ידני או כדי ליצור אוטומציה של build באמצעות טריגרים.
עבודה עם גרסאות של לקוח Docker
כלי ה-Docker Builder הנתמך ב-Cloud Build,
gcr.io/cloud-builders/docker, משתמש ב-Docker 20.10.14. בגרסה הזו, אם לא מציינים תג כשמעלים תמונה ל-Docker, Docker מעלה רק את התמונה עם התגlatest. אם התגlatestלא קיים, הפעולה של שליחת הנתונים תיכשל.כדי להעביר בדחיפה תמונה עם תג ספציפי ל-Docker, מציינים את התג ב
docker pushשלב הבנייה. בדוגמה הבאה מתבצעת העלאה של תמונה עם התגprod:YAML
steps: ... - name: 'gcr.io/cloud-builders/docker' args: ['docker', 'push', '$$USERNAME/myrepo:prod'] ...JSON
{ ... { "name": "gcr.io/cloud-builders/docker", "args": [ "docker", "push", "$$USERNAME/myrepo:prod" ], } ... }כדי להעביר בדחיפה את כל התגים של תמונה ל-Docker, מוסיפים את הדגל
-aלרשימת הארגומנטים בשלב הבנייהdocker push:YAML
steps: ... - name: 'gcr.io/cloud-builders/docker' args: ['docker', 'push', '-a', '$$USERNAME/myrepo'] ...JSON
{ ... { "name": "gcr.io/cloud-builders/docker", "args": [ "docker", "push", "-a", "$$USERNAME/myrepo" ], } ... }אפשר להשתמש בלקוח Docker 19.03.9 על ידי תיוג הגרסה ב-Docker Builder:
YAML
steps: ... - name: 'gcr.io/cloud-builders/docker:19.03.9' args: ['docker', 'push', '$$USERNAME/myrepo:prod'] ...JSON
{ ... { "name": "gcr.io/cloud-builders/docker:19.03.9", "args": [ "docker", "push", "$$USERNAME/myrepo:prod" ], } ... }המאמרים הבאים
- איך כותבים קובץ הגדרות בסיסי של build
- איך מריצים בנייה באופן ידני או איך מבצעים אוטומציה באמצעות טריגרים של בנייה
אלא אם צוין אחרת, התוכן של דף זה הוא ברישיון Creative Commons Attribution 4.0 ודוגמאות הקוד הן ברישיון Apache 2.0. לפרטים, ניתן לעיין במדיניות האתר Google Developers. Java הוא סימן מסחרי רשום של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2026-06-18 (שעון UTC).
[[["התוכן קל להבנה","easyToUnderstand","thumb-up"],["התוכן עזר לי לפתור בעיה","solvedMyProblem","thumb-up"],["סיבה אחרת","otherUp","thumb-up"]],[["התוכן קשה להבנה","hardToUnderstand","thumb-down"],["שגיאות בקוד לדוגמה או במידע","incorrectInformationOrSampleCode","thumb-down"],["חסרים לי פרטים או דוגמאות","missingTheInformationSamplesINeed","thumb-down"],["בעיה בתרגום","translationIssue","thumb-down"],["סיבה אחרת","otherDown","thumb-down"]],["עדכון אחרון: 2026-06-18 (שעון UTC)."],[],[]]- After all the build