Berinteraksi dengan image Docker Hub

Anda dapat menggunakan image container dari Docker Hub untuk menjalankan tugas di Cloud Build. Selain itu, jika build Anda menghasilkan image, Anda dapat mengirimkannya ke Docker Hub. Halaman ini menjelaskan cara menulis file konfigurasi build untuk mengirim dan mengambil image Docker Hub. Untuk ringkasan semua kolom yang tersedia dalam file konfigurasi build, lihat Ringkasan Konfigurasi Build.

Menarik image publik dari Docker Hub

Anda dapat mengambil image Docker resmi, image Docker bersertifikat, dan image kustom yang disimpan di Docker Hub pada langkah build dengan menentukan nama image di kolom name. Cloud Build akan mengambil image yang ditentukan dari Docker Hub terlebih dahulu, lalu menggunakan image tersebut untuk menjalankan langkah build.

Pada contoh di bawah, Cloud Build mengambil image Docker untuk maven guna menjalankan perintah mvn yang ditentukan di args:

YAML

steps:
- name: "maven"
  args: ["mvn", "--version"]

JSON

{
   "steps": [
      {
         "name": "maven",
         "args": [
            "mvn",
            "--version"
         ]
      }
   ]
}

Menyimpan kredensial Docker di Secret Manager

Untuk mengambil image pribadi dan mengirim image publik dan pribadi ke Docker Hub, Cloud Build perlu melakukan autentikasi ke Docker dengan kredensial Anda. Untuk menyertakan kredensial Docker dalam build Anda, simpan kredensial di Secret Manager terlebih dahulu, lalu berikan izin kepada Cloud Build untuk mengakses secret dari Secret Manager.

Untuk menyimpan kredensial Docker di Secret Manager:

  1. Buka halaman Secret Manager di konsol Google Cloud:

    Buka halaman Secret Manager

  2. Di halaman Secret Manager, klik Create Secret.

  3. Di halaman Create secret, di bagian Name, masukkan docker-username.

  4. Di kolom Secret value, masukkan nama pengguna Docker Anda.

  5. Jangan ubah bagian Region.

  6. Klik tombol Buat secret.

Ulangi langkah-langkah di atas untuk menyimpan sandi Docker Anda di Secret Manager.

Untuk memberikan peran IAM Secret Manager Secret Accessor ke secret ke akun layanan Cloud Build:

  1. Buka halaman Secret Manager di konsol Google Cloud:

    Buka halaman Secret Manager

  2. Pilih kotak centang rahasia yang sesuai dengan nama pengguna dan sandi Docker Anda.

  3. Jika belum terbuka, klik Tampilkan panel info untuk membuka panel.

  4. Di panel, pada Izin, klik Tambahkan akun utama.

  5. Di kotak teks New principals, masukkan alamat email akun layanan Cloud Build dengan format PROJECT_NUMBER@cloudbuild.gserviceaccount.com, dengan PROJECT_NUMBER sebagai nomor project dari project tempat Anda menjalankan build. Anda dapat menemukan nomor project di halaman Setelan project.

  6. Di kotak drop-down Select a role, pilih peran Secret Manager Secret Accessor.

  7. Klik Simpan.

Menarik image pribadi dari Docker Hub

Untuk mengambil image pribadi dari Docker Hub:

  1. Pastikan Anda telah menyimpan kredensial Docker di Secret Manager dan memberikan izin kepada Cloud Build untuk mengakses secret.

  2. Dalam file konfigurasi build:

    • Setelah semua build steps, tambahkan kolom availableSecrets yang menentukan versi secret dan variabel env untuk nama pengguna dan sandi Docker.
    • Pada langkah build tempat Anda ingin menetapkan nama pengguna dan sandi:
      • Tambahkan kolom entrypoint yang mengarah ke bash untuk menggunakan alat bash di langkah build. Ini diperlukan untuk merujuk ke variabel lingkungan untuk rahasia.
      • Tambahkan kolom secretEnv yang menentukan variabel lingkungan untuk nama pengguna dan sandi.
      • Di kolom args, tambahkan tanda -c sebagai argumen pertama. Setiap string yang Anda teruskan setelah -c diperlakukan sebagai perintah. Untuk mengetahui informasi selengkapnya tentang menjalankan perintah bash dengan -c, lihat dokumentasi bash.
      • Saat menentukan secret di kolom args, tentukan menggunakan variabel lingkungan yang diawali dengan $$.

    File konfigurasi build berikut menunjukkan cara login ke Docker menggunakan nama pengguna dan sandi Docker yang disimpan di Secret Manager, serta menjalankan image pribadi.

    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"
         }]
      }
    }
    

    Ganti nilai placeholder dalam perintah di atas dengan perintah berikut:

    • PROJECT_ID: ID project Google Cloud tempat Anda menyimpan secret.
    • DOCKER_USERNAME_SECRET_NAME: Nama rahasia yang sesuai dengan nama pengguna Docker Anda.
    • DOCKER_USERNAME_SECRET_VERSION: Versi rahasia nama pengguna Docker Anda.
    • DOCKER_PASSWORD_SECRET_NAME: Nama rahasia yang sesuai dengan sandi Docker Anda.
    • DOCKER_PASSWORD_SECRET_VERSION: Versi rahasia sandi Docker Anda.
    • REPOSITORY: Nama repositori Docker tempat Anda mengambil image.
    • TAG: Nama tag gambar Anda.
  3. Gunakan file konfigurasi build untuk memulai build secara manual atau untuk mengotomatiskan build menggunakan pemicu.

Mengirim image ke Docker Hub

Untuk mengirim image publik dan pribadi ke Docker Hub:

  1. Pastikan Anda telah menyimpan kredensial Docker di Secret Manager dan memberikan izin kepada Cloud Build untuk mengakses secret.

  2. Dalam file konfigurasi build:

    • Setelah semua build steps, tambahkan kolom availableSecrets yang menentukan versi secret dan variabel env untuk nama pengguna dan sandi Docker.
    • Pada langkah build tempat Anda ingin menetapkan nama pengguna dan sandi:
      • Tambahkan kolom entrypoint yang mengarah ke bash untuk menggunakan alat bash di langkah build. Ini diperlukan untuk merujuk ke variabel lingkungan untuk rahasia.
      • Tambahkan kolom secretEnv yang menentukan variabel lingkungan untuk nama pengguna dan sandi.
      • Di kolom args, tambahkan tanda -c sebagai argumen pertama. Setiap string yang Anda teruskan setelah -c akan diperlakukan sebagai perintah. Untuk mengetahui informasi selengkapnya tentang menjalankan perintah bash dengan -c, lihat dokumentasi bash.
      • Saat menentukan secret di kolom args, tentukan menggunakan variabel lingkungan yang diawali dengan $$.

    Contoh file konfigurasi build berikut menunjukkan cara login ke Docker, mem-build image dengan kode sumber yang disimpan secara lokal, lalu mengirim image ke repositori Docker.

    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"
         }]
      }
    }
    

    Ganti nilai placeholder dalam perintah di atas dengan perintah berikut:

    • PROJECT_ID: ID project Google Cloud tempat Anda menyimpan secret.
    • DOCKER_USERNAME_SECRET_NAME: Nama rahasia yang sesuai dengan nama pengguna Docker Anda.
    • DOCKER_USERNAME_SECRET_VERSION: Versi rahasia nama pengguna Docker Anda.
    • DOCKER_PASSWORD_SECRET_NAME: Nama rahasia yang sesuai dengan sandi Docker Anda.
    • DOCKER_PASSWORD_SECRET_VERSION: Versi rahasia sandi Docker Anda.
    • REPOSITORY: Nama repositori Docker tempat Anda mengirim image.
    • TAG: Nama tag gambar Anda.
  3. Gunakan file konfigurasi build untuk memulai build secara manual atau untuk mengotomatiskan build menggunakan pemicu.

Bekerja dengan versi klien Docker

Builder Docker yang didukung untuk Cloud Build, gcr.io/cloud-builders/docker menggunakan Docker 20.10.14. Dengan versi ini, jika Anda tidak menentukan tag saat mengirim image ke Docker, Docker hanya akan mengirim image dengan tag latest. Jika tag latest tidak ada, push akan gagal.

Untuk mengirim image dengan tag tertentu ke Docker, tentukan tag tersebut di langkah build docker push. Contoh berikut mengirim gambar yang diberi tag 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"
      ],
  }
  ...
}

Untuk mengirim semua tag gambar ke Docker, tambahkan flag -a ke daftar argumen di langkah build 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"
      ],
  }
  ...
}

Anda dapat menggunakan klien Docker 19.03.9 dengan memberi tag pada versi di builder Docker:

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"
      ],
  }
  ...
}

Langkah selanjutnya