

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. Multi-stage Build image Docker membantu mengurangi ukuran image 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 {{\#\#\# BEGIN ADDING STATEMENT HERE \#\#\#}} dan{{\#\#\# END ADDING STATEMENT HERE \#\#\#}}) 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 Anda. 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, yang 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 {{\#\#\# BEGIN ADDING STATEMENT HERE \#\#\#}} dan{{\#\#\# END ADDING STATEMENT HERE \#\#\#}}) 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 **aws/codebuild/standard:5.0**. 

   1.  Tambahkan variabel lingkungan berikut: 
      +  AWS\_DEFAULT\_REGION dengan nilai {{region-ID}} 
      +  AWS\_ACCOUNT\_ID dengan nilai {{account-ID}} 
      +  IMAGE\_TAG dengan nilai Terbaru 
      +  IMAGE\_REPO\_NAME dengan nilai {{Amazon-ECR-repo-name}} 

   Jika Anda menggunakan AWS CLI untuk membuat proyek build, JSON-formatted input 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.