Перейти к основному контенту
Tech Path Finder
КурсыИнтервьюКод-ревьюБлог
Tech Path Finder

Персонализированный путеводитель в IT. Квизы, мок-интервью, код ревью и аналитика прогресса.

@potapov_me

Платформа

  • Курсы
  • Прогресс
  • Мок-интервью
  • Код ревью
  • Живое ревью с ИИ
  • Тренажёр переговоров
  • Закладки

Контент

  • Блог
  • Главная
  • Обратная связь

Компания

  • О проекте
  • Тарифы
  • Условия использования
  • Конфиденциальность
  • Согласие на обработку данных
  • Cookie
  • Реквизиты

Аккаунт

  • Войти
  • Зарегистрироваться
  • Профиль

© 2026 Tech Path Finder. Все права защищены.

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. Работа с реестрами
registry

Работа с реестрами

Docker Hub, private registry, push и pull образов

Работа с реестрами образов

Реестры — хранилища Docker-образов. Изучите работу с Docker Hub, private registry и best practices публикации образов.

#Что такое Docker Registry?

Docker Registry — сервис для хранения и распространения Docker-образов.

Типы реестров:

  • Публичные — Docker Hub, GitHub Container Registry, GitLab Registry
  • Private — самописные, корпоративные, облачные (ECR, GCR, ACR)

#Docker Hub

Docker Hub — публичный реестр по умолчанию.

#Поиск образов

# Поиск в CLI docker search nginx # С фильтром по звёздам docker search --filter stars=100 python # Только официальные образы docker search --filter is-official=true

#Авторизация

# Вход в Docker Hub docker login # Выход docker logout # Вход с указанием пользователя docker login -u username # Вход в private registry docker login registry.example.com

Где хранятся креды:

  • Linux: ~/.docker/config.json
  • macOS: Keychain
  • Windows: Credential Store

#Pull образов

# Загрузить образ docker pull nginx:latest # Загрузить с указанием тега docker pull nginx:1.25.3 # Загрузить все теги репозитория docker pull --all-tags nginx # Загрузить с конкретного реестра docker pull gcr.io/google-containers/nginx:1.25

#Push образов

# 1. Залогиниться docker login # 2. Собрать образ с правильным именем docker build -t username/myapp:v1.0 . # 3. Опубликовать docker push username/myapp:v1.0 # 4. Опубликовать все теги docker push username/myapp --all-tags

#Тегирование для Docker Hub

# Локальный образ docker build -t myapp:v1.0 . # Тегирование для Hub docker tag myapp:v1.0 username/myapp:v1.0 docker tag myapp:v1.0 username/myapp:latest # Push docker push username/myapp:v1.0

Формат имени:

[registry/]username/repository:tag

# Docker Hub (по умолчанию)
username/myapp:v1.0
docker.io/library/nginx:latest

# Private registry
registry.example.com/team/myapp:v1.0

#Private Registry

#Развёртывание локального реестра

# Запуск официального образа registry docker run -d \ -p 5000:5000 \ --name registry \ -v registry-data:/var/lib/registry \ registry:2

Push и pull:

# Тегирование docker tag myapp:v1.0 localhost:5000/myapp:v1.0 # Push docker push localhost:5000/myapp:v1.0 # Pull docker pull localhost:5000/myapp:v1.0

#Registry с HTTPS и аутентификацией

# docker-compose.yml version: '3.8' services: registry: image: registry:2 ports: - "5000:5000" volumes: - registry-data:/var/lib/registry - ./certs:/certs - ./auth:/auth environment: - REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt - REGISTRY_HTTP_TLS_KEY=/certs/domain.key - REGISTRY_AUTH=htpasswd - REGISTRY_AUTH_HTPASSWD_REALM=Registry - REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd restart: always volumes: registry-data:

Создание пользователей:

# Установка htpasswd apt install apache2-utils # Создание файла с пользователями htpasswd -Bbn admin password > auth/htpasswd htpasswd -Bbn developer password >> auth/htpasswd

Настройка Docker client:

# Для self-signed сертификатов # Linux: /etc/docker/daemon.json { "insecure-registries": ["registry.example.com:5000"] } # Перезапуск Docker sudo systemctl restart docker

#Cloud Registries

#AWS ECR (Elastic Container Registry)

# Авторизация aws ecr get-login-password --region us-east-1 | \ docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com # Тегирование docker tag myapp:v1.0 \ 123456789012.dkr.ecr.us-east-1.amazonaws.com/myapp:v1.0 # Push docker push \ 123456789012.dkr.ecr.us-east-1.amazonaws.com/myapp:v1.0 # Pull docker pull \ 123456789012.dkr.ecr.us-east-1.amazonaws.com/myapp:v1.0

#Google GCR (Google Container Registry)

# Авторизация gcloud auth configure-docker # Тегирование docker tag myapp:v1.0 gcr.io/project-id/myapp:v1.0 # Push docker push gcr.io/project-id/myapp:v1.0

#Azure ACR (Azure Container Registry)

# Авторизация az acr login --name myregistry # Тегирование docker tag myapp:v1.0 myregistry.azurecr.io/myapp:v1.0 # Push docker push myregistry.azurecr.io/myapp:v1.0

#GitHub Container Registry (GHCR)

# Авторизация (создать Personal Access Token) echo $GITHUB_TOKEN | docker login ghcr.io -u username --password-stdin # Тегирование docker tag myapp:v1.0 ghcr.io/username/myapp:v1.0 # Push docker push ghcr.io/username/myapp:v1.0

#Управление реестром

#Список образов в локальном registry

# Список репозиториев curl -X GET http://localhost:5000/v2/_catalog # Список тегов curl -X GET http://localhost:5000/v2/myapp/tags/list

#Удаление образов

# Удалить тег из registry API curl -X DELETE \ http://localhost:5000/v2/myapp/manifests/sha256:abc123... # Очистка unreferenced образов (в registry:2) docker exec registry \ /bin/sh -c "rm -rf /var/lib/registry/docker/registry/v2/repositories/_layers" # Перезапуск registry docker restart registry

#Garbage Collection

# Остановка registry docker stop registry # Запуск GC docker run --rm \ -v registry-data:/var/lib/registry \ registry:2 garbage-collect \ --delete-untagged \ /var/lib/registry/config.yml # Запуск registry docker start registry

#Best Practices

#1. Используйте конкретные теги

# ✅ Хорошо docker pull nginx:1.25.3 docker push myapp:v1.0.0 # ❌ Плохо docker pull nginx:latest docker push myapp:latest

#2. Именование тегов

# Семантическое версионирование docker push myapp:1.0.0 # MAJOR.MINOR.PATCH docker push myapp:1.0 # MAJOR.MINOR docker push myapp:1 # MAJOR # Git-based теги docker push myapp:git-abc123 docker push myapp:pr-123 docker push myapp:branch-feature # Временные теги docker push myapp:2024.01.15

#3. Не используйте latest в production

# ✅ Хорошо services: app: image: myapp:v1.0.0 # ❌ Плохо services: app: image: myapp:latest

#4. Подписывайте образы

# Включить Docker Content Trust export DOCKER_CONTENT_TRUST=1 # Push с подписью docker push myrepo/myapp:v1.0 # Pull проверяет подпись автоматически docker pull myrepo/myapp:v1.0

#5. Сканируйте образы перед push

# Trivy перед публикацией trivy image myapp:v1.0 # Только если нет критических уязвимостей trivy image --exit-code 1 --severity CRITICAL myapp:v1.0 && \ docker push myapp:v1.0

#6. Используйте multi-arch образы

# Сборка для нескольких архитектур docker buildx build \ --platform linux/amd64,linux/arm64 \ -t username/myapp:v1.0 \ --push \ . # Проверка манифеста docker manifest inspect username/myapp:v1.0

#7. Ограничивайте доступ

# Private репозиторий в Docker Hub # Через веб-интерфейс: Settings → Visibility → Private # ECR policy aws ecr set-repository-policy \ --repository-name myapp \ --policy-text file://policy.json

#8. Автоматизируйте публикацию в CI/CD

# GitHub Actions name: Build and Push on: push: tags: - 'v*' jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Login to Docker Hub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Build and push uses: docker/build-push-action@v4 with: push: true tags: | ${{ secrets.DOCKER_USERNAME }}/myapp:${{ github.ref_name }} ${{ secrets.DOCKER_USERNAME }}/myapp:latest

#Registry в Docker Compose

version: '3.8' services: registry: image: registry:2 ports: - "5000:5000" volumes: - registry-data:/var/lib/registry environment: - REGISTRY_STORAGE_DELETE_ENABLED=true app: image: localhost:5000/myapp:v1.0 depends_on: - registry

#Troubleshooting

#Ошибка: denied: requested access to the resource is denied

# Проверить авторизацию docker login # Проверить права доступа к репозиторию # Для ECR: aws ecr describe-repositories # Для Docker Hub: проверить visibility репозитория

#Ошибка: certificate signed by unknown authority

# Для self-signed сертификатов # Linux: /etc/docker/daemon.json { "insecure-registries": ["registry.example.com:5000"] } # Или скопировать сертификат sudo cp ca.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates sudo systemctl restart docker

#Registry занимает много места

# Проверить размер du -sh /var/lib/docker/volumes/registry-data/_data # Очистить старые образы docker exec registry \ /bin/sh -c "find /var/lib/registry -type f -mtime +30 -delete" # Запустить garbage collection

#Push зависает

# Проверить размер образа docker images myapp # Проверить сеть ping registry.example.com # Попробовать с меньшим числом слоёв docker build --squash -t myapp:v1.0 .

#Практика: полный цикл

#1. Сборка

docker build -t myapp:1.0.0 .

#2. Тестирование

docker run --rm myapp:1.0.0 npm test

#3. Сканирование

trivy image --exit-code 1 --severity CRITICAL myapp:1.0.0

#4. Тегирование

docker tag myapp:1.0.0 registry.example.com/team/myapp:1.0.0 docker tag myapp:1.0.0 registry.example.com/team/myapp:latest

#5. Push

docker push registry.example.com/team/myapp:1.0.0

#6. Развёртывание

# На production сервере docker pull registry.example.com/team/myapp:1.0.0 docker run -d --name myapp registry.example.com/team/myapp:1.0.0

Далее: Docker в production