pimenov.ai

DockerHub — облачный реестр контейнерных образов

Обновлено

Актуальность: данные проверены 8 сентября 2026 года по документации Docker Hub, заметкам о выпусках (release notes), документации Docker Hardened Images и странице тарифов Docker. Тарифы, лимиты и доступность функций могут меняться, поэтому перед важным решением проверьте текущие лимиты и тарифы.

Docker Hub — облачный реестр контейнерных образов. В нём можно хранить собственные образы, распространять их внутри команды и скачивать готовые образы приложений и инфраструктурных сервисов.

📌
Для кого: разработчики, DevOps-инженеры и читатели, которым нужен путь от первого docker pull до публикации собственного образа и выбора подходящего реестра.

Оглавление

  1. Образы, контейнеры и репозитории
  2. Быстрый запуск готового образа
  3. Создание и публикация своего образа
  4. Выбор образов и тегов
  5. Публичные и приватные репозитории
  6. Полезные сценарии
  7. Автоматизация публикации
  8. Безопасность образов
  9. Тарифы и лимиты
  10. Альтернативные реестры
  11. Типичные ошибки
  12. Полезные команды

Образы, контейнеры и репозитории

Docker-образ — неизменяемый шаблон из слоёв файловой системы, метаданных и настроек запуска. В него обычно входят базовая система, зависимости и код приложения. Запущенный экземпляр образа называется контейнером.

Docker Hub хранит образы в репозиториях. Один репозиторий может содержать несколько вариантов образа, помеченных тегами: например, python:3.12, python:3.12-slim и python:3.12-alpine.

Если GitHub обычно хранит исходный код, Docker Hub хранит собранные контейнерные образы, готовые к скачиванию и запуску.

Быстрый запуск готового образа

1. Скачайте образ

docker pull nginx

2. Запустите контейнер

docker run -d --name web -p 8080:80 nginx

Здесь -d запускает контейнер в фоне, а -p 8080:80 связывает порт 8080 компьютера с портом 80 контейнера.

3. Проверьте результат

Откройте http://localhost:8080 или выполните:

curl http://localhost:8080

Успешный результат — HTML-ответ Nginx. Состояние контейнера можно проверить отдельно:

docker ps --filter name=web

Создание и публикация своего образа

1. Создайте Dockerfile

FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]

Не храните пароли, токены и API-ключи в Dockerfile или слоях образа.

2. Соберите образ

docker build -t yourname/my-app:1.0 .

3. Проверьте его локально

docker run --rm -p 5000:5000 yourname/my-app:1.0

Команда предполагает, что приложение внутри контейнера слушает порт 5000. Способ проверки зависит от приложения. Для HTTP-сервиса это может быть:

curl http://localhost:5000

4. Авторизуйтесь и опубликуйте образ

docker login
docker push yourname/my-app:1.0

Для автоматизации и командной работы используйте токен с минимально необходимыми правами вместо пароля учётной записи.

5. Проверьте скачивание

На другой машине или после удаления локальной копии выполните:

docker pull yourname/my-app:1.0
docker image inspect yourname/my-app:1.0

Успешный pull и вывод docker image inspect подтверждают, что образ доступен из реестра.

Выбор образов и тегов

При поиске образа смотрите на несколько признаков:

  • Docker Official Image — официальный образ из каталога Docker;
  • Verified Publisher — образ проверенного издателя;
  • документацию и указанного владельца;
  • дату обновления и поддержку нужной версии;
  • доступные архитектуры и digest (идентификатор содержимого);
  • историю исправлений и результаты анализа уязвимостей.

Количество скачиваний показывает популярность, но не гарантирует безопасность. Перед использованием стороннего образа проверьте его происхождение и содержимое.

Примеры образов

ОбразНазначениеПример запуска
nginxВеб-сервер и обратный прокси-серверdocker run -p 8080:80 nginx
postgres:16PostgreSQLdocker run -e POSTGRES_PASSWORD=change-me postgres:16
redisКэш и хранилище данныхdocker run -p 6379:6379 redis
python:3.12-slimСреда Pythondocker run -it python:3.12-slim python
node:20-alpineСреда Node.jsdocker run -it node:20-alpine node
alpineМинимальная Linux-средаdocker run -it alpine sh

Значение change-me в примере PostgreSQL — только условное значение для локального запуска. Не используйте его в рабочей среде.

⚠️
Фиксируйте версию: тег latest может начать указывать на другой образ. Для воспроизводимых сборок используйте конкретный тег, а для строгой фиксации — digest.
# Конкретный тег
docker pull python:3.12-slim

# Проверить digest скачанного образа
docker image inspect python:3.12-slim --format '{{json .RepoDigests}}'

Тег тоже можно переназначить. Digest однозначно указывает на конкретное содержимое образа.

Публичные и приватные репозитории

ПараметрПубличный репозиторийПриватный репозиторий
ВидимостьДоступен в поиске Docker HubНе показывается в публичном поиске
СкачиваниеДоступно пользователям с учётом лимитовТребуется разрешённый доступ
Типичный сценарийПроекты с открытым исходным кодом и публичные образыВнутренние и коммерческие приложения

На плане Personal разрешён один приватный репозиторий, а число публичных репозиториев не ограничено в таблице Docker Hub Usage. Для Pro, Team и Business документация указывает неограниченное количество публичных и приватных репозиториев с учётом правил добросовестного использования.

С 13 февраля 2026 года владельцы и редакторы организаций могут включить Disable public repositories и запретить создание новых публичных репозиториев в пространстве имён организации. Настройка не меняет видимость уже существующих репозиториев и недоступна для личного пространства имён.

Полезные сценарии

Публикация версии приложения для сервера

Задача: доставлять один и тот же собранный образ на тестовый и рабочий серверы.

  1. Создайте приватный репозиторий в Docker Hub и выдайте серверу минимально необходимые права.
  2. Соберите образ с версионным тегом.
  3. Проверьте его локально.
  4. Отправьте образ в приватный репозиторий.
  5. На сервере авторизуйтесь и выполните docker pull.
  6. Сверьте digest и запустите контейнер.

Наблюдаемый результат — сервер скачивает ожидаемый digest, а проверочная команда приложения возвращает успешный ответ. Сценарий требует безопасного хранения учётных данных реестра и контроля доступа к репозиторию.

Запуск набора сервисов через Docker Compose

Задача: поднять веб-сервер, базу данных и кэш одной командой.

Docker Compose описывает набор сервисов и запускает их как единое приложение.

services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80" # порт хоста: порт Nginx в контейнере

  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: change-me # условное значение только для локального примера

  cache:
    image: redis:alpine
docker compose up -d
docker compose ps

Compose скачает отсутствующие образы из настроенного реестра. Успешный результат — все сервисы имеют ожидаемое состояние в docker compose ps, а Nginx отвечает на http://localhost:8080.

Пароль в примере подходит только как условное значение для локального запуска. В рабочей среде передавайте секреты через предназначенный для этого механизм.

Автоматизация публикации

Docker Hub Automated Builds ранее использовалась для автоматической сборки образов после изменений исходного кода.

⚠️
Статус на 8 сентября 2026 года: Docker Hub Automated Builds объявлена устаревающей. Существующие учётные записи сохраняют доступ до 1 апреля 2027 года. Docker рекомендует миграцию на GitHub Actions или Bitbucket Pipelines.

Новый процесс публикации лучше строить в системе CI/CD (непрерывной интеграции и доставки) репозитория: собрать образ, выполнить проверки, авторизоваться в Docker Hub с секретом CI и отправить версионный тег. Инструкции по миграции доступны в Docker Hub release notes.

Безопасность образов

Перед использованием образа:

  • проверьте издателя и документацию;
  • выберите поддерживаемую версию;
  • изучите digest и состав образа;
  • не запускайте контейнер от root без необходимости;
  • регулярно пересобирайте образ с обновлённой базой;
  • анализируйте известные уязвимости и лицензии зависимостей.

При доступном в вашей установке Docker Scout проверяйте образ из командной строки:

docker scout quickview nginx
docker scout cves nginx

Доступный объём функций Scout зависит от подписки. Актуальное число репозиториев, подключённых к Scout, указано на странице тарифов Docker.

Docker Hardened Images

Docker Hardened Images (DHI) — минимальные образы, Helm-чарты и системные пакеты, поддерживаемые Docker. На 8 сентября 2026 года доступны уровни Community, Select и Enterprise.

Бесплатный Community-уровень включает каталог открытых образов под Apache 2.0, проверяемые ведомости компонентов (SBOM), доказуемое происхождение сборок по SLSA Build Level 3, криптографические подписи и полную видимость CVE без подавления результатов. CVE — идентификаторы известных уязвимостей. Distroless-варианты удаляют необязательные компоненты и могут сокращать поверхность атаки до 95%.

Select добавляет FIPS/STIG-варианты, SLA на исправление критических и высоких CVE в течение 7 дней и до пяти вариантов настройки. Enterprise добавляет неограниченные настройки, доступ к репозиторию Hardened System Packages и возможность подключить Extended Lifecycle Support.

Подробное сравнение опубликовано в документации DHI.

Тарифы и лимиты

Данные проверены 8 сентября 2026 года. Лимиты ниже приведены по документации Docker Hub Usage and Limits и действуют с учётом правил добросовестного использования.

ПланЦена за пользователяPull-лимитПриватные репозитории
Personal$0200 за 6 часов для авторизованного пользователяДо 1
Pro$11/мес или $9/мес при годовой оплатеНе ограничен, с учётом fair useНе ограничены
Team$16/мес или $15/мес при годовой оплатеНе ограничен, с учётом fair useНе ограничены
Business$24/месНе ограничен, с учётом fair useНе ограничены
Без авторизации100 за 6 часов на IPv4-адрес или IPv6 /64
⚖️
Fair use (добросовестное использование): Docker оставляет за собой право ограничивать чрезмерную передачу данных, частоту скачиваний или объём хранения либо применять дополнительные сборы. Отдельный лимит злоупотреблений (abuse rate limit) действует для всех пользователей и может меняться в зависимости от нагрузки.

Если CI регулярно скачивает образы, авторизуйтесь и используйте кэш. Анонимные запросы делят лимит по внешнему IP-адресу или IPv6 /64, поэтому несколько исполнителей CI могут быстро исчерпать общую квоту.

Альтернативные реестры

РеестрПрактическая особенностьКогда рассматривать
GitHub Container RegistryИнтеграция с GitHub и GitHub ActionsИсходный код и CI/CD находятся на GitHub
Google Artifact RegistryИнтеграция с Google CloudИнфраструктура работает в GCP
Amazon ECRИнтеграция с AWSКонтейнеры запускаются в AWS
GitLab Container RegistryВстроен в GitLabПроект использует GitLab CI/CD
QuayИнтеграция с экосистемой Red HatEnterprise-среды и OpenShift
Self-hosted registryСобственная инфраструктура и контрольНужны локальное размещение или особые правила доступа

Для локального теста стандартного реестра:

docker run -d -p 5000:5000 --restart always --name registry registry:3
docker tag my-app:latest localhost:5000/my-app:1.0
docker push localhost:5000/my-app:1.0

Такой запуск не является готовой производственной конфигурацией: отдельно потребуются TLS-шифрование, аутентификация, резервное копирование и мониторинг.

Типичные ошибки

  • использование latest там, где нужна воспроизводимость;
  • публикация секретов в Dockerfile, слоях или истории сборки;
  • запуск процесса от root без необходимости;
  • отсутствие .dockerignore;
  • чрезмерно крупные образы без проверки состава;
  • доверие к популярности образа вместо проверки издателя и уязвимостей;
  • анонимные скачивания в CI/CD;
  • публикация только одного изменяемого тега без версионного тега или digest;
  • создание нового процесса на Docker Hub Automated Builds перед прекращением сервиса.

Полезные команды

# Образы
docker images
docker pull nginx:alpine
docker inspect nginx:alpine
docker history nginx:alpine
docker image prune

# Контейнеры
docker ps
docker ps -a
docker logs container_name
docker exec -it container_name sh
docker stop container_name
docker rm container_name

# Реестр
docker login
docker tag my-app:1.0 yourname/my-app:1.0
docker push yourname/my-app:1.0
⚠️
Перед очисткой: docker image prune -a удаляет все образы, которые не используются ни одним контейнером. Сначала выполните docker image ls и убедитесь, что локальные копии вам не нужны.

Официальные ссылки

Следующий шаг

Если после публикации образов вам нужен безопасный запуск AI-агентов в изолированной среде, продолжите с OpenSandbox — sandbox-платформа для безопасного запуска AI-агентов.

Связанные материалы

Если Docker Hub входит в командный процесс или рабочую инфраструктуру, заранее определите правила доступа, тегирования и проверки уязвимостей. Такие правила полезно обсудить до запуска CI/CD.

Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov