Комментарии (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. Позволяет команде эффективно распространять, версионировать и управлять контейнеризованными приложениями.