Docker Hub ба registry
Image-уудаа хаа нэгтэй хадгалж, бусад хүмүүстэй хуваалцах, сервер дээр deploy хийхийн тулд registry ашиглана.
Registry гэж юу вэ?
Registry бол image-уудыг хадгалдаг централ газар. Git-ийн GitHub шиг — кодын оронд Docker image хадгалдаг.
Local machine → docker push → Registry → docker pull → Server
Docker Hub
hub.docker.com — Docker-ийн албан ёсны, хамгийн том registry.
- Public repository: үнэгүй, хязгааргүй
- Private repository: 1 үнэгүй, цаашид төлбөртэй
- Official image-ууд:
postgres,node,python,nginxгэх мэт
Docker Hub бүртгэл үүсгэх
- hub.docker.com руу орж бүртгэл үүсгэнэ
- Terminal дээр нэвтрэнэ:
docker login
# Username: tanii_username
# Password: tanii_password
Амжилттай нэвтэрвэл:
Login Succeeded
Image нэрлэх дүрэм
Registry-д push хийхийн тулд image-ийг зөв нэрлэх шаардлагатай:
[registry/]username/repository[:tag]
Жишээ:
myusername/myapp:latest
myusername/myapp:1.0.0
myusername/myapp:v2-alpine
ghcr.io/myusername/myapp:latest
Docker Hub-ийн хувьд registry/ хэсгийг орхиж болно.
Image push хийх
# 1. Image build хийх — зөв нэртэйгээр
docker build -t myusername/myapp:1.0.0 .
# 2. latest tag нэмэх
docker tag myusername/myapp:1.0.0 myusername/myapp:latest
# 3. Push хийх
docker push myusername/myapp:1.0.0
docker push myusername/myapp:latest
Эсвэл байгаа image-д tag нэмэх:
docker tag myapp:local myusername/myapp:1.0.0
docker push myusername/myapp:1.0.0
Image pull хийх
# Docker Hub-аас татах
docker pull myusername/myapp:latest
# Тодорхой version татах
docker pull myusername/myapp:1.0.0
# Official image татах
docker pull postgres:16
docker pull node:20-alpine
Private registry
Зарим тохиолдолд public биш private registry шаардлагатай:
GitHub Container Registry (ghcr.io)
GitHub аккаунт байгаа бол GitHub-ийн container registry ашиглаж болно:
# GitHub Personal Access Token үүсгэнэ (read:packages, write:packages scope)
echo $GITHUB_TOKEN | docker login ghcr.io -u myusername --password-stdin
# Image push
docker tag myapp:latest ghcr.io/myusername/myapp:latest
docker push ghcr.io/myusername/myapp:latest
Өөрийн registry ажиллуулах
docker run -d \
--name registry \
-p 5000:5000 \
-v registry-data:/var/lib/registry \
registry:2
# Өөрийн registry-д push хийх
docker tag myapp:latest localhost:5000/myapp:latest
docker push localhost:5000/myapp:latest
# Татах
docker pull localhost:5000/myapp:latest
Multi-platform image
ARM (Apple M1/M2) болон x86 серверт ажиллах image build хийх:
# buildx ашиглана
docker buildx build \
--platform linux/amd64,linux/arm64 \
-t myusername/myapp:latest \
--push \
.
Автоматаар tag тавих
Version control-тай холбох нь практик:
# Git commit hash ашиглах
GIT_HASH=$(git rev-parse --short HEAD)
docker build -t myusername/myapp:${GIT_HASH} .
docker push myusername/myapp:${GIT_HASH}
Docker Hub-аас image устгах
# Local image устгах
docker rmi myusername/myapp:1.0.0
# Docker Hub дээрх image устгах нь web UI-ээр хийнэ:
# hub.docker.com → Repository → Tags → Delete
CI/CD-тэй холбох
GitHub Actions-ын жишээ (наад зах нь ойлголт):
# .github/workflows/docker.yml
- name: Docker Hub-д нэвтрэх
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Image build ба push
uses: docker/build-push-action@v5
with:
push: true
tags: myusername/myapp:latest
Нууц үг болон token-ийг GitHub Secrets-т хадгалж, workflow-д ашиглана.
Registry харьцуулалт
| Registry | Үнэ | Онцлог | | ------------------------- | ---------------------- | -------------------------------- | | Docker Hub | 1 private үнэгүй | Хамгийн алдартай, official image | | GitHub Container Registry | GitHub repo-той үнэгүй | GitHub Actions-тай нэгтгэгдсэн | | AWS ECR | Pay-per-use | AWS ECS/EKS-тэй гүн нэгтгэгдсэн | | Google Artifact Registry | Pay-per-use | GKE-тэй гүн нэгтгэгдсэн | | Self-hosted | Сервер зардал | Бүрэн хяналт |
Дараагийн хичээлд:
docker push ба docker pull командуудыг дэлгэрэнгүй үзэж, tag стратеги болон automated workflow-г практикаар харна.