Push Container Image ke Amazon ECR

5 min read

Disclaimer
Saya bekerja di AWS, semua opini adalah dari saya pribadi. (I work for AWS, my opinions are my own.)
Docker Container Amazon ECR
Photo by Ian Taylor on Unsplash

TeknoCerdas.com – Salam cerdas untuk kita semua. Amazon ECR (Elastic Container Registry) adalah layanan container image registry dari AWS. Jika selama ini anda menggunakan DockerHub untuk hosting container image maka Amazon ECR bisa jadi alternatif. Artikel ini akan membahas bagaimana melakukan push container image ke Amazon ECR.

Container image yang dibuat akan dibangun menggunakan Docker. Perbedaan utama dengan DockerHub hanya pada alamat repository yang digunakan saja. Pada Amazon ECR sebuah repository juga dapat dibuat private yang hanya bisa diakses menggunakan IAM atau public dimana semua orang dapat mengakses (pull) repository.

Daftar Isi

Persiapan

Berikut hal-hal yang perlu anda siapkan untuk mengikuti tutorial ini.

  • Memiliki akun AWS yang aktif
  • Telah memasang AWS CLI
  • Memiliki pemahaman dasar tentang Docker dan container

Jika anda tidak memiliki prasyarat diatas silahkan lanjutkan membaca. Karena mungkin banyak informasi baru yang diperoleh meskipun tanpa mencoba langsung tutorial ini.

Membuat Container Image

Kita akan membuat sebuah image sederhana untuk mendemonstrasikan proses push image ke Amazon ECR.

$ mkdir my-docker-image
$ cd my-docker-image

Buat sebuah Dockerfile di dalam direktori tersebut.

$ vim Dockerfile
FROM hello-world:linux
CMD ["/hello"]

Simpan file Dockerfile kemudian jalankan build untuk membangun container image. Kita namakan image ini dengan nama teknocerdas/hello-tekno dan tag versi 1.0.

$ docker build --rm -t teknocerdas/hello-tekno:1.0 .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM hello-world:linux
 ---> feb5d9fea6a5
Step 2/2 : CMD ["/hello"]
 ---> Using cache
 ---> 3cf42e8d3f54
Successfully built 3cf42e8d3f54
Successfully tagged teknocerdas/hello-tekno:1.0

Lihat apakah container image dengan nama teknocerdas/hello-tekno sudah berhasil dibuat atau belum.

$ docker image ls
REPOSITORY                                                                  TAG       IMAGE ID       CREATED        SIZE
teknocerdas/hello-tekno                                                     1.0       3cf42e8d3f54   35 hours ago   13.3kB
hello-world                                                                 linux     feb5d9fea6a5   6 months ago   13.3kB

Container image berhasil dibuat. Langkah berikutnya adalah kita coba jalankan container tersebut.

$ docker run --rm teknocerdas/hello-tekno:1.0
Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Container berjalan dengan sempurna.

Membuat Private Repository

Buka Amazon Management Console dan masuk pada halaman Amazon ECR.

  • Masuk pada halaman Repositories
  • Klik tombol Create repository
  • Pada Visibility settings pilih Private
  • Pada Repository name masukkan teknocerdas/hello-tekno
  • Sisanya biarkan default dan klik tombol Create repository
  • Setelah itu harusnya muncul nama repository pada tab Private.
Tombol Buat Amazon ECR
Mulai membuat Amazon ECR
Memilih tipe dan nama repository pada Amazon ECR
Memilih tipe dan nama repository pada Amazon ECR
List Private Repository
Daftar private repository yang ada

Push Image ke Private Repository

Untuk upload container image ke private repository maka kita harus login terlebih dahulu ke registry Amazon ECR. Dalam contoh saya menggunakan region ap-southeast-1. Sesuaikan ACCOUNT_ID dengan AWS account ID anda sendiri.

$ aws ecr get-login-password --region ap-southeast-1 | \
docker login --username AWS --password-stdin ACCOUNT_ID.dkr.ecr.ap-southeast-1.amazonaws.com
WARNING! Your password will be stored unencrypted in /home/ec2-user/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

Jika muncul pesan diatas maka proses login berhasil dan kita bisa melakukan push image.

Berikutnya adalah menambahkan tag untuk repository yang akan kita upload dengan menyesuaikan nama repository dan tag sesuai dengan URI yang telah ditampilkan di Amazon ECR console.

Pada contoh ini nama repository yang harus saya gunakan adalah ACCOUNT_ID.dkr.ecr.ap-southeast-1.amazonaws.com/teknocerdas/hello-tekno

$ docker tag teknocerdas/hello-tekno:1.0 \
ACCOUNT_ID.dkr.ecr.ap-southeast-1.amazonaws.com/teknocerdas/hello-tekno:1.0

Kemudian cek apakah nama dan tag sudah muncul.

$ docker image ls
REPOSITORY                                                                  TAG       IMAGE ID       CREATED        SIZE
ACCOUNT_ID.dkr.ecr.ap-southeast-1.amazonaws.com/teknocerdas/hello-tekno   1.0       3cf42e8d3f54   12 hours ago   13.3kB
teknocerdas/hello-tekno                                                     1.0       3cf42e8d3f54   12 hours ago   13.3kB
hello-world                                                                 linux     feb5d9fea6a5   6 months ago   13.3kB

Sekarang kita punya dua repository yang mengarah pada image yang sama. Image yang akan kita push adalah yang mengarah ke Amazon ECR.

$ docker push ACCOUNT_ID.dkr.ecr.ap-southeast-1.amazonaws.com/teknocerdas/hello-tekno:1.0
The push refers to repository [ACCOUNT_ID.dkr.ecr.ap-southeast-1.amazonaws.com/teknocerdas/hello-tekno]
e07ee1baac5f: Pushed 
1.0: digest: sha256:83627c32a9bde478eb170dae1d1f4a0081e8a2469f48f0112cb3948cb2c90e75 size: 525

Pesan di atas mengindikasikan bahwa proses upload image ke Amazon ECR repository berhasil. Untuk memastikan cek di console.

Daftar Container Image di Amazon ECR Private
Daftar container image pada Amazon ECR Private repository

Terlihat container image yang saya buat teknocerdas/hello-tekno:1.0 sudah muncul di daftar container image di private repository yang dibuat sebelumnya.

Untuk melakukan pull container image tersebut gunanakan nama repository dan tag yang sesuai. Contoh untuk container yang telah dibuat adalah seperti dibawah.

$ docker pull ACCOUNT_ID.dkr.ecr.ap-southeast-1.amazonaws.com/teknocerdas/hello-tekno:1.0

Perlu diingat bahwa untuk melakukan docker pull private repository diperlukan IAM policy khusus. Lengkapnya dapat dibaca di dokumentasi Amazon ECR.

Membuat Public Repository

Perbedaan dengan private repository adalah public repository tidak memerlukan otentikasi untuk mengakses container image. Jadi mirip dengan public image di DockerHub.

Langkah untuk membuat public repository tidak berbeda jauh dengan private repository.

  • Masuk pada halaman Repositories
  • Klik tombol Create repository
  • Pada Visibility settings pilih Public
  • Pada Repository name masukkan teknocerdas/hello-tekno
  • Pada Content types pilih Linux di bagian Operating systems dan pilih x86-64 pada Architectures
  • Sisanya biarkan default dan klik tombol Create repository
  • Setelah itu harusnya muncul nama repository pada tab Public.
Daftar container image di public repository
Daftar public repository yang ada

Dapat dilihat bahwa alamat URI dari public repository yang dibuat adalah public.ecr.aws/RANDOM_ALIAS/teknocerdas/hello-tekno.

Secara default Amazon ECR akan mengalokasikan random alias pada nama registry yang digunakan untuk public repository. Dalam contoh ini random alias saya adalah l0s3m9j4. Kita ingin mengubahnya agar lebih mudah diingat, jadi saya akan mengubahnya menjadi teknocerdas.

Custom alias pada public registry
Custom alias pada public registry

Proses ini tidak instan dan alias ini akan melalui proses review terlebih dahulu.

Push Image ke Public Repository

Sama dengan private repository, untuk upload container image ke public repository maka kita harus login terlebih dahulu ke registry Amazon ECR. Untuk public repository gunakan region us-east-1. Perintah yang digunakan adalah ecr-public bukan ecr.

$ aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
WARNING! Your password will be stored unencrypted in /home/ec2-user/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

Berikutnya adalah melakukan tag dengan menyesuaikan nama repository sesuai dengan URI dari public repository yang dibuat sebelumnya. Kita akan melakukan tag versi 1.0 sama dengan yang dilakukan pada private repository.

$ docker tag teknocerdas/hello-tekno:1.0 public.ecr.aws/RANDOM_ALIAS/teknocerdas/hello-tekno:1.0

Cek apakah tag sudah muncul pada daftar image.

$ docker image ls
REPOSITORY                                                                  TAG       IMAGE ID       CREATED        SIZE
587685707828.dkr.ecr.ap-southeast-1.amazonaws.com/teknocerdas/hello-tekno   1.0       3cf42e8d3f54   22 hours ago   13.3kB
teknocerdas/hello-tekno                                                     1.0       3cf42e8d3f54   22 hours ago   13.3kB
public.ecr.aws/RANDOM_ALIAS/teknocerdas/hello-tekno                             1.0       3cf42e8d3f54   22 hours ago   13.3kB
hello-world                                                                 linux     feb5d9fea6a5   6 months ago   13.3kB

Container image sudah siap untuk di push ke public repository Amazon ECR. Push image tersebut sesuai dengan tagnya yaitu 1.0.

$ docker push public.ecr.aws/l0s3m9j4/teknocerdas/hello-tekno:1.0
The push refers to repository [public.ecr.aws/l0s3m9j4/teknocerdas/hello-tekno]
e07ee1baac5f: Pushed 
1.0: digest: sha256:83627c32a9bde478eb170dae1d1f4a0081e8a2469f48f0112cb3948cb2c90e75 size: 525

Container image telah berhasil di-push ke Amazon ECR public repository. Untuk memastikan cek public repository Amazon ECR console.

Daftar container image pada public repository
Daftar container image pada Amazon ECR public repository

Dapat dilihat jika versi 1.0 dari container image teknocerdas/hello-tekno berhasil di-push. Sehingga bagi yang ingin menggunakan container image ini bisa menggunakan perintah berikut.

$ docker pull public.ecr.aws/l0s3m9j4/teknocerdas/hello-tekno:1.0

Setiap repository public pada Amazon ECR dapat diakses lewat URL https://gallery.ecr.aws/. Setiap repository memiliki halaman khusus berisi informasi detil tentang container image tersebut yang disediakan oleh pembuatnya. Pada contoh ini halaman public dari container image yang baru dibuat adalah https://gallery.ecr.aws/l0s3m9j4/teknocerdas/hello-tekno.

Halaman container image pada Amazon ECR Public Gallery
Halaman container image pada Amazon ECR Public Gallery

Dokumentasi lengkap tentang Amazon ECR Public dapat dilihat pada dokumentasi resmi dari AWS.