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
- Membuat Container Image
- Membuat Private Repository
- Push Image ke Private Repository
- Membuat Public Repository
- Push Image ke Public Repository
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.
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.
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.
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
.
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.
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.
Dokumentasi lengkap tentang Amazon ECR Public dapat dilihat pada dokumentasi resmi dari AWS.