Redis — это быстрое хранилище данных в оперативной памяти, которое часто используют как кэш, брокер сообщений или базу данных. Запустить его в Docker можно за пару минут: достаточно одной команды и простой проверки.
В этой статье покажу, как запустить Redis на примере версии 7.2 в контейнере Docker, проверить его работу и выполнить базовые операции с контейнером.
Зачем запускать Redis в контейнере, а не как сервис на хосте
Установка Redis как системного сервиса (через apt, systemd и т.п.) — классический подход, но у контейнеров есть несколько практичных преимуществ.
1. Разные версии одновременно.
В одном контейнере может работать Redis 4.0, в другом — 7.2, а на хосте при этом не будет конфликтов пакетов и библиотек. Это особенно полезно, когда одно приложение требует старую версию, а другое — новую.
2. Чистота хоста.
Контейнер не оставляет после себя конфигов в /etc, данных в /var/lib и записей в systemd. Удалили контейнер — и от Redis не осталось следов. Хост-система остаётся чистой.
3. Быстрый старт и лёгкое удаление.
Одна команда docker run — и Redis работает. Одна команда docker rm -f — и его нет. Не нужно останавливать сервис, удалять пакеты и чистить зависимости.
4. Переносимость.
Один и тот же контейнер с Redis одинаково работает на ноутбуке разработчика, в CI и на продакшен-сервере. Не нужно беспокоиться о различиях в версиях ОС и настройках.
5. Гибкая конфигурация и изоляция.
Параметры можно передавать через переменные окружения, монтировать конфиг и данные. Каждый экземпляр Redis изолирован, можно ограничить потребление памяти и CPU.
6. Удобство для тестирования и CI.
В тестах можно поднять Redis в контейнере на несколько секунд, прогнать сценарии и удалить его. Это быстрее и надёжнее, чем настраивать сервис на CI-агенте.
7. Масштабирование и микросервисы.
Если у вас несколько сервисов, каждому можно дать свой Redis в отдельном контейнере. А с Docker Compose или Kubernetes — управлять ими централизованно.
Когда всё же лучше установить Redis как сервис?
Если Redis — единственное приложение на сервере, и вы хотите максимальную производительность без накладных расходов контейнеризации. Или если нужен тонкий контроль над системными ресурсами и интеграция с systemd. Но в большинстве случаев контейнер даёт больше гибкости и меньше проблем с сопровождением.
Что понадобится
- Установленный Docker.
- Свободный порт
6379на хосте. - По желанию —
redis-cli, установленный локально, для проверки подключения.
Запуск Redis в Docker
Запустите контейнер Redis в фоновом режиме с пробросом порта 6379 на хост:
|
1 |
docker run -d --name my-redis -p 6379:6379 redis:7.2 |
Разберём команду:
docker run— создаёт и запускает новый контейнер;-d— запускает контейнер в фоновом режиме;--name my-redis— задаёт имя контейнераmy-redis;-p 6379:6379— пробрасывает порт6379с хоста в контейнер;redis:7.2— указывает образ Redis версии 7.2.
Если образа redis:7.2 ещё нет локально, Docker автоматически скачает его из реестра.
Проверка, что контейнер работает
Убедитесь, что контейнер запущен:
|
1 |
docker ps | grep my-redis |
В выводе вы должны увидеть строку с именем my-redis и статусом Up. Это значит, что контейнер работает.
Если команда ничего не вывела, проверьте все контейнеры, включая остановленные:
|
1 |
docker ps -a |
Проверка подключения к Redis
Самый простой способ проверить Redis — отправить команду ping через redis-cli внутри контейнера:
|
1 |
docker exec -it my-redis redis-cli ping |
Если redis-cli установлен на хосте, можно проверить подключение напрямую:
|
1 |
redis-cli -h 127.0.0.1 -p 6379 ping |
В обоих случаях ожидаемый ответ:
|
1 |
PONG |
Если вы получили PONG, значит Redis запущен и отвечает на запросы.
Полезные команды для управления контейнером
Остановить Redis:
|
1 |
docker stop my-redis |
Запустить остановленный контейнер снова:
|
1 |
docker start my-redis |
Посмотреть логи:
|
1 |
docker logs my-redis |
Удалить контейнер:
|
1 |
docker rm -f my-redis |
Дополнительно: сохранение данных
По умолчанию данные Redis могут потеряться при удалении контейнера. Чтобы сохранить их между перезапусками, подключите том:
|
1 |
docker run -d --name my-redis -p 6379:6379 -v redis-data:/data redis:7.2 |
Здесь redis-data — именованный том Docker, который будет хранить данные Redis в каталоге /data внутри контейнера.
Если порт 6379 уже занят
Можно пробросить другой порт на хосте. Например, чтобы Redis был доступен на порту 6380:
|
1 |
docker run -d --name my-redis -p 6380:6379 redis:7.2 |
Тогда подключаться к нему нужно будет через порт 6380.