tutorial, docker,

Docker Registry: Cara Push dan Pull Image ke Docker Hub dan Private Registry

Kiki/🎮🍉⌨️🍩💻 Kiki/🎮🍉⌨️🍩💻 Sep 02, 2026 · 4 mins read
Docker Registry: Cara Push dan Pull Image ke Docker Hub dan Private Registry
Share this

Setelah berhasil membangun Docker Image, langkah selanjutnya adalah menyimpannya di tempat yang bisa diakses oleh server production, anggota tim, atau pipeline CI/CD. Di sinilah Docker Registry berperan — layanan penyimpanan dan distribusi Docker Image.


Apa itu Docker Registry?

Docker Registry adalah server yang menyimpan Docker Image. Analoginya seperti GitHub untuk kode, tapi untuk Image Docker.

Jenis Registry

  • Docker Hub — registry publik resmi Docker, gratis untuk public repository
  • GitHub Container Registry (GHCR) — terintegrasi dengan GitHub
  • Google Artifact Registry — untuk pengguna Google Cloud
  • AWS ECR — untuk pengguna Amazon Web Services
  • Private Registry — self-hosted menggunakan image registry:2

Docker Hub

Buat Akun dan Repository

  1. Daftar di hub.docker.com
  2. Klik Create Repository
  3. Beri nama repository (misal: blog-api)
  4. Pilih Public (gratis) atau Private (1 private repo gratis)

Login dari Terminal

docker login
# Masukkan username dan password Docker Hub

Tagging Image

Sebelum push, Image harus di-tag dengan format username/repo-name:tag:

# Build dengan tag yang benar langsung
docker build -t kikukeii/blog-api:1.0.0 .

# Atau tag image yang sudah ada
docker tag blog-api:1.0 kikukeii/blog-api:1.0.0

# Konvensi tagging yang umum
docker tag blog-api kikukeii/blog-api:latest
docker tag blog-api kikukeii/blog-api:1.0.0
docker tag blog-api kikukeii/blog-api:1.0

Push Image ke Docker Hub

# Push satu tag
docker push kikukeii/blog-api:1.0.0

# Push semua tag sekaligus
docker push kikukeii/blog-api --all-tags

Pull Image

# Pull dari Docker Hub (format: username/repo:tag)
docker pull kikukeii/blog-api:1.0.0

# Pull image official (tanpa username)
docker pull postgres:16-alpine
docker pull nginx:latest

GitHub Container Registry (GHCR)

GHCR adalah pilihan terbaik jika proyek kamu sudah di GitHub. Image tersimpan bersama repository kode.

Setup

# Login dengan GitHub Personal Access Token
echo $GITHUB_TOKEN | docker login ghcr.io -u USERNAME --password-stdin

# Tag image dengan prefix ghcr.io
docker tag blog-api ghcr.io/username/blog-api:latest

# Push
docker push ghcr.io/username/blog-api:latest

# Pull
docker pull ghcr.io/username/blog-api:latest

Otomatis Push via GitHub Actions

.github/workflows/docker.yml:

name: Build and Push Docker Image

on:
  push:
    branches: [main]
    tags: ['v*']

env:
  REGISTRY: ghcr.io
  IMAGE_NAME: $

jobs:
  build-push:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write

    steps:
      - uses: actions/checkout@v4

      - name: Login ke GHCR
        uses: docker/login-action@v3
        with:
          registry: $
          username: $
          password: $

      - name: Ekstrak metadata
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: $/$
          tags: |
            type=semver,pattern=
            type=semver,pattern=.
            type=sha
            type=raw,value=latest,enable=$

      - name: Build dan Push
        uses: docker/build-push-action@v5
        with:
          context: .
          push: true
          tags: $
          labels: $
          cache-from: type=gha
          cache-to: type=gha,mode=max

Private Registry Self-Hosted

Untuk perusahaan yang tidak ingin menyimpan Image di cloud publik, jalankan registry sendiri:

# Jalankan private registry di port 5000
docker run -d \
  -p 5000:5000 \
  --name registry \
  -v registry_data:/var/lib/registry \
  --restart unless-stopped \
  registry:2

# Tag dengan alamat registry lokal
docker tag blog-api localhost:5000/blog-api:1.0

# Push ke private registry
docker push localhost:5000/blog-api:1.0

# Pull dari private registry
docker pull localhost:5000/blog-api:1.0

# Lihat semua image di registry
curl http://localhost:5000/v2/_catalog

# Lihat tag dari image tertentu
curl http://localhost:5000/v2/blog-api/tags/list

Strategi Tagging yang Baik

Tag yang baik memudahkan rollback dan deployment management:

# Semantic versioning + latest + git SHA
docker tag blog-api registry/blog-api:2.1.0
docker tag blog-api registry/blog-api:2.1
docker tag blog-api registry/blog-api:2
docker tag blog-api registry/blog-api:latest
docker tag blog-api registry/blog-api:sha-a1b2c3d

# Jangan pernah gunakan hanya :latest di production
# Karena tidak bisa tahu versi mana yang sebenarnya running

Menghapus Image Lama

Image lama yang menumpuk di registry memakan storage. Bersihkan secara berkala:

# Hapus image lokal
docker rmi kikukeii/blog-api:1.0.0
docker image prune -a   # hapus semua image yang tidak digunakan

# Di Docker Hub, hapus tag via web UI atau API
curl -X DELETE \
  -H "Authorization: JWT $TOKEN" \
  https://hub.docker.com/v2/repositories/kikukeii/blog-api/tags/1.0.0/

Kesimpulan

Docker Registry adalah jembatan antara proses build di local/CI dan deployment di server production. Docker Hub cocok untuk proyek publik atau open source, GHCR untuk proyek yang sudah di ekosistem GitHub, dan self-hosted registry untuk kebutuhan privasi dan kontrol penuh.

Di artikel berikutnya, kita bahas cara men-deploy container Docker ke server production menggunakan pendekatan yang aman dan efisien.

Kiki/🎮🍉⌨️🍩💻
Written by Kiki/🎮🍉⌨️🍩💻
hello I'm friend K.