Запуск Redis в Docker
Быстрые ссылки
Getting Started
Data Storage
Configuring Your Server
Managing Redis Security
Using Your Redis Installation
Summary

Введение
Redis — это in-memory key-value хранилище, которое эффективно сохраняет и обрабатывает абстрактные структуры данных (строки, списки, множества, хеши, отсортированные множества и т.д.). Открытое программное обеспечение часто используют для кэша, брокера сообщений и быстрой базы данных.
Docker — инструмент для упаковки приложений в контейнеры. Он изолирует компоненты приложения с собственным файловым пространством, библиотеками и конфигурациями.
В этом руководстве мы развернём Redis с помощью официального образа Docker Hub. В сравнении с установкой «на голый металл», Docker упрощает запуск и не засоряет хост пакетом системных зависимостей. Убедитесь, что Docker уже установлен и работает на вашем хосте.
Основная идея (в одну строку): контейнеризованный Redis = быстрый старт + явное управление конфигом и данными.
Getting Started
Официальный образ Redis включает сервер и официальный клиент (redis-cli). По умолчанию образ настроен так, чтобы при старте контейнера сервер запускался с рабочими значениями конфигурации.
В образе есть теги для версий (например, 5.0, 6.0, 7.0) и базовых ОС (Alpine, Debian). Просмотрите список тегов на Docker Hub и выберите тот, который подходит по версии и образу основы.
Самый простой запуск выглядит так:
docker run --name redis -d -p 6379:6379 redis:6.0Эта команда создаёт контейнер с именем redis, запускает Redis 6.0 в фоне (-d) и пробрасывает порт 6379 на хост. Сервер будет работать до тех пор, пока вы не остановите контейнер командой docker stop redis.
Важно: Redis по умолчанию слушает порт 6379. Проброс порта на хост (-p) делает Redis доступным по адресу localhost:6379. Если ваш хост открыт в интернет, это небезопасно — любой, кто попадёт на ваш хост, может получить доступ к данным.
Data Storage
Проблема: Docker-контейнеры эфемерны — при удалении контейнера всё внутри него теряется. Решение — монтировать том или bind-mount для каталога /data, в который Redis записывает состояние.
Redis поддерживает несколько механизмов персистентности:
- RDB (snapshots) — периодические снимки базы на диск. Быстро, но возможна потеря последних изменений.
- AOF (Append Only File) — журнал команд, даёт более тонкую долговечность, но занимает больше места и может быть медленнее.
- Комбинированный режим — одновременно RDB и AOF для баланса между скоростью восстановления и безопасностью.
Простой пример с использованием Docker volume и RDB-снимков:
docker run --name redis -d \
-v redis-data:/data \
redis:6.0 --save 60 1Пояснения:
-v redis-data:/dataсоздаёт Docker volumeredis-dataи монтирует его в контейнер по пути /data.- Параметр
--save 60 1передаётся Redis: он сохраняет снимок каждые 60 секунд, если произошла хотя бы одна запись с момента предыдущего снимка.
Удаление и управление томами:
- Чтобы удалить том:
docker volume rm redis-data. - Чтобы просмотреть списки:
docker volume ls.
Bind-mount против именованных томов:
- Именованные тома удобны для бэкапов и управления жизненным циклом через Docker.
- Bind-mount (например,
-v /srv/redis/data:/data) даёт прозрачный путь к файлам на хосте и может быть полезен для бэкапов или инспекции.
Критерии приёмки (для хранения данных):
- Данные сохраняются на томе, а не внутри контейнера.
- После перезапуска контейнера данные доступны.
- Вы настроили RDB, AOF или оба, в зависимости от требований к долговечности.
Configuring Your Server
Самый быстрый способ добавить параметры конфигурации — передать аргументы CLI в docker run (как в примере с --save). Любой текст после имени образа в docker run передаётся в команду, которая запускается внутри контейнера (в случае образа Redis — это redis-server).
Для более устойчивой настройки используйте файл конфигурации (redis.conf). Конвенциональный путь в образе — /usr/local/etc/redis/redis.conf.
Пример с bind-mount конфигурации:
docker run --name redis -d \
-v redis-data:/data \
-v ./redis-conf:/usr/local/etc/redis \
redis:6.0 /usr/local/etc/redis.confШаги:
- Создайте каталог
redis-confв рабочей папке. - Скопируйте туда
redis.confили создайте собственный. - Запустите контейнер, указав путь к файлу конфигурации.
Советы по конфигу:
- Измените
appendonlyиappendfsyncдля настройки AOF. - Настройте
maxmemoryи стратегию выброса (eviction policy) для кэшей. - Логи и директории указывайте на тома, чтобы иметь доступ к ним с хоста.
Managing Redis Security
По умолчанию официальные образы Redis запускают сервер в непредохранённом режиме (unprotected). Это удобно для локальной разработки и взаимодействия между контейнерами, но опасно для продакшен-сред.
Основные способы защитить Redis:
- Защита на уровне сети (не пробрасывать порт 6379 на публичный интерфейс).
- Включить
protected-mode yesвredis.conf— Redis будет отвечать только на запросы с loopback интерфейсов. - Добавить пароль:
requirepass <сложный-пароль>вredis.conf. - Использовать ACL (Redis 6+) для создания нескольких пользователей с разными правами.
- Слой сети Docker: поместите Redis в отдельную внутреннюю сеть с ограниченными участниками.
- Ограничить доступ через firewall (iptables, ufw) или security groups в облаке.
Пример: минимально безопасная конфигурация для продакшена
- Не пробрасывайте 6379 на внешние интерфейсы хоста.
- Используйте Docker network, чтобы только нужные сервисы имели доступ.
- Установите
requirepassили настройте ACL. - При возможности — используйте TLS (начиная с Redis 6 это возможно при сборке с поддержкой TLS или проксированием через stunnel/nginx).
Примечание: protected-mode yes в Docker-контейнере обычно ограничит доступ только внутри контейнера — это может затруднить взаимодействие с другими контейнерами. Вместо этого ограничьте сеть Docker и используйте аутентификацию.
Using Your Redis Installation
Доступ с хоста:
- Узнайте IP контейнера:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis(заменитеredisна имя контейнера). - Или, если вы пробросили порт, подключайтесь к
localhost:6379.
Доступ из другого контейнера:
Создайте сеть и подключите контейнеры:
docker network create redis
docker run --name redis --network redis -d redis:6.0
docker run --name api --network redis -d my-api:latestВ данном случае контейнер api может обратиться к Redis по имени хоста redis:6379.

Подключение к контейнеру и запуск redis-cli:
docker exec -it redis-container redis-cliЭто откроет интерактивный сеанс redis-cli внутри контейнера.
Пример простых команд:
SET hello "world"
GET hello
LPUSH mylist "a"
LRANGE mylist 0 -1Альтернативный способ: docker-compose
Для повторяемости и простоты управления сервисами используйте docker-compose. Пример файла docker-compose.yml:
version: '3.8'
services:
redis:
image: redis:6.0
container_name: redis
volumes:
- redis-data:/data
- ./redis-conf/redis.conf:/usr/local/etc/redis/redis.conf
command: ["/usr/local/etc/redis/redis.conf"]
networks:
- internal
volumes:
redis-data:
networks:
internal:
driver: bridgeПреимущества docker-compose:
- Один файл для конфигурации и запуска.
- Лёгкое масштабирование и интеграция с CI/CD.
- Понятная версияция конфигов.
Production checklist — пошаговый план
- Выберите образ и версию Redis, поддерживаемую приложением.
- Подготовьте
redis.confс параметрами persistence, memory и security. - Настройте Docker volume или bind-mount для /data и бэкапов.
- Разверните в отдельной Docker-сети или внутри виртуальной приватной сети.
- Настройте аутентификацию (ACL или requirepass) и/или TLS.
- Настройте мониторинг (Prometheus exporter, Redis INFO, alerting).
- Настройте регулярные бэкапы RDB/AOF и тест восстановления.
- Пропишите политики рестарта, healthchecks и ограничение ресурсов (CPU, memory).
Ролевые чек-листы
Для разработчика:
- Убедиться, что тесты работают с реалистичным порядком команд.
- Использовать временные базы/префиксы ключей для изоляции тестов.
- Не хранить секреты в открытом виде.
Для оператора:
- Установить мониторинг и алёрты по задержкам и памяти.
- Проверить конфигурацию персистентности и бэкапы.
- Настроить ограничения ресурсов контейнера.
Для инженера по безопасности:
- Убедиться, что порт 6379 не доступен извне без защиты.
- Настроить ACL/требование пароля и при необходимости TLS.
- Провести аудит доступа к Docker-сети и хосту.
Модели зрелости использования Redis в Docker
- Разработка: контейнеры на локальной машине, необязательно с бэкапами.
- Стадия: Docker Compose, тома, базовая аутентификация.
- Продакшен: orchestration (Kubernetes/Docker Swarm), TLS, ACL, мониторинг, бэкапы, SLA.
Когда этот подход не подходит (контрпримеры)
- Когда требуется много RAM и низкая латентность при масштабировании на несколько хостов без кластеризации — предпочтительнее управляемые сервисы Redis или профильная infra.
- Если вам нужна встроенная репликация с автоматическим failover на уровне кластера — настройка Redis Cluster или использование провайдера как услуга будет предпочтительнее.
- В средах с жёсткими требованиями к безопасности/сертификации может потребоваться выделенный физический хост.
Резервное копирование и восстановление
- Для RDB: копируйте файл dump.rdb из тома; для восстановления поместите его в /data и перезапустите контейнер.
- Для AOF: храните файл appendonly.aof и применяйте его при запуске.
- Регулярно тестируйте процесс восстановления на стенде.
Security hardening — практические рекомендации
- Не пробрасывайте порт 6379 на внешний интерфейс.
- Используйте сеть Docker без подключения к внешнему миру, если возможно.
- Включите requirepass или настройте ACL.
- Используйте TLS для шифрования транспорта в производстве.
- Обновляйте образ Redis и базовую систему, проверяйте CVE.
- Минимизируйте привилегии файловой системы и не запускайте контейнер с лишними правами.
Тесты и приёмка
Критерии приёмки для простого развёртывания:
- Контейнер стартует и отвечает на
PING. - Данные, записанные в Redis, сохраняются после перезапуска контейнера (при включённой персистентности и смонтированном томе).
- Подключение из приложения успешно с заданными настройками сети и аутентификацией.
Часто задаваемые вопросы
Q: Нужно ли пробрасывать порт 6379 на хост для доступа из приложения?
A: Нет, если приложение и Redis находятся в одной Docker-сети. Проброс порта нужен только для доступа с хоста или извне.
Q: Какой механизм персистентности выбрать — RDB или AOF?
A: Для кэша обычно достаточно RDB; для критичных данных и минимальной потери данных — AOF или комбинация RDB+AOF.
Q: Как обеспечить шифрование трафика к Redis?
A: Нативный TLS поддержан в Redis 6+, но часто используют прокси (stunnel, nginx, haproxy) или TLS-сборки образа.
Итог
Docker упрощает развёртывание Redis: официальный образ даёт быстрый старт, а тома сохраняют данные между перезапусками. Однако обращайте внимание на персистентность и безопасность: смонтируйте данные на внешние тома, настройте требование пароля или ACL, и не пробрасывайте порт 6379 на публичные интерфейсы без защиты.
Ключевые рекомендации:
- Используйте Docker volume для /data.
- Храните и версионируйте redis.conf, монтируя его в контейнер.
- Настройте аутентификацию и ограничьте доступ по сети.
- В production используйте мониторинг, бэкапы и тесты восстановления.
Дополнительные ресурсы и шаги: просмотрите список тегов образа на Docker Hub, посмотрите документацию Redis по AOF/RDB/ACL и протестируйте режимы на стенде перед вводом в эксплуатацию.
Сводка
- Быстрый запуск:
docker run --name redis -d -p 6379:6379 redis:6.0. - Персистентность: монтируйте
-v redis-data:/dataи выберите RDB/AOF. - Безопасность: не открывайте порт 6379 публично; включите
requirepassили ACL.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента