Maafkan saya yang akhir-akhir ini tidak menulis blog (2 bulan), dikarenakan kerjaan yang padat dan manajemen waktu yang buruk. Namun sekarang saya senggang dan mampu untuk menulis blog.
Intro
Kadang untuk alasan privasi atau mencari kecepatan dalam deployment, seseorang atau suatu perusahaan akan memilih untuk membuat Container Registry-nya sendiri, apalagi sekarang lagi populer banget development aplikasi menggunakan kontainer, cocok banget. Untuk itu dibuatlah artikel ini. Namun pada artikel ini saya hanya akan memberikan contoh kecilnya saja, yang mungkin bisa kalian kembangkan misal kalian ingin membuat cluster container registry, dsb. Okay langsung saja.
Requirement
- Docker
- Docker Compose
- Nginx
- Certbot/LetsEncrypt (HTTPS bro/gak wajib)
- Sebuah domain (jika anda orang yang mampu/gak wajib)
Susunan file & directory
|
|
Berikut adalah susunan file & directory yang akan digunakan, asumsikan folder utama kita (workdir) bernama container-registry, didalamnya ada directory bernama auth dan registry, auth berisi file htpasswd yang berguna untuk menyimpan user & password sedangkan directory registry adalah folder yang akan digunakan untuk menyimpan semua image yang dipush oleh user. Dan jangan lupakan file docker-compose.yaml, file yang berisi konfigurasi kontainer.
Step-by-step
Ya… HTTPS dan domain itu tidak wajib karena tidak semua orang memiliki uang yang cukup untuk membeli sebuah domain (seperti saya). Sebenarnya untuk login docker registry membutuhkan request HTTPS, tapi kita bisa mem-bypassnya, nanti bakal saya jelasin diakhir artikel.
Docker-compose file
Pertama, kita akan mendeploy sebuah container registry, dan untungnya Docker sudah membuat imagenya agar kita bisa lebih mudah dalam membuat container registry secara pribadi. Pada artikel ini dibuat, docker registry masih dalam versi 2.7.0. Jika ingin menggunakan versi terbaru kalian bisa cek pada Docker Hub.
|
|
Tapi jangan dideploy terlebih dahulu! Karena kita harus membuat autentikasi password terlebih dahulu.
Autentikasi
Tentu saja kita ingin, registry kita hanya dimasuki oleh orang yang kita beri akses, untuk itu kita harus membuat autentikasi agar user harus login untuk dapat menggunakan registry ini. Masukkan perintah berikut.
|
|
Deployment
Step paling gampang yaitu deployment, karena kita hanya akan menjalankan satu perintah saja.
|
|
Konfigurasi domain dan SSL
Pada artikel ini, kita akan menggunakan SSL gratis yaitu Certbot/LetsEncrypt. Pertama install terlebih dahulu Certbot & Nginx.
|
|
Reverse Proxy
Buat reverse proxy terlebih dahulu untuk mengalihkan IP Address server dengan domain yang kita miliki. Kita tidak perlu membuat konfigurasi untuk HTTPS karena nantinya akan digenerate otomatis oleh Certbot.
|
|
client_max_body_size
adalah limit upload yang diperbolehkan, kalian bisa atur sesuka hati, namun saya lebih suka memberi angka yang demonic!!!server_name
adalah nama domain kalian.proxy_pass
adalah alamat IP Address server yang dideploy container registry.
SSL/HTTPS
Let the magic happen. Dengan Certbot, memasang SSL akan terasa sangat mudah.
|
|
Ketika proses selesai, coba buka file /etc/nginx/sites-available/registry.conf
untuk memastikan bahwa konfigurasi SSL sudah berhasil. Jika sudah selesai kurang lebih outputnya akan terlihat seperti ini.
|
|
Testing
Pemasangan Reverse Proxy dan SSL adalah step terakhir yang kita lalui, sekarang saatnya untuk mencoba container registry yang telah kita deploy.
Login
|
|
Pull & Push Image
|
|
Jika tidak paham dengan command berikut, kalian bisa cek pada aritek saya yang sebelumnya yaitu Docker Untuk Pemula hehehe…
Cek Images
Pada container registry ini, kita tidak dapat menggunakan perintah docker search seperti biasanya, sebagai gantinya kita bisa melakukan pengecekan atau melihat semua daftar images pada container registry ini menggunakan HTTP request. Seperti contoh.
|
|
Kita juga dapat melihat list tags pada sebuah image.
|
|
Insecure Container Registry
Seperti yang saya janjikan diawal artikel ini, untuk teman-teman yang tak memiliki domain atau yang benar-benar hanya ingin Container registry ini diakses secara local, namun normalnya jika kalian mengaksesnya menggunakan menggunakan direct IP Address ataupun protokol HTTP, Docker akan melempar error http: server gave http response to https client
. Dan inilah yang akan kita bahas pada bab ini. Buat file daemon.json untuk membuat list insecure-registries (insecure seperti saya).
|
|
Lalu restart Docker kalian terlebih dahulu. Contoh dibawah menggunakan systemd.
|
|
Lalu kalian bisa login.
|
|
Konsiderasi
Sebenarnya ada produk Container Registry lain yang ada seperti JFrog dan Nexus keduanya memiliki Web Interface yang memudahkan kita untuk me-manage registry, namun saya memilih Docker karena deployment yang simple dan minimalist. Selalu ada Pro dan Kontra dalam memilih sesuatu, namun kita hanya harus memilih yang cocok untuk kita pakai.
Penutup
Oke sekian artikel pada hari ini, saya sangat senang akhirnya bisa menulis lagi, seperti biasa jika ada pertanyaan/typo/kurang jelas, kalian bisa berdiskusi pada kolom komentar. Sekian dan terimakasih.