Bagaimana melakukan push Docker image ke private container registry secara gratis?
Tags: gitlab, docker, api, container
Published: 2024-02-29 05:12:34

__Penggunaan _container service_ pada saat proses _deployment_ untuk kebutuhan _production_ menjadi ketergantungan yang lumayan tinggi. Sejalan dengan kepentingan tersebut, _**container registry**_ menjadi gerbang awal sebelum menjalankan sebuah _container_. Dia digunakan untuk menyimpan _image_ yang sudah di-_compile_, selanjutnya dapat digunakan untuk dijalankan menjadi _container service_ di _server production_.


Umumnya penyedia layanan _container registry_ tidak sulit ditemukan, salah satunya di situs [**docker official**](https://www.docker.com/). Namun di sana memiliki keterbatasan pada akses untuk _repository_ yang berbentuk **private**, yaitu 1 kuota saja. Sedangkan pada _repository_ yang bersifat **public** tidak ada keterbatasan kuota. Ketentuan tersebut berlaku bagi pengguna yang tidak berbayar atau gratis. Sehingga dibagikan di sini alternatif lain untuk mendapatkan _repository_ yang lebih leluasa, baik **public** maupun **private**. Yaitu menggunakan [**GitLab container registry**](https://docs.gitlab.com/ee/user/packages/container_registry/), yang memiliki bentuk akses sesuai dengan _repository_ yang telah dibuat. Jika _repository_ berupa **private**, maka akses pada _container registry_ juga berbentuk **private**. Begitu pula sebaliknya.

## Persiapan & Langkah-langkah

Untuk memulai membuat _container registry_ di **GitLab** dapat dipersiapkan sebuah aplikasi yang ingin dilakukan deployment ke server. Pada kasus ini diberikan contoh sederhana membuat `REST API` menggunakan **_nodejs_** dengan framework **_nestjs_**. Agar lebih singkat aplikasi yang digunakan dilakukan _generate_ dari [nestjs CLI](https://docs.nestjs.com/cli/overview). Berikut dijelaskan langkah-langkah pembuatan aplikasi hingga ke proses akhir menjadi _container registry_ di **GitLab** _repository_.

- Melakukan _generate_ untuk membuat aplikasi `REST API` via terminal. (Pada kasus ini digunakan _nodejs_ versi 18) Ketik dan jalankan untuk melakukan instalasi `nestjs` pada _library global_ lokal.
```
npm i -g @nestjs/cli
```

- Membuat direktori aplikasi dengan menjalankan perintah berikut.
```
nest new <project-name>
```

- Membuat **Dockerfile** yang selanjutnya akan menjadi `image` untuk diteruskan ke _container registry_. Cuplikannya seperti berikut:

![Docker](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ffl6shap40toiguagasi.png)

- Membuat _repository_ di **GitLab** untuk menyimpan `source code` aplikasi yang telah dibuat, sekaligus menjadi _repository_ untuk _container registry_.

![Gitlab Container Registry Capture](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5vhgpo83sldiqowsz7r7.png)

- Melakukan _push/upload_ ke **GitLab** _repository_.

![Gitlab Repository](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vk61m1017wtzmh223qzw.png)

- Melakukan _build/compile_ aplikasi berdasarkan `Dockerfile` yang telah dibuat. Nama `image` diharuskan menyesuaikan pada halaman _container registry_ di _repository_ **GitLab**.

![Container Registry Command](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j3v9ssicdihn1u2olq4t.png)

- Memastikan `login` ke **GitLab** _container registry_ dengan perintah:

```
docker login registry.gitlab.com
```

- Menjalankan _docker container_ di lokal komputer dengan perintah:

```
docker run --rm -p -d 3000:3000 <image-name>
```

- Memastikan aplikasi berjalan sesuai di _browser_ atau **Postman**.

![Browser](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3ltcl7jw1kabu52pfd6h.png)

![Postman](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m9e93ix1ik0ayxr89vrr.png)

- Setelah berbentuk `image`, perlu dilakukan _push/upload_ ke _container registry_ di _repository_ **GitLab** yang sebelumnya telah dibuat.

![Image Pushed](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n5vbsnoh4z0ti73obep8.png)

- Pada _server_ yang ditujukan atau di lokal komputer, _docker_ `image` pada **GitLab** _container registry_ dapat dilakukan _download/pull_ dengan perintah:

```
docker pull <image-name>
```

- Langkah akhir dapat dijalankan _docker_ `image` yang telah diunduh/di-_download_ dengan perintah:

```
docker run --rm -p -d 3000:3000 <image-name>
```

## Akhir Kata

_Source code_ lengkap dapat dilihat pada [link ini](https://gitlab.com/devto182/nestcr). Sekian.

---

> Credits:
> Image cover by <a href="https://unsplash.com/@inidianaa?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash">Tri Eptaroka Mardiana</a> on <a href="https://unsplash.com/photos/architectural-photography-of-cargo-containers-stack-hP4ZiN1_kdk?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash">Unsplash</a>.

> Support me on:
> [saweria](https://saweria.co/angm182)

---

[![my-site](https://forthebadge.com/images/badges/powered-by-black-magic.svg)](https://anangm182.com/)