DockerHub — облачный реестр контейнерных образов
Обновлено
Не удалось запустить аудио. Нажмите кнопку воспроизведения в плеере.
Docker Hub — облачный реестр контейнерных образов. В нём можно хранить собственные образы, распространять их внутри команды и скачивать готовые образы приложений и инфраструктурных сервисов.
docker pull до публикации собственного образа и выбора подходящего реестра.Оглавление
- Образы, контейнеры и репозитории
- Быстрый запуск готового образа
- Создание и публикация своего образа
- Выбор образов и тегов
- Публичные и приватные репозитории
- Полезные сценарии
- Автоматизация публикации
- Безопасность образов
- Тарифы и лимиты
- Альтернативные реестры
- Типичные ошибки
- Полезные команды
Образы, контейнеры и репозитории
Docker-образ — неизменяемый шаблон из слоёв файловой системы, метаданных и настроек запуска. В него обычно входят базовая система, зависимости и код приложения. Запущенный экземпляр образа называется контейнером.
Docker Hub хранит образы в репозиториях. Один репозиторий может содержать несколько вариантов образа, помеченных тегами: например, python:3.12, python:3.12-slim и python:3.12-alpine.
Если GitHub обычно хранит исходный код, Docker Hub хранит собранные контейнерные образы, готовые к скачиванию и запуску.
Быстрый запуск готового образа
1. Скачайте образ
docker pull nginx2. Запустите контейнер
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:50004. Авторизуйтесь и опубликуйте образ
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:16 | PostgreSQL | docker run -e POSTGRES_PASSWORD=change-me postgres:16 |
redis | Кэш и хранилище данных | docker run -p 6379:6379 redis |
python:3.12-slim | Среда Python | docker run -it python:3.12-slim python |
node:20-alpine | Среда Node.js | docker 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 и запретить создание новых публичных репозиториев в пространстве имён организации. Настройка не меняет видимость уже существующих репозиториев и недоступна для личного пространства имён.
Полезные сценарии
Публикация версии приложения для сервера
Задача: доставлять один и тот же собранный образ на тестовый и рабочий серверы.
- Создайте приватный репозиторий в Docker Hub и выдайте серверу минимально необходимые права.
- Соберите образ с версионным тегом.
- Проверьте его локально.
- Отправьте образ в приватный репозиторий.
- На сервере авторизуйтесь и выполните
docker pull. - Сверьте 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:alpinedocker compose up -d
docker compose psCompose скачает отсутствующие образы из настроенного реестра. Успешный результат — все сервисы имеют ожидаемое состояние в docker compose ps, а Nginx отвечает на http://localhost:8080.
Пароль в примере подходит только как условное значение для локального запуска. В рабочей среде передавайте секреты через предназначенный для этого механизм.
Автоматизация публикации
Docker Hub Automated Builds ранее использовалась для автоматической сборки образов после изменений исходного кода.
Новый процесс публикации лучше строить в системе 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 | $0 | 200 за 6 часов для авторизованного пользователя | До 1 |
| Pro | $11/мес или $9/мес при годовой оплате | Не ограничен, с учётом fair use | Не ограничены |
| Team | $16/мес или $15/мес при годовой оплате | Не ограничен, с учётом fair use | Не ограничены |
| Business | $24/мес | Не ограничен, с учётом fair use | Не ограничены |
| Без авторизации | — | 100 за 6 часов на IPv4-адрес или IPv6 /64 | — |
Если 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 Hat | Enterprise-среды и 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.0docker image prune -a удаляет все образы, которые не используются ни одним контейнером. Сначала выполните docker image ls и убедитесь, что локальные копии вам не нужны.Официальные ссылки
- Docker Hub
- Документация Docker
- Docker Hub Usage and Limits
- Docker Hub Release Notes
- Настройки Docker Hub
- Docker Hardened Images
- Тарифы Docker
- Docker Scout
Следующий шаг
Если после публикации образов вам нужен безопасный запуск AI-агентов в изолированной среде, продолжите с OpenSandbox — sandbox-платформа для безопасного запуска AI-агентов.
Связанные материалы
- Статья: Как два ИИ-агента и один человек собрали этот сайт за ночь
- Блог: Лучший способ освоить агентный кодинг — заставить ИИ научить вас
- База знаний: OpenAI Codex — агент для программирования
Если Docker Hub входит в командный процесс или рабочую инфраструктуру, заранее определите правила доступа, тегирования и проверки уязвимостей. Такие правила полезно обсудить до запуска CI/CD.
Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov