Unregistry – mengirim `docker push` langsung ke server tanpa registry
(github.com/psviderski)- Unregistry adalah alat open source yang dapat mengirim image Docker langsung ke server remote tanpa registry eksternal
- Melalui perintah
docker pussh, image dikirim ke server remote lewat SSH secara efisien, dan layer yang sudah ada akan dilewati - Mengatasi kerumitan dan inefisiensi dari Docker Hub tradisional, registry mandiri, maupun metode save/load
- Sangat unggul untuk deployment lingkungan produksi, CI/CD, dan lingkungan air-gapped karena pemindahan image yang cepat dan aman
- Instalasi, penggunaan, dan persyaratan sangat sederhana, tanpa perlu menjalankan layanan tambahan atau membuka port
Pengenalan Unregistry dan keunggulan utamanya
- Unregistry adalah registry image ringan yang menyimpan dan menyajikan image langsung dari storage daemon Docker
- Dengan perintah
docker pussh, image dapat dipindahkan langsung ke server Docker remote melalui SSH tanpa registry eksternal - Saat transfer, layer yang sudah ada di server dikecualikan sehingga hanya bagian yang diperlukan yang dikirim dengan cepat
Masalah pada deployment image Docker tradisional
- Saat image dibangun secara lokal lalu dikirim ke server, pilihannya biasanya seperti berikut
- Docker Hub/GitHub Container Registry: kode bisa terekspos ke luar atau menimbulkan biaya saat memakai repositori privat
- Registry mandiri: menambah beban operasional layanan terpisah serta pengelolaan keamanan dan storage
- Save/Load: selalu mengirim seluruh image sehingga tidak efisien
- Rebuild langsung di server: membuang waktu dan resource server serta menimbulkan masalah debugging
Solusi Unregistry
-
Dengan satu perintah
docker pussh myapp:latest user@server, image bisa dikirim langsung tanpa penyimpanan perantara -
Tidak perlu konfigurasi registry tambahan, membuka port, menyiapkan storage, atau berlangganan
-
Proses transfer
- Menghubungkan SSH tunnel ke server remote
- Menjalankan container unregistry sementara
- Menghubungkan port lokal acak ke port unregistry
- Mengirim hanya layer yang belum ada melalui docker push (siap dipakai segera)
- Menghentikan container unregistry dan SSH tunnel
-
Pendekatannya sederhana dan efisien seperti
rsync -
Proyek ini dikembangkan dari Uncloud untuk menyederhanakan kerumitan deployment container ke banyak host Docker
Contoh penggunaan
Mengirim image langsung ke lingkungan deployment
- Build di lokal lalu push langsung ke server produksi
docker build --platform linux/amd64 -t myapp:1.2.3 .docker pussh myapp:1.2.3 deploy@prod-serverssh deploy@prod-server docker run -d myapp:1.2.3
Pipeline CI/CD
- Mendukung build dan deployment tanpa kerumitan registry
- Bisa memakai transfer langsung dari GitHub Action YAML dan sejenisnya
Homelab, lingkungan tertutup tanpa internet
- Mengirim image dengan aman ke jaringan terisolasi tanpa mengekspos image ke internet
Cara penggunaan
- Akun pengguna SSH harus bisa menjalankan perintah docker di server remote
- Mendukung opsi tambahan seperti SSH private key atau port SSH kustom
- Juga mendukung transfer image multi-platform (jika berbasis containerd)
Persyaratan
Lingkungan lokal
- Docker CLI (dukungan plugin, 19.03+)
- Klien OpenSSH
Server remote
- Docker harus terpasang dan sedang berjalan
- Pengguna ssh harus memiliki izin docker, dan bila perlu harus bisa menjalankan
sudo dockertanpa kata sandi - Performa meningkat saat menggunakan containerd image store
- Tambahkan konfigurasi berikut ke
/etc/docker/daemon.jsonlalu restart Docker{ "features": { "containerd-snapshotter": true } }
- Tambahkan konfigurasi berikut ke
Penggunaan lanjutan
Digunakan sebagai registry lokal mandiri
- Unregistry dapat dijalankan dengan mudah sebagai registry lokal tanpa komponen tambahan
- Bisa melakukan deploy dan push lewat perintah Docker
Memanfaatkan opsi SSH kustom
- File konfigurasi SSH dapat dipakai untuk pengaturan detail seperti autentikasi tambahan, port, dan kebutuhan lainnya
Kontribusi dan komunitas
- Jika menemukan bug, gunakan GitHub Issues untuk melaporkannya
- Di komunitas Discord Uncloud, Anda dapat mendiskusikan fitur, roadmap, dan detail implementasi
Inspirasi dan open source rujukan
- Spegel: memberi inspirasi dari implementasi registry image container P2P berbasis containerd
- Docker Distribution: digunakan sebagai basis implementasi registry yang sebenarnya
Ringkasan
- Unregistry adalah alat untuk memindahkan image Docker langsung ke server remote dengan mudah dan cepat, sehingga menghilangkan beban membangun dan mengelola registry
- Memberikan keunggulan kuat di berbagai skenario seperti deployment produksi, CI/CD, dan jaringan tertutup
- Sangat cocok jika server dan administrator ingin memindahkan image secara sederhana tanpa prosedur tambahan
1 komentar
Komentar Hacker News
Dari sudut pandang karakteristik server, batas keamanan, dan hardening, saya tidak ingin merekomendasikan penggunaan Homebrew di Linux; meskipun instalasi untuk Linux disediakan, rasanya seperti tambahan belakangan, dan alih-alih berfungsi seperti package manager, perilakunya lebih mirip burung merpati di atas papan baduk
Menurut saya ini ide keren yang akan cocok di tempat yang sudah menggunakan tooling deployment push seperti Ansible di sistem mereka, dan juga terasa cocok sebagai teknik deployment hotfix untuk perusahaan yang tidak memiliki dukungan Docker registry 24/7; saya penasaran apakah ini juga terintegrasi rapi dengan tooling OCI (seperti buildah), atau apakah Docker penuh perlu terpasang di kedua sisi; saya belum benar-benar mendalaminya, tetapi berencana mengerjakan hal terkait ini, dan saya merasa skopeo kekurangan kemampuan untuk melakukan bootstrap registry sendiri di server jarak jauh agar bisa bekerja di lingkungan seperti ini
Server jarak jauh membutuhkan containerd (Docker dan Kubernetes juga menggunakan containerd), dan di sisi klien bisa memakai apa pun yang memahami Registry API (OCI Distribution spec: https://github.com/opencontainers/distribution-spec); Unregistry menggunakan ulang kode registry Docker resmi sebagai lapisan API, jadi terasa mirip registry milik Docker Hub; OCI registry dapat digunakan lewat skopeo, crane, regclient, BuildKit, dan lainnya, tetapi untuk memakainya Anda perlu menjalankan unregistry langsung di host jarak jauh; perintah
docker pusshberperan mengotomatiskan seluruh alur ini dengan memanfaatkan Docker lokal, jadi saya sarankan untuk melihatnya karena itu hanya skrip bash https://github.com/psviderski/unregistry/blob/main/docker-pussh, dan mudah juga untuk dimodifikasi sesuka hatiDiperlukan docker daemon di kedua sisi; metode ini memakai cara yang cerdik dengan membagikan layer antar dua daemon melalui ssh
Saya pikir perintah
pusshmudah diingat, cukup self-explanatory, dan merupakan permainan kata yang bagus karena hanya berbeda satu huruf dari perintah standar yang sudah ada"pussh" tidak buruk, tetapi untuk otomatisasi mungkin alias yang lebih jelas seperti "docker push-over-ssh" akan lebih baik; orang yang pertama kali melihat "pussh" bisa mengiranya typo dan menimbulkan kebingungan yang tidak perlu; akan bagus jika mendukung baik versi singkat maupun versi flag lengkap
Ada penjelasan bercanda bahwa tambahan satu huruf 's' dimaksudkan untuk mewakili 'sssh'; ada juga yang bilang itu sekadar typo
Nama "pussh" mungkin bisa bertabrakan dengan perintah lain
Fitur seperti ini seharusnya sudah ada sejak lama dan menurut saya sangat keren; Docker registry memang punya nilainya sendiri, tetapi secara keseluruhan sudah menjadi terlalu kompleks dan terasa makin jauh dari semangat hacker
Proyek dan pendekatannya sangat mengesankan; saya sempat muak dengan registry mahal dan pernah self-host sesuatu seperti Zot(https://zotregistry.dev), tetapi untuk beberapa use case metode ini terlihat jauh lebih sederhana; saya berharap layanan private registry yang mudah, murah, dan berbasis pemakaian bisa menjadi lebih umum
Saya pikir Docker seharusnya bekerja seperti ini sejak awal; terasa seperti ide yang keren
docker save -o my-app.tar my-app:latest, lalu muat dengandocker load -i /path/to/my-app.tar; bila digabungkan dengan tool otomatisasi seperti ansible, Anda bisa melakukan sendiri apa yang diotomatisasi oleh Unregistry; namun repo github menyebutkan kelemahan pendekatan save/load adalah seluruh image harus ditransfer setiap kali, dan pengelolaan image juga lebih nyaman dibanding file arsipSenang melihat kembalinya pendekatan menuju self-hosting dengan memanfaatkan tool seperti ini dan tooling SSH; menurut saya hasilnya dibuat dengan baik, dan saya berencana mencobanya sendiri
Berkat tool ini saya jadi pertama kali mengetahui proyek bernama uncloud, dan menurut saya itu tampak seperti solusi deployment server ala dokku yang saya inginkan, tetapi lebih kuat, jadi cukup menarik
Saya setuju dengan masukan bahwa uncloud cocok untuk Anda; kalau ada pertanyaan, silakan mampir ke Discord
Ada juga layanan dengan pendekatan serupa di https://skateco.github.io/, jadi layak dilihat
Rekomendasi untuk Portainer; saya memakai Portainer Community Edition dan Portainer Agent dengan baik di dua AWS EC2, dan fitur stack (berbasis docker compose) adalah keunggulan utamanya; di salah satu EC2, portainer agent menjalankan Caddy sebagai container dan menangani fungsi load balancer serta reverse proxy
Ide yang segar, tetapi cara seperti ini cukup erat terikat dengan deployment layanan, sehingga untuk deployment dan scaling, misalnya saat red/green deployment, dibutuhkan logika tambahan yang memahami "push"; setelah dipikir-pikir, saya jadi sadar bahwa peran seperti ini memang diimplementasikan dalam struktur uncloud; tapi pada akhirnya ini soal trade-off, dan jika Anda memprioritaskan kesederhanaan pada satu VM Hetzner, pilihan untuk cukup membangun image secara lokal pun bisa sangat memuaskan