Registry image milik Anda sendiri
Kapan Anda memerlukan registry sendiri, cara mengaturnya dengan kata sandi dan sertifikat, berapa disk yang dikonsumsi, dan cara agar tidak berubah menjadi tumpukan image lama.
Diperbarui 23 Agustus 2026
Registry adalah penyimpanan image. Anda memerlukannya sendiri dalam tiga kasus: image bersifat privat dan tidak boleh keluar dari infrastruktur Anda, build sering dilakukan dan batas unduhan eksternal menghambat, atau Anda men-deploy hal yang sama ke beberapa mesin.
Opsi sederhana: registry:2
services:
registry:
image: registry:2
restart: unless-stopped
environment:
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry
REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
REGISTRY_STORAGE_DELETE_ENABLED: "true"
volumes:
- ./data:/var/lib/registry
- ./auth:/auth:ro
ports:
- "127.0.0.1:5000:5000"
Buat kata sandi seperti ini:
mkdir -p auth
docker run --rm --entrypoint htpasswd httpd:2 -Bbn deploy 'long-password' > auth/htpasswd
docker compose up -d
Jangan ekspos portnya ke luar: web server dengan sertifikat dipasang di depan registry. Docker menolak bekerja dengan registry pihak ketiga melalui HTTP — dan itu memang benar, karena kode yang dapat dieksekusi masuk ke mesin Anda melaluinya.
Bekerja dengannya
docker login registry.example.com
docker tag myapp:1.5.0 registry.example.com/myapp:1.5.0
docker push registry.example.com/myapp:1.5.0
docker pull registry.example.com/myapp:1.5.0
curl -u deploy https://registry.example.com/v2/_catalog
curl -u deploy https://registry.example.com/v2/myapp/tags/list
Setelah docker login, kredensial tersimpan di ~/.docker/config.json dalam bentuk teks biasa (base64 bukan enkripsi). Di mesin build, buat akun terpisah dengan hak hanya-baca.
Registry tanpa batas ukuran dan tanpa pembersihan adalah cara tercepat untuk memenuhi disk. Setiap build menambah layer, dan menghapus tag tidak membebaskan ruang: Anda perlu garbage collection. Di VDS-1 dengan 40 GB, registry proyek yang aktif akan memenuhi disk dalam beberapa minggu.
Pembersihan
Menghapus tag dan garbage collection setelahnya:
docker compose exec registry registry garbage-collect \
--delete-untagged /etc/docker/registry/config.yml
Anda harus menghentikan registry saat garbage collection berjalan — jika tidak, push yang bersamaan dapat kehilangan layer:
docker compose stop registry
docker compose run --rm registry registry garbage-collect --delete-untagged /etc/docker/registry/config.yml
docker compose start registry
Atur ini sebagai tugas terjadwal sekali seminggu dan pantau ruang disk.
Alternatif: registry yang dibundel dengan server Git
Jika Anda sudah menyiapkan Forgejo atau Gitea, keduanya memiliki penyimpanan paket bawaan, termasuk image Docker. Anda tidak perlu layanan terpisah: akses melalui akun yang sama, dan image terlihat di samping kode. Untuk proyek kecil ini lebih praktis daripada registry:2 yang berdiri sendiri.
Kesalahan umum
- Registry terbuka tanpa otorisasi. Melaluinya, seseorang dapat menanam image yang akan di-deploy di mesin produksi Anda sendiri.
- Tag
latestalih-alih versi. Registry berhenti menjadi sumber reproduksibilitas: tidak jelas apa yang sebenarnya di-deploy. Lihat memperbarui container. - Penyimpanan di disk yang sama dengan database. Lonjakan push memakan bandwidth disk dan memperlambat layanan produksi — lihat kecepatan disk.
- Direktori
./datatidak ada di backup Anda. Anda akan kehilangan semua image yang sumbernya tidak ada di tangan Anda. Lihat apa yang perlu di-backup.