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
- Daftar di hub.docker.com
- Klik Create Repository
- Beri nama repository (misal:
blog-api) - 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/🎮🍉⌨️🍩💻