Skip to content
VDS · Docker dan kontainer

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 latest alih-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 ./data tidak ada di backup Anda. Anda akan kehilangan semua image yang sumbernya tidak ada di tangan Anda. Lihat apa yang perlu di-backup.