← Назад к вопросам

Что такое Docker registry?

2.0 Middle🔥 181 комментариев
#DevOps и инфраструктура

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Docker Registry

Docker Registry — это хранилище (репозиторий) Docker образов. Это централизованное место, куда разработчики загружают (push) и откуда скачивают (pull) готовые контейнеры.

Что такое образ (Image) в контексте Registry?

Образ — это blueprint контейнера, файловая система + конфигурация.

# Скачиваем образ из Registry
docker pull ubuntu:22.04

# Образ состоит из слоёв (layers)
docker image inspect ubuntu:22.04

# Создаём контейнер из образа
docker run -it ubuntu:22.04 /bin/bash

Типы Docker Registry

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

Официальный реестр Docker Inc.

# По умолчанию Docker ищет образы на Docker Hub
docker pull python:3.11
# Полное имя: docker.io/library/python:3.11

# Публичные образы (разработчики могут получить)
docker pull nginx
docker pull postgres
docker pull redis

# Образы из личного аккаунта
docker pull myusername/my-app:latest

2. Приватные Registry

Организации создают свои приватные реестры.

# AWS ECR (Elastic Container Registry)
aws ecr get-login-password --region us-east-1 | \
  docker login --username AWS --password-stdin \
  123456789.dkr.ecr.us-east-1.amazonaws.com

docker pull 123456789.dkr.ecr.us-east-1.amazonaws.com/my-app:v1.0

# Google Container Registry
docker pull gcr.io/my-project/my-app:v1.0

# Azure Container Registry
docker pull myregistry.azurecr.io/my-app:v1.0

# GitLab Container Registry
docker pull registry.gitlab.com/group/project/image:latest

# GitHub Container Registry
docker pull ghcr.io/username/my-app:latest

# Самостоятельный Registry (на своём сервере)
docker pull localhost:5000/my-app:latest

Жизненный цикл образа

1. Создание (Build)

# Dockerfile
FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . .

EXPOSE 8000
CMD ["python", "app.py"]
# Создаём образ локально
docker build -t my-app:1.0 .

2. Загрузка (Push в Registry)

# Логинимся в Docker Hub
docker login
# Username: myusername
# Password: ***

# Теги образа: username/repo:tag
docker tag my-app:1.0 myusername/my-app:1.0
docker tag my-app:1.0 myusername/my-app:latest

# Загружаем в реестр
docker push myusername/my-app:1.0
docker push myusername/my-app:latest

3. Скачивание (Pull из Registry)

# Другие разработчики скачивают образ
docker pull myusername/my-app:1.0

# Docker автоматически:
# 1. Проверяет наличие локально
# 2. Если нет — скачивает со слоями
# 3. Сохраняет кэш для последующих использований

4. Удаление (Cleanup)

# Удалить образ локально
docker rmi myusername/my-app:1.0

# Удалить образ из Registry (через веб-интерфейс или API)
# Большинство реестров предоставляют веб-UI

Архитектура Registry

Client (docker pull / push)
    ↓
  Registry API (HTTPS)
    ↓
  Storage Backend (filesystem, S3, GCS)
    ↓
  Blob Storage (слои образов)

Пример: Развёртывание приватного Registry локально

# Запускаем Registry в контейнере
docker run -d \
  -p 5000:5000 \
  --name my-registry \
  registry:2

# Теперь можно использовать:
docker tag my-app:1.0 localhost:5000/my-app:1.0
docker push localhost:5000/my-app:1.0

# Другие машины (в локальной сети):
docker pull machine-ip:5000/my-app:1.0

Слои (Layers) в Registry

Образ состоит из слоёв, каждый слой — это отдельный файл.

FROM python:3.11       # Слой 1 (500 МБ) — базовый образ
RUN apt-get update     # Слой 2 (100 МБ) — системные пакеты
COPY . /app            # Слой 3 (50 МБ) — исходный код
RUN pip install -r requirements.txt  # Слой 4 (200 МБ) — зависимости
# Registry хранит только уникальные слои
# Если два образа имеют одинаковые базовые слои — они хранятся один раз
# Экономия места!

# Посмотреть слои
docker image history python:3.11

Теги и версионирование

# Теги — метки для образов
docker tag my-app:1.0 myusername/my-app:latest
docker tag my-app:1.0 myusername/my-app:stable
docker tag my-app:1.0 myusername/my-app:1.0-alpine

# push всех тегов
docker push myusername/my-app

# Semantic versioning
# v1.0.0 — основной релиз
# v1.0.1 — патч
# v1.1.0 — минор
# v2.0.0 — мажор

# Latest — всегда указывает на последний релиз

Безопасность в Registry

# Аутентификация
docker login registry.example.com
# ~/.docker/config.json содержит credentials (зашифрованы)

# HTTPS для защиты
# Registry должен использовать HTTPS в production

# Сканирование уязвимостей
# Docker Hub, ECR, GCR сканируют образы на уязвимости
docker scan myusername/my-app:1.0

# Подписание образов (Image Signing)
# Гарантирует аутентичность образа
docker trust signer add --key ~/.docker/trust.key myusername

Использование в CI/CD

# GitHub Actions
name: Build and Push
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: docker/setup-buildx-action@v1
      - name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
      - name: Build and push
        uses: docker/build-push-action@v2
        with:
          context: .
          push: true
          tags: |
            myusername/my-app:${{ github.sha }}
            myusername/my-app:latest

Разница между Registry и Repository

ТерминЗначение
RegistryСервис (Docker Hub, ECR, GCR) — хранилище образов
RepositoryСобрание образов с одним именем (myusername/my-app)
ImageКонкретный образ с тегом (myusername/my-app:1.0)
# Структура имени образа
myregistry.com / myusername / my-app : v1.0
   ↑                ↑          ↑       ↑
 Registry       Namespace   Repository Tag

Практические команды

# Информация об образе
docker image inspect myusername/my-app:1.0

# Размер образа
docker images --format "table {{.Repository}}\t{{.Size}}" | grep my-app

# Удалить неиспользуемые образы
docker image prune

# Сохранить образ в файл
docker save my-app:1.0 > my-app.tar

# Загрузить образ из файла
docker load < my-app.tar

Docker Registry — ключевая часть DevOps workflow. Позволяет команде эффективно распространять, версионировать и управлять контейнеризованными приложениями.