Docker / Docker Hub ба registry

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 бүртгэл үүсгэх

  1. hub.docker.com руу орж бүртгэл үүсгэнэ
  2. Terminal дээр нэвтрэнэ:
bash
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 хийх

bash
# 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 нэмэх:

bash
docker tag myapp:local myusername/myapp:1.0.0
docker push myusername/myapp:1.0.0

Image pull хийх

bash
# 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 ашиглаж болно:

bash
# 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 ажиллуулах

bash
docker run -d \
  --name registry \
  -p 5000:5000 \
  -v registry-data:/var/lib/registry \
  registry:2
bash
# Өөрийн 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 хийх:

bash
# buildx ашиглана
docker buildx build \
  --platform linux/amd64,linux/arm64 \
  -t myusername/myapp:latest \
  --push \
  .

Автоматаар tag тавих

Version control-тай холбох нь практик:

bash
# 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 устгах

bash
# Local image устгах
docker rmi myusername/myapp:1.0.0

# Docker Hub дээрх image устгах нь web UI-ээр хийнэ:
# hub.docker.com → Repository → Tags → Delete

CI/CD-тэй холбох

GitHub Actions-ын жишээ (наад зах нь ойлголт):

yaml
# .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-г практикаар харна.