

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Contoh 'Publikasikan gambar Docker ke repositori gambar Amazon ECR' untuk CodeBuild
<a name="sample-docker"></a>

Sampel ini menghasilkan image Docker sebagai output build dan kemudian mendorong image Docker ke repositori image Amazon Elastic Container Registry (Amazon ECR). Anda dapat mengadaptasi sampel ini untuk mendorong image Docker ke Docker Hub. Untuk informasi selengkapnya, lihat [Sesuaikan sampel 'Publikasikan gambar Docker ke Amazon ECR' untuk mendorong ke Docker Hub](sample-docker-docker-hub.md).

Untuk mempelajari cara membuat image Docker dengan menggunakan image build Docker kustom (`docker:dind`di Docker Hub), lihat. [Docker dalam sampel gambar khusus](sample-docker-custom-image.md)

Sampel ini diuji referensi`golang:1.12`.

Sampel ini menggunakan fitur build Docker multi-tahap baru, yang menghasilkan image Docker sebagai output build. Kemudian mendorong gambar Docker ke repositori gambar Amazon ECR. Pembuatan gambar Docker multi-tahap membantu mengurangi ukuran gambar Docker akhir. Untuk informasi selengkapnya, lihat [Menggunakan build multi-tahap dengan Docker](https://docs.docker.com/engine/userguide/eng-image/multistage-build/).

**penting**  
Menjalankan sampel ini dapat mengakibatkan biaya ke AWS akun Anda. Ini termasuk kemungkinan biaya untuk AWS CodeBuild dan untuk AWS sumber daya dan tindakan yang terkait dengan Amazon S3,, CloudWatch Log AWS KMS, dan Amazon ECR. Untuk informasi selengkapnya, lihat [CodeBuild harga, harga](https://aws.amazon.com/codebuild/pricing) [Amazon S3, harga, [AWS Key Management Service harga](https://aws.amazon.com/kms/pricing)](https://aws.amazon.com/s3/pricing) Amazon, dan [ CloudWatch harga Amazon](https://aws.amazon.com/cloudwatch/pricing) [Elastic Container Registry](https://aws.amazon.com/ecr/pricing).

**Topics**
+ [Jalankan sampel 'Publikasikan gambar Docker ke Amazon ECR'](#sample-docker-running)
+ [Sesuaikan sampel 'Publikasikan gambar Docker ke Amazon ECR' untuk mendorong ke Docker Hub](sample-docker-docker-hub.md)

## Jalankan sampel 'Publikasikan gambar Docker ke Amazon ECR'
<a name="sample-docker-running"></a>

Gunakan prosedur berikut untuk menjalankan sampel yang menerbitkan image Docker ke Amazon ECR. Untuk informasi lebih lanjut tentang sampel ini, lihat. [Contoh 'Publikasikan gambar Docker ke repositori gambar Amazon ECR' untuk CodeBuild](#sample-docker)

**Untuk menjalankan sampel ini**

1. Jika Anda sudah memiliki repositori gambar di Amazon ECR yang ingin Anda gunakan, lewati ke langkah 3. Jika tidak, jika Anda menggunakan pengguna alih-alih akun AWS root atau pengguna administrator untuk bekerja dengan Amazon ECR, tambahkan pernyataan ini (antara *\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1* dan*\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1*) ke pengguna (atau grup IAM yang terkait dengan pengguna). Menggunakan akun AWS root tidak dianjurkan.Pernyataan ini memungkinkan pembuatan repositori Amazon ECR untuk menyimpan gambar Docker. Ellipses (`...`) digunakan untuk singkatnya dan untuk membantu Anda menemukan tempat untuk menambahkan pernyataan. Jangan menghapus pernyataan apa pun, dan jangan ketik elips ini ke dalam kebijakan. Untuk informasi selengkapnya, lihat [Bekerja dengan kebijakan sebaris menggunakan Konsol Manajemen AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html#AddingPermissions_Console) dalam *Panduan pengguna*. 

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ecr:CreateRepository"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------
**catatan**  
Entitas IAM yang memodifikasi kebijakan ini harus memiliki izin di IAM untuk memodifikasi kebijakan.

1. Buat repositori gambar di Amazon ECR. Pastikan untuk membuat repositori di AWS Wilayah yang sama tempat Anda membuat lingkungan build dan menjalankan build. Untuk informasi selengkapnya, lihat [Membuat repositori](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) di Panduan Pengguna *Amazon ECR*. Nama repositori ini harus cocok dengan nama repositori yang Anda tentukan nanti dalam prosedur ini, diwakili oleh variabel lingkungan. `IMAGE_REPO_NAME` Pastikan kebijakan repositori Amazon ECR memberikan akses push image untuk peran IAM layanan Anda CodeBuild. 

1. Tambahkan pernyataan ini (antara *\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1* dan*\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1*) ke kebijakan yang Anda lampirkan ke peran AWS CodeBuild layanan Anda. Pernyataan ini memungkinkan CodeBuild untuk mengunggah gambar Docker ke repositori Amazon ECR. Ellipses (`...`) digunakan untuk singkatnya dan untuk membantu Anda menemukan tempat untuk menambahkan pernyataan. Jangan menghapus pernyataan apa pun, dan jangan ketik elips ini ke dalam kebijakan. 

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ecr:BatchCheckLayerAvailability",
                   "ecr:CompleteLayerUpload",
                   "ecr:GetAuthorizationToken",
                   "ecr:InitiateLayerUpload",
                   "ecr:PutImage",
                   "ecr:UploadLayerPart"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------
**catatan**  
Entitas IAM yang memodifikasi kebijakan ini harus memiliki izin di IAM untuk memodifikasi kebijakan.

1. Buat file seperti yang dijelaskan di [Berkas](#sample-docker-files) bagian [Struktur direktori](#sample-docker-dir) dan topik ini, lalu unggah ke bucket input S3 atau repositori AWS CodeCommit GitHub, atau Bitbucket. Untuk informasi selengkapnya, lihat [Referensi file definisi gambar](https://docs.aws.amazon.com/codepipeline/latest/userguide/file-reference.html) di *Panduan AWS CodePipeline Pengguna*.
**penting**  
Jangan mengunggah`(root directory name)`, hanya file di dalamnya`(root directory name)`.   
Jika Anda menggunakan bucket input S3, pastikan untuk membuat file ZIP yang berisi file, lalu unggah ke bucket input. Jangan tambahkan `(root directory name)` ke file ZIP, hanya file di dalamnya`(root directory name)`.

1. Buat proyek build, jalankan build, dan lihat informasi build.

    Jika Anda menggunakan konsol untuk membuat proyek Anda:

   1.  Untuk **Sistem operasi**, pilih **Ubuntu**. 

   1.  Untuk **Waktu aktif**, pilih **Standar**. 

   1.  **Untuk **Gambar**, pilih:5.0aws/codebuild/standard.** 

   1.  Tambahkan variabel lingkungan berikut: 
      +  AWS\$1DEFAULT\$1REGION dengan nilai *region-ID* 
      +  AWS\$1ACCOUNT\$1ID dengan nilai *account-ID* 
      +  IMAGE\$1TAG dengan nilai Terbaru 
      +  IMAGE\$1REPO\$1NAME dengan nilai *Amazon-ECR-repo-name* 

   Jika Anda menggunakan AWS CLI untuk membuat proyek build, input berformat JSON ke `create-project` perintah mungkin terlihat mirip dengan ini. (Ganti placeholder dengan nilai Anda sendiri.)

   ```
   {
     "name": "sample-docker-project",
     "source": {
       "type": "S3",
       "location": "codebuild-region-ID-account-ID-input-bucket/DockerSample.zip"
     },
     "artifacts": {
       "type": "NO_ARTIFACTS"
     },
     "environment": {
       "type": "LINUX_CONTAINER",
       "image": "aws/codebuild/standard:5.0",
       "computeType": "BUILD_GENERAL1_SMALL",
       "environmentVariables": [
         {
           "name": "AWS_DEFAULT_REGION",
           "value": "region-ID"
         },
         {
           "name": "AWS_ACCOUNT_ID",
           "value": "account-ID"
         },
         {
           "name": "IMAGE_REPO_NAME",
           "value": "Amazon-ECR-repo-name"
         },
         {
           "name": "IMAGE_TAG",
           "value": "latest"
         }
       ],
     },
     "serviceRole": "arn:aws:iam::account-ID:role/role-name",
     "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
   }
   ```

1. Konfirmasikan bahwa CodeBuild berhasil mendorong image Docker ke repositori:

   1. Buka konsol Amazon ECR di [https://console.aws.amazon.com/ecr/](https://console.aws.amazon.com/ecr/).

   1. Pilih nama repositori. Gambar harus dicantumkan di kolom **tag Gambar**.

### Struktur direktori
<a name="sample-docker-dir"></a>

Sampel ini mengasumsikan struktur direktori ini.

```
(root directory name)
├── buildspec.yml
└── Dockerfile
```

### Berkas
<a name="sample-docker-files"></a>

Sampel ini menggunakan file-file ini.

`buildspec.yml`(dalam`(root directory name)`)

```
version: 0.2

phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image...          
      - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
      - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG      
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker image...
      - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
```

`Dockerfile`(dalam`(root directory name)`)

```
FROM golang:1.12-alpine AS build
#Install git
RUN apk add --no-cache git
#Get the hello world package from a GitHub repository
RUN go get github.com/golang/example/hello
WORKDIR /go/src/github.com/golang/example/hello
# Build the project and send the output to /bin/HelloWorld 
RUN go build -o /bin/HelloWorld

FROM golang:1.12-alpine
#Copy the build's output binary from the previous build container
COPY --from=build /bin/HelloWorld /bin/HelloWorld
ENTRYPOINT ["/bin/HelloWorld"]
```

**catatan**  
CodeBuild mengganti `ENTRYPOINT` untuk gambar Docker khusus.

# Sesuaikan sampel 'Publikasikan gambar Docker ke Amazon ECR' untuk mendorong ke Docker Hub
<a name="sample-docker-docker-hub"></a>

Untuk mengadaptasi sampel 'Publikasikan gambar Docker ke Amazon ECR' sehingga gambar Docker didorong ke Docker Hub alih-alih Amazon ECR, edit kode sampel. Untuk informasi lebih lanjut tentang sampel, lihat [Contoh 'Publikasikan gambar Docker ke repositori gambar Amazon ECR' untuk CodeBuild](sample-docker.md) dan[Jalankan sampel 'Publikasikan gambar Docker ke Amazon ECR'](sample-docker.md#sample-docker-running).
**catatan**  
Jika Anda menggunakan versi Docker lebih awal dari 17.06, hapus opsi. `--no-include-email`

1. Ganti baris kode khusus Amazon ECR ini dalam file: `buildspec.yml`

   ```
   ...
     pre_build:
       commands:
         - echo Logging in to Amazon ECR...
         - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
     build:
       commands:
         - echo Build started on `date`
         - echo Building the Docker image...          
         - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
         - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
     post_build:
       commands:
         - echo Build completed on `date`
         - echo Pushing the Docker image...
         - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
   ...
   ```

   Dengan baris kode khusus Docker Hub ini:

   ```
   ...
     pre_build:
       commands:
         - echo Logging in to Docker Hub...
         # Type the command to log in to your Docker Hub account here.          
     build:
       commands:
         - echo Build started on `date`
         - echo Building the Docker image...
         - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
         - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $IMAGE_REPO_NAME:$IMAGE_TAG
     post_build:
       commands:
         - echo Build completed on `date`
         - echo Pushing the Docker image...
         - docker push $IMAGE_REPO_NAME:$IMAGE_TAG
   ...
   ```

1. Unggah kode yang diedit ke bucket input S3 atau repositori AWS CodeCommit, GitHub, atau Bitbucket. 
**penting**  
Jangan mengunggah`(root directory name)`, hanya file di dalamnya`(root directory name)`.   
Jika Anda menggunakan bucket input S3, pastikan untuk membuat file ZIP yang berisi file, lalu unggah ke bucket input. Jangan tambahkan `(root directory name)` ke file ZIP, hanya file di dalamnya`(root directory name)`.

1. Ganti baris kode ini dari input berformat JSON ke perintah: `create-project`

   ```
   ...
       "environmentVariables": [
         {
           "name": "AWS_DEFAULT_REGION",
           "value": "region-ID"
         },
         {
           "name": "AWS_ACCOUNT_ID",
           "value": "account-ID"
         },
         {
           "name": "IMAGE_REPO_NAME",
           "value": "Amazon-ECR-repo-name"
         },
         {
           "name": "IMAGE_TAG",
           "value": "latest"
         }
       ]
   ...
   ```

   Dengan baris kode ini:

   ```
   ...
       "environmentVariables": [
         {
           "name": "IMAGE_REPO_NAME",
           "value": "your-Docker-Hub-repo-name"
         },
         {
           "name": "IMAGE_TAG",
           "value": "latest"
         }
       ]
   ...
   ```

1. Buat lingkungan build, jalankan build, dan lihat informasi build terkait.

1. Konfirmasikan bahwa AWS CodeBuild berhasil mendorong image Docker ke repositori. **Masuk ke Docker Hub, buka repositori, dan pilih tab Tag.** `latest`Tag harus berisi nilai **Terakhir Diperbarui** yang sangat baru.