Pull to refresh

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

Level of difficultyMedium
Reading time5 min
Views40K

Доброго времени суток! Сегодня я продемонстрирую вам, как быстро и эффективно настроить 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 с настройками безопасности, производительности, мониторингом состояния и управлением ресурсами, что делает его отличным выбором для большинства проектов.

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

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

Only registered users can participate in poll. Log in, please.
Хотели бы вы увидеть цикл моих статей на тему Docker?
75.79% Да72
24.21% Нет23
95 users voted. 9 users abstained.
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 8: ↑4 and ↓4+3
Comments5

Articles