Продвинутый Docker
Урок 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:latestGitHub 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.0Registry с 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?