sadrix logoSadriX
Минцифры готовит обязательную регистрацию IMEI смартфонов, купленных за границей
Гайды

Как поднять Redis в Docker и подключиться из приложения: пошаговый гайд

Полное руководство по запуску Redis в контейнере с подключением из кода

09 463 просмотров4 мин
0
Поделиться:TelegramVK

Введение

Redis — это высокопроизводительное хранилище данных в оперативной памяти, часто используемое как кеш, брокер сообщений и база для сессий. Docker упрощает развёртывание Redis: вы получаете изолированный, легко переносимый контейнер, который можно запустить одной командой. В этом руководстве мы разберём, как поднять Redis в Docker, настроить его для разработки и продакшена, а затем подключиться к нему из приложений на Python, Node.js и других языках. Вы также узнаете о типичных ошибках и способах их решения.

Требования

  • Установленный Docker (версия 20.10 или новее). Проверить: docker --version.

  • Docker Compose (опционально, но рекомендуется). Проверить: docker compose version.

  • Базовые знания командной строки.

  • Клиент Redis для проверки подключения: redis-cli (можно использовать внутри контейнера).

  • Порты 6379 (стандартный порт Redis) должны быть свободны.

Шаг 1: Запуск Redis в Docker одной командой

Самый простой способ — выполнить:

docker run --name my-redis -p 6379:6379 -d redis:latest

Разберём параметры:

  • --name my-redis — имя контейнера для удобства.

  • -p 6379:6379 — проброс порта: первый порт на хосте, второй внутри контейнера.

  • -d — запуск в фоновом режиме.

  • redis:latest — официальный образ Redis.

После запуска проверьте, что контейнер работает:

docker ps

Вы должны увидеть контейнер my-redis в статусе Up.

Шаг 2: Проверка подключения через redis-cli

Подключитесь к Redis внутри контейнера:

docker exec -it my-redis redis-cli

Выполните команду ping. Если ответ PONG, Redis работает.

127.0.0.1:6379> ping
PONG

Для выхода введите exit.

Шаг 3: Настройка Redis с постоянным хранилищем (volume)

По умолчанию данные Redis хранятся внутри контейнера и исчезнут при его удалении. Чтобы сохранить данные, подключите том (volume):

docker run --name my-redis -p 6379:6379 -v redis-data:/data -d redis:latest redis-server --appendonly yes

Здесь:

  • -v redis-data:/data — создаёт именованный том redis-data и монтирует его в /data внутри контейнера.

  • redis-server --appendonly yes — включает режим AOF (Append Only File) для持久ного хранения.

Теперь данные сохранятся между перезапусками контейнера.

Шаг 4: Использование Docker Compose для удобного управления

Создайте файл docker-compose.yml:

version: '3.8'
services:
  redis:
    image: redis:latest
    container_name: my-redis
    ports:
      - "6379:6379"
    volumes:
      - redis-data:/data
    command: redis-server --appendonly yes
    restart: unless-stopped

volumes:
  redis-data:

Запустите:

docker compose up -d

Остановить: docker compose down. Данные сохранятся в томе redis-data.

Шаг 5: Настройка пароля и конфигурации Redis

Для безопасности в продакшене установите пароль. Создайте файл redis.conf:

requirepass yourStrongPassword
appendonly yes

Запустите с монтированием конфига:

docker run --name my-redis -p 6379:6379 -v $(pwd)/redis.conf:/usr/local/etc/redis/redis.conf -v redis-data:/data -d redis:latest redis-server /usr/local/etc/redis/redis.conf

Теперь для подключения потребуется пароль.

Шаг 6: Подключение из Python

Установите библиотеку:

pip install redis

Пример кода:

import redis

r = redis.Redis(host='localhost', port=6379, password='yourStrongPassword', decode_responses=True)
r.set('key', 'value')
print(r.get('key'))  # value

Если Redis без пароля, уберите параметр password.

Шаг 7: Подключение из Node.js

Установите пакет:

npm install redis

Пример:

const redis = require('redis');
const client = redis.createClient({
  url: 'redis://:yourStrongPassword@localhost:6379'
});

client.on('error', (err) => console.error('Redis error:', err));

await client.connect();
await client.set('key', 'value');
const value = await client.get('key');
console.log(value); // value

Шаг 8: Подключение из других языков и фреймворков

  • Java (Spring Boot): добавьте зависимость spring-boot-starter-data-redis, настройте spring.redis.host=localhost, spring.redis.port=6379, spring.redis.password=....

  • PHP (Laravel): используйте пакет predis/predis или расширение phpredis, настройте в .env: REDIS_HOST=localhost, REDIS_PASSWORD=....

  • Go: библиотека github.com/go-redis/redis/v8, подключение через redis.NewClient(&redis.Options{Addr: "localhost:6379", Password: "..."}).

Шаг 9: Подключение из другого контейнера Docker

Если ваше приложение тоже работает в Docker, создайте общую сеть:

docker network create my-network
docker run --name my-redis --network my-network -d redis:latest
docker run --name my-app --network my-network -d my-app-image

В коде приложения используйте хост my-redis вместо localhost.

Шаг 10: Проверка работы и мониторинг

  • Логи Redis: docker logs my-redis.

  • Подключитесь через redis-cli и выполните INFO для просмотра статистики.

  • Используйте MONITOR для отладки команд в реальном времени.

Шаг 11: Обновление и удаление контейнера

Обновить образ:

docker pull redis:latest
docker stop my-redis
docker rm my-redis
# затем запустите заново с теми же параметрами

Удалить том (осторожно, данные пропадут): docker volume rm redis-data.

Шаг 12: Настройка для продакшена

  • Используйте restart: always или unless-stopped в Compose.

  • Ограничьте память: --maxmemory 256mb --maxmemory-policy allkeys-lru.

  • Включите сохранение на диск (AOF или RDB).

  • Настройте мониторинг (Prometheus + Grafana).

  • Не публикуйте порт наружу без необходимости; используйте внутреннюю сеть Docker.

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

1. Порт 6379 уже занят — остановите другой Redis или измените проброс портов. 2. Неверный пароль — проверьте requirepass в конфиге и параметры подключения. 3. Данные исчезают после перезапуска — не настроен volume или не включено сохранение. 4. Не удаётся подключиться из другого контейнера — контейнеры не в одной сети или используется localhost вместо имени сервиса. 5. Redis не запускается — проверьте логи: docker logs my-redis.

FAQ

Можно ли использовать Redis в Docker для продакшена? Да, но убедитесь в правильной настройке безопасности, сохранения данных и мониторинга.

Как подключиться к Redis из Windows? Docker Desktop для Windows работает аналогично; используйте localhost:6379.

Какой образ Redis выбрать? Официальный redis:latest или конкретную версию, например redis:7.2-alpine для меньшего размера.

Как сделать резервную копию данных Redis? Используйте docker exec my-redis redis-cli SAVE для создания дампа, затем скопируйте файл из тома.

Можно ли запустить Redis Cluster в Docker? Да, но это требует более сложной настройки; для большинства задач достаточно одного экземпляра.

Итог

Вы научились поднимать Redis в Docker, настраивать его для разработки и продакшена, подключаться из приложений на Python, Node.js и других языках. Docker значительно упрощает развёртывание и управление Redis. Следуйте лучшим практикам безопасности и не забывайте о резервном копировании.

Читайте также

Комментарии

Комментарии доступны только зарегистрированным пользователям. Войти

  • Пока нет комментариев. Будьте первым.