Перейти к содержимому

Как запустить redis в docker

  • автор:

Запуск REDIS в Docker-контейнере

Сервис запущен на порту 6379; к нему можно обращаться по имени redis-server или ID 9cd35e6ebe2d .

Подключимся к серверу командой redis-cli.

docker exec -it redis-server redis-cli
redis-server — имя контейнера, которое задали во время его запуска.

Должна появится строка ввода команд Redis:
127.0.0.1:6379>
Для проверки подключения к серверу выполнить команду:
> ping
Ответ
PONG

Создадим пару ключ — значение. Для этого вводим:
> set simple_key «Simple value»
Попробуем его получить
> get simple_key
Должны получить значение:
«Simple value»

Получим список всех ключей командой:
> KEYS *
Выходим из редис-консоли:
> quit

Теги

  • Войдите или зарегистрируйтесь, чтобы оставлять комментарии

Как установить Redis в Docker и Docker Compose

В этой статье мы рассмотрим, как развернуть Redis в Docker и в файле Docker Compose.

Redis — это высокопроизводительная система управления базами данных, которая используется для хранения и обработки данных в памяти. Redis позволяет эффективно обрабатывать большие объемы данных и обеспечивает высокую доступность и отказоустойчивость.

Установка Docker и Docker Compose

Прежде чем начать, вам необходимо установить Docker и Docker Compose. Вы можете найти инструкции по установке Docker для своей операционной системы на нашем блоге для Centos 7 или для Ubuntu 20.04.

Установим Docker-Compose

curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Устанавливаем права на запуск.

chmod +x /usr/local/bin/docker-compose

Проверяем как установился Docker-Compose:

docker-compose --version

Создание Docker Compose файла

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

Что бы ориентироваться в будущем в том что у нас установлено, создадим отдельную папку для данного проекта в каталоге /home и перейдем в него.

mkdir /home/redis && cd /home/redis

Как установить Redis в Docker и Docker Compose - 1

Вы так же можете использовать другую директорию для размещения этого и других проектов.

Воспользуемся репозиторием для создания файла docker-compose.yaml по ссылке https://hub.docker.com/_/redis

Создадим файл *.yaml для Docker-Compose.

version: '3.3' services: redis: image: redis:latest restart: always ports: - "6379:6379" volumes: - /path/to/local/dаta:/root/redis - /path/to/local/redis.conf:/usr/local/etc/redis/redis.conf environment: - REDIS_PASSWORD=my-password - REDIS_PORT=6379 - REDIS_DATABASES=16 

Как установить Redis в Docker и Docker Compose - 2

Давайте рассмотрим каждый параметр:

version — это версия формата файла Docker Compose. Мы используем версию 3.3.
services — это раздел, где мы определяем список контейнеров и их настроек. В нашем случае мы определяем один сервис — Redis.
redis — это имя нашего сервиса.
image — это имя образа Redis, который мы будем использовать для создания нашего контейнера.
restart — это настройка, которая указывает Docker перезапускать контейнер Redis в случае его остановки или сбоя.
ports — это настройка, которая определяет, какие порты контейнера должны быть доступны на хост-системе. В данном случае мы пробрасываем порт 6379 контейнера Redis на порт 6379 хост-системы.
volumes — это настройка, которая определяет, какие директории на хост-системе должны быть доступны внутри контейнера. В данном случае мы монтируем директории с данными и конфигурационными файлами Redis.
environment — это настройка, которая позволяет определить переменные среды для контейнера Redis. В данном случае мы определяем пароль, порт и количество баз данных Redis.
REDIS_PASSWORD: my-password определяет переменную REDIS_PASSWORD со значением my-password.
REDIS_PORT: 6379 определяет порт Redis, который будет использоваться в контейнере. По умолчанию Redis использует порт 6379, поэтому эта переменная может использоваться для изменения порта на другой, если это необходимо.
REDIS_DATABASES: 16 определяет количество баз данных Redis, которые будут доступны в контейнере. По умолчанию Redis поддерживает 16 баз данных, но этот параметр можно изменить с помощью этой переменной.

Запуск Redis

Теперь, когда у нас есть файл docker-compose.yaml, и мы можем запустить Redis контейнер с помощью команды:

docker-compose up -d

Как установить Redis в Docker и Docker Compose - 3

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

Вы можете проверить, запущен ли контейнер Redis, выполнив команду:

docker ps | grep redis

Как установить Redis в Docker и Docker Compose - 4

Мы можем запустить контейнер Redis без использования файла docker-compose.yaml с помощью следующей команды Docker:

docker run -d --name my-redis-container -p 6379:6379 -v /path/to/local/dаta:/root/redis -v /path/to/local/redis.conf:/usr/local/etc/redis/redis.conf -e REDIS_PASSWORD=my-password -e REDIS_PORT=6379 -e REDIS_DATABASES=16 redis:latest 

Подключение к Redis

Вы можете подключиться к Redis контейнеру с помощью любого клиента Redis. Для этого вам понадобится IP-адрес вашей хост-системы и порт, который вы определили в файле docker-compose.yaml.

Например, если вы используете стандартный клиент Redis, вы можете подключиться к контейнеру Redis, выполнив команду:

redis-cli -h 172.27.0.2 -p 6379 

Как установить Redis в Docker и Docker Compose - 5

Где 172.27.0.2 это IP докер контейнера на котором работает Redis. Что бы его узнать, командой docker ps | grep redis узнаем ID нашего контейнера или воспользуемся его названием.

docker inspect --format='>>>' redis_redis_1

Как установить Redis в Docker и Docker Compose - 6

Где redis_redis_1 — название контейнера, IP-адрес которого нужно отфильтровать.

Эта команда использует флаг —format для форматирования вывода, в котором используется функция range для перебора всех сетей контейнера, и выводится только IP-адрес каждой сети. Если контейнер имеет несколько сетей, то будут выведены все их IP-адреса. Если же контейнер подключен только к одной сети, то будет выведен только ее IP-адрес.

Эта команда redis-cli -h 172.27.0.2 -p 6379 — подключится к Redis, запущенному на локальной машине и прослушивающему порту 6379.

Для подключения из CMS систем, используйте встроенные плагины.

И так, в этой статье мы рассмотрели, как развернуть Redis в Docker и Docker Compose. Мы создали файл docker-compose.yaml, с настройками для контейнера Redis.

Введение и установка — Основы Redis

Представьте, что вы пишете back-end небольшого интернет-магазина, состоящего из серверного приложения с бизнес-логикой и реляционной базы данных:

Первое время архитектура покрывает все ваши нужды: товары отображаются, заказы создаются быстро. Но со временем проект усложняется. Чаще всего это вызвано двумя факторами:

  • продукт требует новой бизнес-логики
  • рост пользовательской базы несет дополнительную нагрузку на сервера

В определенный момент реляционной системы управления базами данных (далее «РСУБД») становится недостаточно и в архитектуре появляются дополнительные технологии для решения конкретных проблем.

Несколько примеров практических задач, когда РСУБД — неподходящее или неоптимальное решение:

  • отображение количества пользователей, находящихся на странице в режиме реального времени
  • ускорение времени ответа на тяжелый HTTP запрос
  • отложенная отправка писем/смс при оформлении заказа
  • отображение недавних покупок/просмотренных товаров на всех платформах

Для эффективного решения вышеописанных задач подходит open-source база данных Redis. Сегодня тысячи компаний, включая Instagram, Twitter, Uber, Airbnb, выбирают Redis за его скорость и масштабируемость.

Все основные варианты использования Redis будут рассмотрены по ходу этого курса. Сейчас достаточно знать главные особенности этого хранилища:

  • in-memory означает, что данные хранятся в оперативной памяти. Это накладывает ограничение на объем данных, который хранится в Redis, но дает более быстрое чтение и запись по сравнению с длительными хранилищами (NVME, SSD, HDD)
  • KV хранилище (key-value). В Redis нет таблиц, схем или каких-либо других абстракций для доступа к данным. Все данные записываются и получаются по ключам. Вследствие этого основные операции выполняются за O(1)

Установка

Несмотря на то, что вся практика для данного курса выполняется в нашей среде, это не отменяет необходимости умения работать с базой локально. Более того, эффективное обучение невозможно без повторения примеров из уроков в своей среде. Поэтому, перед тем, как начать, необходимо установить Redis локально.

Ссылка для скачивания

Через пакетный менеджер вашей операционной системы

install redis 
sudo add-apt-repository ppa:redislabs/redis sudo apt-get update sudo apt-get install redis 

Через Docker

--name local-redis -d redis 

Подключение

Локальное подключение

После установки Redis сервер нужно запускать вручную:

# oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 11760:C 07 Dec 2021 18:25:26.103 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=11760, just started 11760:C 07 Dec 2021 18:25:26.103 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf 11760:M 07 Dec 2021 18:25:26.104 * Increased maximum number of open files to 10032 (it was originally set to 256). 11760:M 07 Dec 2021 18:25:26.104 * monotonic clock: POSIX clock_gettime _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 6.2.6 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in standalone mode |`-._`-. -` __. -.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 11760 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | https://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' 11760:M 07 Dec 2021 18:25:26.105 # Server initialized 11760:M 07 Dec 2021 18:25:26.105 * Ready to accept connections 

Такой способ подходит для академических целей, но не используется в производственных окружениях. Обычно Redis сервер запускается как демон (daemon):

--daemonize yes 

Когда сервер запущен, можно попробовать подключиться к нему с помощью утилиты redis-cli :

Чтобы удостовериться, что сервер работает корректно, достаточно запустить команду info :
# Server redis_version:6.2.6 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:c6f3693d1aced7d9 redis_mode:standalone os:Darwin 19.5.0 x86_64 arch_bits:64 . 

Подключение с Docker

В разделе установки через Docker Redis сервер запускается в контейнере с именем local-redis. Используем это же имя для подключения:

exec -it local-redis redis-cli 

Резюме

  1. Redis — это очень быстрая key-value БД, хранящая все данные в оперативной памяти
  2. В зависимости от задачи Redis может быть и базой данных, и кэшом, и даже брокером сообщений
  3. Важно установить Redis локально и поработать с ним из терминала, так как взаимодействие из любого языка программирования происходит через такие же CLI-команды

Что будет дальше

В этом курсе рассматриваются основные варианты использования Redis с практическими примерами:

  • key-value база данных

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Наши выпускники работают в компаниях:

Запуск redis в docker

Есть бэкенд написанный на lumen(laravel), который подключается к redis. Когда запускаю локальный php и локальный redis, то все работает. Когда запускаю через докер выдает ошибку: Connection refused [tcp://127.0.0.1:6379] . Сборка php (Dockerfile):

FROM php:7.2-fpm RUN apt-get update \ && chown -R www-data:www-data /var/www/html \ && chmod -R 777 /var/www/html RUN pecl install redis && docker-php-ext-enable redis 

Файл docker-compose.yml:

 nginx: image: nginx:latest ports: - 127.0.0.1:80:80 volumes: - .:/var/www/html - ./docker/config/nginx:/etc/nginx/conf.d - ./docker/logs/nginx:/var/log/nginx links: - php-fpm php-fpm: build: context: ./docker/php-fpm volumes: - .:/var/www/html redis: image: redis restart: always ports: - 127.0.0.1:6379:6379 logging: driver: none 

В чем может быть проблема? Может я какой-то порт не открыл?

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

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