Продвинутый Docker
1Volumes: типы и продакшн-практики2Сети Docker: bridge, host, overlay3Docker Hub и private registry← вы здесь
Урок 3~9 минут

Docker Hub и private registry

Registry — хранилище Docker образов. Docker Hub — публичный по умолчанию. В компаниях используют private registry.

Docker Hub

bash
# Авторизация
docker login
 
# Публикация
docker build -t myapp .
docker tag myapp username/myapp:1.0
docker push username/myapp:1.0
 
# Скачать на другом хосте
docker pull username/myapp:1.0

Стратегия тегирования

bash
# По версии (SemVer) — рекомендуется
docker tag myapp user/myapp:2.1.3
docker tag myapp user/myapp:2.1     # minor alias
docker tag myapp user/myapp:2       # major alias
 
# По Git SHA — для CI/CD
GIT_SHA=$(git rev-parse --short HEAD)
docker tag myapp user/myapp:${GIT_SHA}
 
# Никогда в продакшне:
docker tag myapp user/myapp:latest

GitHub Container Registry (ghcr.io)

bash
# Авторизация через Personal Access Token
echo $GITHUB_TOKEN | docker login ghcr.io -u USERNAME --password-stdin
 
# Push
docker tag myapp ghcr.io/username/myapp:1.0
docker push ghcr.io/username/myapp:1.0

Интеграция с GitHub Actions — в CI автоматически публикуется при push в main.

GitHub Actions: автоматический build и push

yaml
# .github/workflows/docker.yml
name: Docker Build and Push
 
on:
  push:
    branches: [main]
    tags: ['v*']
 
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
 
      - name: Login to ghcr.io
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
 
      - name: Build and push
        uses: docker/build-push-action@v5
        with:
          push: true
          tags: |
            ghcr.io/${{ github.repository }}:latest
            ghcr.io/${{ github.repository }}:${{ github.sha }}

Private Registry

bash
# Запустить локально
docker run -d \
  -p 5000:5000 \
  --name registry \
  -v registry-data:/var/lib/registry \
  registry:2
 
# Использовать
docker tag myapp localhost:5000/myapp:1.0
docker push localhost:5000/myapp:1.0
docker pull localhost:5000/myapp:1.0

Registry с TLS и авторизацией

bash
docker run -d \
  -p 5000:5000 \
  -v $(pwd)/certs:/certs \
  -v $(pwd)/auth:/auth \
  -v registry-data:/var/lib/registry \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
  -e REGISTRY_AUTH=htpasswd \
  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  registry:2

Сканирование образов

bash
# Docker Scout (встроен)
docker scout cves myapp:1.0     # уязвимости
docker scout recommendations myapp:1.0  # рекомендации
 
# Trivy (open source)
trivy image myapp:1.0

Сканирование на уязвимости — обязательная часть CI/CD pipeline перед деплоем в продакшн.

Полный цикл CI/CD

git push → GitHub Actions → docker build → trivy scan → docker push → deploy
                                                 ↓ fail если критические CVE

Поздравляем — курс Docker завершён! Вы прошли путь от docker run hello-world до продакшн-деплоя с CI/CD pipeline.

docker tag → docker push → docker pull. Для CI/CD: собрать, тегировать версией, пушить в registry, деплоить с конкретным тегом.
📦
Docker Registry: build → push → deploy
💻
Dev machine
Твой ноутбук
нет образа
📦
ghcr.io
GitHub Container Registry
нет образа
🖥️
Production
VPS / облако
нет образа
🔨
Build
🏷️
Tag
⬆️
Push
⬇️
Pull on server
🎯
Миссия 1 из 3
Как опубликовать образ на Docker Hub?