Быстрый запуск Redis через Docker Compose

от автора

Доброго времени суток! Сегодня я продемонстрирую вам, как быстро и эффективно настроить Redis с помощью Docker Compose. Этот процесс займет всего несколько минут, но в результате вы получите полноценную базу данных Redis, работающую в изолированном Docker контейнере. Важные компоненты, такие как данные кэша и конфигурации, будут сохранены на вашей локальной машине благодаря использованию томов (volumes), что обеспечит надежность и доступность данных.

Что такое Redis и зачем он нужен

Redis (Remote Dictionary Server) — это высокопроизводительная система управления базами данных типа «ключ-значение», работающая в оперативной памяти. Redis часто используется для кэширования данных, управления сессиями, очередей сообщений и в качестве базы данных NoSQL для быстрого доступа к данным.

Основные преимущества Redis:

  • Скорость: работа в памяти обеспечивает быструю обработку запросов.

  • Простота: простая модель данных «ключ-значение» с поддержкой сложных структур данных.

  • Гибкость: поддержка различных структур данных, таких как строки, списки, множества, хеши и т.д.

  • Масштабируемость: легкость масштабирования и поддержки репликации.

Подготовка

Прежде чем приступить к развертыванию Redis на вашем локальном компьютере или VPS сервере, необходимо установить Docker и Docker Compose.

Если вы новичок в использовании Docker, рекомендую начать с установки Docker Desktop на вашем локальном компьютере. Это приложение автоматически установит Docker и Docker Compose, облегчив первоначальное знакомство с контейнеризацией.

Шаг 1: Создание Docker Compose файла

Создаем пустую директорию и переходим в нее. В созданной директории создадим файл docker-compose.yaml, который опишет наш сервис Redis. Вот пример моего файла:

version: '3.9'  services:   redis:     image: redis:latest     container_name: redis_container     environment:       - REDIS_PASSWORD=${REDIS_PASSWORD}       - REDIS_USER=${REDIS_USER}       - REDIS_USER_PASSWORD=${REDIS_USER_PASSWORD}     ports:       - "6380:6379"     volumes:       - ./redisdata:/data     deploy:       resources:         limits:           cpus: '0.50'           memory: 512M         reservations:           cpus: '0.25'           memory: 256M     command: >       sh -c '         mkdir -p /usr/local/etc/redis &&         echo "bind 0.0.0.0" > /usr/local/etc/redis/redis.conf &&         echo "requirepass $REDIS_PASSWORD" >> /usr/local/etc/redis/redis.conf &&         echo "appendonly yes" >> /usr/local/etc/redis/redis.conf &&         echo "appendfsync everysec" >> /usr/local/etc/redis/redis.conf &&         echo "user default on nopass ~* +@all" > /usr/local/etc/redis/users.acl &&         echo "user $REDIS_USER on >$REDIS_USER_PASSWORD ~* +@all" >> /usr/local/etc/redis/users.acl &&         redis-server /usr/local/etc/redis/redis.conf --aclfile /usr/local/etc/redis/users.acl       '     healthcheck:       test: ["CMD", "redis-cli", "-a", "$REDIS_PASSWORD", "ping"]       interval: 30s       timeout: 10s       retries: 5     restart: unless-stopped     tty: true     stdin_open: true

Создаем файл .env в той же дирректории и добавляем в него такие параметры (данные указывайте свои):

REDIS_PASSWORD=my_redis_password REDIS_USER=my_user REDIS_USER_PASSWORD=my_user_password

Краткий обзор Docker Compose файла

  • Версия:

    • version: '3.9': Используется версия 3.9 формата Docker Compose.

  • Сервис Redis:

    • image: Используется образ redis:latest.

    • container_name: Созданный контейнер будет иметь имя redis_container.

    • environment: Переменные окружения:

      • REDIS_PASSWORD: Пароль для Redis (имя пользователя по умолчанию — default).

      • REDIS_USER: Имя нового пользователя.

      • REDIS_USER_PASSWORD: Пароль для нового пользователя.

    • ports: Проброс порта 6380 (локальная машина, сервер) на 6379 (порт внутри Redis контейнера) для доступа к Redis (для доступа необходимо будет указывать порт 6380).

    • volumes: Хранение данных Redis в локальной директории ./redisdata. Таким образом, ваши данные будут сохраняться в локальной папке, и вы не потеряете их, даже если контейнер Redis случайно удалится или вы потеряете к нему доступ. Главное — обеспечить сохранность данных из папки redisdata

    • deploy: Ограничения и резервирование ресурсов:

      • Лимиты: 0.50 CPU и 512M памяти.

      • Резервирование: 0.25 CPU и 256M памяти.

    • command:

      1. mkdir -p /usr/local/etc/redis: Эта команда создает директорию /usr/local/etc/redis, если она не существует. Флаг -p позволяет создавать вложенные директории при необходимости.

      2. echo "bind 0.0.0.0" > /usr/local/etc/redis/redis.conf: Здесь мы добавляем строку "bind 0.0.0.0" в файл redis.conf. Это позволяет Redis прослушивать соединения со всех IP-адресов.

      3. echo "requirepass $REDIS_PASSWORD" >> /usr/local/etc/redis/redis.conf: Эта команда добавляет строку с паролем в файл redis.conf. Пароль берется из переменной окружения $REDIS_PASSWORD.

      4. echo "appendonly yes" >> /usr/local/etc/redis/redis.conf: Здесь мы включаем режим журнала (append-only mode) для сохранения данных на диск.

      5. echo "appendfsync everysec" >> /usr/local/etc/redis/redis.conf: Эта строка указывает Redis выполнять синхронизацию журнала с диском каждую секунду.

      6. echo "user default on nopass ~* +@all" > /usr/local/etc/redis/users.acl: Здесь мы создаем файл users.acl и добавляем правило доступа для пользователя по умолчанию. Он может подключаться без пароля и имеет доступ ко всем командам (~* +@all).

      7. echo "user $REDIS_USER on >$REDIS_USER_PASSWORD ~* +@all" >> /usr/local/etc/redis/users.acl: Эта команда добавляет правило доступа для конкретного пользователя (с именем, указанным в переменной $REDIS_USER). Пользователь должен предоставить пароль из переменной $REDIS_USER_PASSWORD.

      8. redis-server /usr/local/etc/redis/redis.conf --aclfile /usr/local/etc/redis/users.acl: Здесь мы запускаем Redis-сервер с указанным файлом конфигурации и файлом ACL.

    • healthcheck: Проверка здоровья сервиса:

      • Команда redis-cli ping с паролем.

      • Интервал 30 секунд, таймаут 10 секунд, 5 попыток.

    • restart: Политика перезапуска unless-stopped.

    • tty и stdin_open: Включены для интерактивного доступа.

Запуск Redis

Чтобы развернуть Redis с помощью этого файла Docker Compose, выполните следующую команду в каталоге с файлом docker-compose.yaml (будет одинаково работать, как на VPS, так и на вашей локальной машине):

docker-compose up -d

Эта команда запустит контейнер Redis в фоновом режиме (-d) на основе настроек, указанных в файле docker-compose.yaml.

Если контейнер был развернут на локальной машине, то в качестве хоста можно использовать «localhost». В ином случае, как у меня, так как я развернул контейнер на VPS сервере, используйте IP-адрес VPS сервера.

Ссылка для подключения с логином и паролем будет иметь такой вид:

redis://username:password@193.3.298.206:6380/0

Обратите внимание на формат ссылки. Она состоит из нескольких частей:

  • redis:// — указываем что подключаемся к Redis

  • HOST — это или IP-адрес сервера или «localhost», если запустили Redis на локальной машине

  • 6380 — это порт, который вы установили в docker-compose.yaml файле

  • 0 — это номер базы данных. По умолчанию в Redis баз данных 16 штук (от 0 до 15). Число можно увеличить через config.

Вот пример подключения через python (библиотека redis, которую можно установить комндой pip/pip3 install redis) с указанием параметров подключения:

Импортируем Redis в python:

import redis

Создаем объект Redis:

r = redis.Redis(host='193.3.298.206', port=6380, db=0, username='username', password='your_pass')

Тестируем соединение:

try:     info = r.info()     print(info['redis_version'])     response = r.ping()     if response:         print("Подключение успешно!")     else:         print("Не удалось подключиться к Redis.") except redis.exceptions.RedisError as e:     print(f"Ошибка: {e}")

Смотрим на консоль:

7.2.5 Подключение успешно!

r.ping() отправляет команду PING к Redis. Если Redis отвечает, метод вернет True. Так же мы получили версию redis на сервере к которому подключались, а значит, что все сработало!

Заключение

Использование Docker Compose для развертывания Redis позволяет значительно упростить управление базой данных, обеспечивая при этом высокую гибкость и надежность. Описанный выше файл docker-compose.yaml содержит базовые настройки для запуска Redis с настройками безопасности, производительности, мониторингом состояния и управлением ресурсами, что делает его отличным выбором для большинства проектов.

Если эта информация была вам полезной — сообщите об этом через лайк, комментарий или подписку.

Благодарю за внимание.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Хотели бы вы увидеть цикл моих статей на тему Docker?

83.33% Да5
16.67% Нет1

Проголосовали 6 пользователей. Воздержавшихся нет.

ссылка на оригинал статьи https://habr.com/ru/articles/823936/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *