DockerHub — облачный реестр (registry) контейнерных образов Docker. Проще говоря, это «магазин приложений», только не для программ на телефон, а для готовых серверных окружений. Скачал образ — запустил — работает.
docker pull до автоматических сборок и выбора альтернативных registry.Что такое Docker-образ
Docker-образ — это «слепок» готового окружения: операционная система + нужное ПО + настройки + ваш код. Всё упаковано в один файл, который можно запустить на любом компьютере с Docker. Запущенный образ называется контейнером.
DockerHub решает главную боль разработки — «у меня на компьютере работает, а на сервере нет». Образ одинаково работает везде, где стоит Docker.
Для чего нужен DockerHub
- Хранение образов. Собрали свой образ — загрузили на DockerHub, чтобы использовать с любого сервера
- Распространение. Делитесь образами с командой или со всем миром. Публичные образы доступны бесплатно
- Готовые образы. Тысячи официальных образов: PostgreSQL, Redis, Node.js, Python, Nginx. Не нужно ничего настраивать — скачиваете и запускаете
- Версионирование. Каждый образ имеет теги (версии), например
python:3.12илиnode:20-alpine
Аналогия
Если GitHub — хранилище исходного кода, то DockerHub — хранилище готовых к запуску приложений. Не надо компилировать, устанавливать зависимости, настраивать окружение.
Как это работает на практике
1. Скачать готовый образ
docker pull nginxОдна команда — и у вас на машине готовый веб-сервер.
2. Запустить контейнер
docker run -d -p 8080:80 nginx
# -d = в фоновом режиме
# -p 8080:80 = пробросить порт 80 контейнера на порт 8080 компьютераОткройте http://localhost:8080 — Nginx работает.
3. Загрузить свой образ
# Регистрируетесь на hub.docker.com
docker login
# Собираете образ
docker build -t ваш_логин/имя_образа:1.0 .
# Пушите на DockerHub
docker push ваш_логин/имя_образа:1.04. На другом сервере
docker pull ваш_логин/имя_образа:1.0
docker run -p 5000:5000 ваш_логин/имя_образа:1.0Поиск и выбор готовых образов
Как искать
- Заходите на hub.docker.com
- Или прямо из терминала:
docker search nginx
На что смотреть
- Official Image — официальный образ, поддерживается создателями ПО
- Verified Publisher — проверенный издатель
- Docker Hardened Images (новинка) — безопасные минимальные образы от Docker с enterprise-фичами (сканирование, патчи, SBOM)
- Количество скачиваний (pulls) — чем больше, тем популярнее
- Дата последнего обновления — свежие образы безопаснее
Популярные образы для старта
| Образ | Назначение | Пример |
nginx | Веб-сервер и reverse proxy | docker run -p 80:80 nginx |
postgres:16 | База данных PostgreSQL | docker run -e POSTGRES_PASSWORD=secret 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 (~5 MB) | docker run -it alpine sh |
Теги и версии
Каждый образ имеет теги — это версии или варианты.
Примеры:
python:3.12— Python версии 3.12python:3.12-slim— облегчённая версия (меньше размер)python:3.12-alpine— на базе Alpine Linux (ещё меньше)python:latest— последняя версия
latest может внезапно измениться и сломать приложение.# ❌ Плохо (версия может измениться)
docker pull python:latest
# ✅ Хорошо (версия зафиксирована)
docker pull python:3.12-slimСоздание и загрузка своего образа
Шаг 1. Создайте Dockerfile
FROM python:3.12-slim
WORKDIR /app
COPY . /app
RUN pip install -r requirements.txt
CMD ["python", "app.py"]Шаг 2. Соберите образ
docker build -t johnsmith/my-app:1.0 .Шаг 3. Проверьте локально
docker run -p 5000:5000 johnsmith/my-app:1.0Шаг 4. Загрузите на DockerHub
docker push johnsmith/my-app:1.0Теперь образ доступен с любого компьютера через docker pull johnsmith/my-app:1.0.
Публичные vs приватные репозитории
| Параметр | Публичные | Приватные |
| Видимость | Все в поиске | Только вы и ваша команда |
| Скачивание | Кто угодно | Нужна авторизация |
| Количество (Personal) | Без ограничений | 1 бесплатно |
| Количество (Pro+) | Без ограничений | Без ограничений |
| Подходит для | Open-source проекты | Коммерческие и внутренние проекты |
Docker Compose и DockerHub
Docker Compose — инструмент для запуска нескольких контейнеров одной командой.
services:
web:
image: nginx:alpine
ports:
- "80:80"
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: secret
cache:
image: redis:alpinedocker compose up -dВсе образы автоматически скачаются с DockerHub, если их нет локально.
Автоматические сборки
Можно связать DockerHub с GitHub, чтобы при каждом пуше автоматически собирался новый образ:
- Создаёте репозиторий на GitHub с Dockerfile
- В DockerHub: Create → Create Automated Build
- Связываете с GitHub-репозиторием
- При каждом пуше автоматически собирается и публикуется новый образ
Зачем:
- Не нужно собирать и пушить образы вручную
- Прозрачность — все видят исходники
- Автоматизация CI/CD
Безопасность образов
Что проверять перед использованием
- ✅ Официальный образ или Verified Publisher
- ✅ Много скачиваний (популярный = проверенный)
- ✅ Недавно обновлялся
- ✅ Есть документация
- ⚠️ Избегайте образов от неизвестных авторов с малым количеством скачиваний
Сканирование на уязвимости
# Docker Scout — встроенный инструмент анализа уязвимостей
docker scout cves nginx
# Быстрый обзор
docker scout quickview nginxdocker scan. Он анализирует образы на уязвимости, проверяет лицензии и рекомендует обновления базовых образов. Входит во все платные планы.Тарифы и лимиты
| План | Цена | Pull-лимит | Приватные репозитории | Что включено |
| Personal (бесплатно) | $0 | 200 за 6 часов | 1 | Docker Desktop, Hub, Scout (базовый) |
| Pro | $9/мес | Безлимитно | Безлимитно | • Build Cloud, Testcontainers Cloud, Scout (полный) |
| Team | $15/мес на пользователя | Безлимитно | Безлимитно | • командный доступ, управление правами |
| Business | Индивидуально | Безлимитно | Безлимитно | • SSO, SCIM, аудит, SLA, поддержка |
| Без авторизации | — | 100 за 6 часов | — | Только pull публичных образов |
Альтернативные registry
DockerHub — не единственный реестр образов:
| Registry | Особенность | Когда использовать |
| GitHub Container Registry (ghcr.io) | Нативная интеграция с GitHub Actions | Проекты на GitHub, CI/CD через Actions |
| Google Artifact Registry (gcr.io) | Интеграция с Google Cloud | Проекты в GCP |
| Amazon ECR | Интеграция с AWS | Проекты в AWS |
| GitLab Container Registry | Встроен в GitLab CI/CD | Проекты в GitLab |
| Quay.io (Red Hat) | Расширенное сканирование безопасности | Enterprise, OpenShift |
| Self-hosted registry | Полный контроль, без лимитов | Приватные образы, когда важна независимость |
# Пример: self-hosted registry за 15 минут
docker run -d -p 5000:5000 --restart always --name registry registry:3
# Использование
docker tag my-app localhost:5000/my-app
docker push localhost:5000/my-appDockerHub остаётся самым популярным и простым для старта — особенно для публичных образов и open-source.
Типичные ошибки новичков
- ❌
latestв продакшене — версия может измениться и сломать приложение. Всегда указывайте конкретную версию - ❌ Огромные образы (несколько GB) — используйте
-alpineили-slimварианты - ❌ Секреты в образе — не храните API-ключи и пароли в Dockerfile. Используйте environment variables или Docker secrets
- ❌ Запуск от root внутри контейнера — создавайте непривилегированного пользователя в Dockerfile
- ❌ Нет
.dockerignore— создавайте.dockerignore(как.gitignore), чтобы не копировать лишние файлы в образ - ❌ Игнорирование уязвимостей — регулярно запускайте
docker scout cvesдля проверки образов - ❌ Анонимные pulls в CI/CD — лимит всего 100 за 6 часов. Всегда авторизуйтесь через
docker login
Полезные команды
Образы
# Список всех образов
docker images
# Скачать образ
docker pull nginx:alpine
# Удалить образ
docker rmi nginx
# Удалить все неиспользуемые образы
docker image prune -a
# Информация об образе
docker inspect nginx
# История слоёв
docker history nginxКонтейнеры
# Список запущенных контейнеров
docker ps
# Все контейнеры (включая остановленные)
docker ps -a
# Остановить контейнер
docker stop container_name
# Удалить контейнер
docker rm container_name
# Логи контейнера
docker logs container_name
# Зайти внутрь контейнера
docker exec -it container_name shБыстрый старт за 5 минут
- Установите Docker Desktop
- Зарегистрируйтесь на hub.docker.com
- Запустите:
docker run -d -p 8080:80 nginx- Откройте http://localhost:8080 — видите Nginx
- Поздравляю, вы запустили свой первый контейнер! 🎉
Ссылки
| Ресурс | Ссылка |
| Docker Hub | hub.docker.com |
| Документация Docker | docs.docker.com |
| Docker Hub Release Notes | docs.docker.com/docker-hub/release-notes |
| Docker Scout | docs.docker.com/scout |
| Docker Hub Usage & Limits | docs.docker.com/docker-hub/usage |
| Тарифы Docker | docker.com/pricing |