Поиск по сайту:

Как быстро развернуть Redis в качестве контейнера Docker


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

Docker — это ведущий набор инструментов для упаковки приложений в контейнеры. Он позволяет изолировать программные компоненты в независимых средах с собственной файловой системой.

В этом руководстве мы будем использовать Docker для быстрого развертывания Redis с помощью официального образа на Docker Hub. По сравнению с установкой на «голое железо» Docker упрощает процедуру настройки и не загрязняет ваш хост новыми пакетами. Прежде чем продолжить, убедитесь, что на вашем хосте установлена работающая установка Docker.

Начиная

Образ Redis включает в себя как серверный компонент, так и официальный интерфейс командной строки. Он предварительно настроен для запуска сервера с функционирующими значениями конфигурации по умолчанию при запуске нового контейнера.

Доступны варианты образа для разных версий Redis (5.0 и 6.0) и операционных систем (Alpine и Debian). Просмотрите список тегов, чтобы найти лучший вариант для вашей среды.

Самое простое развертывание выглядит следующим образом:

docker run --name redis -d -p 6379:6379 redis:6.0

Это запускает новый контейнер с именем redis, работающий под управлением Redis 6.0. Флаг -d используется для отсоединения от контейнера. Сервер будет работать в фоновом режиме, пока вы не остановите контейнер с помощью docker stop redis.

Redis по умолчанию прослушивает порт 6379. Флаг -p привязывает этот порт к вашему хосту. Ваши приложения смогут получить доступ к Redis на localhost:6379. Помните, что это небезопасно — если ваша машина подключена к Интернету, любой может получить доступ к вашим данным Redis!

Хранилище данных

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

docker run --name redis -d 
    -v redis-data:/data
    redis:6.0 --save 60 1

Флаг --save передается на сервер Redis. Он настраивает используемую стратегию сохраняемости. В этом примере снимок вашей базы данных создается каждые 60 секунд. Операция пропускается, если с момента последнего моментального снимка не произошла запись в базу данных 1.

Том Docker с именем redis-data создается с помощью флага -v. Это сохранит ваши данные вне контейнера, чтобы они оставались доступными после перезапуска. Том будет сохраняться до тех пор, пока не будет удален с помощью docker volumes rm redis-data.

Настройка вашего сервера

Самый быстрый способ добавить параметры конфигурации — передать аргументы CLI серверу Redis как часть команды docker run. Это показано в приведенном выше примере --save. Все, что следует после имени изображения в docker run, будет передано команде, выполняемой внутри контейнера. В случае с образом Redis эта команда является сервером Redis.

Использование флагов CLI быстро становится повторяющимся. Вы можете заставить Redis использовать файл конфигурации, передав путь в качестве первого аргумента сервера. Этот файл обычно располагается по адресу /usr/local/etc/redis/redis.conf. Используйте монтирование привязки Docker, чтобы получить redis.conf из вашей локальной файловой системы, смонтированной в контейнере:

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 в вашем рабочем каталоге. Docker смонтирует этот путь в контейнер, предоставив Redis доступ к файлу, указанному в команде docker run.

Управление безопасностью Redis

Образы Redis Docker по умолчанию настроены на запуск Redis в незащищенном режиме. Это упрощает доступ к серверу Redis из других ваших контейнеров Docker, используя сети Docker. Однако это также означает, что все, что может достичь вашего контейнера, будет иметь полный доступ к вашим данным.

Защищенный режим — это функция Redis, которая отвечает только на неаутентифицированные запросы, отправленные с петлевых адресов вашего хоста, таких как localhost. Вы можете включить его, добавив protected-mode yes в свой redis.conf. При использовании с установкой Dockerized это приведет к тому, что Redis будет доступен только в своем собственном контейнере, что обычно не идеально.

Вместо этого вы можете настроить базовую аутентификацию по паролю, добавив requirepass пример в свой redis.conf. Redis будет принимать запросы только от клиентов, которые предоставляют настроенный пароль. Redis 6 также поддерживает более полнофункциональный контроль доступа, который позволяет настроить несколько учетных записей пользователей с разными привилегиями.

Чтобы использовать аутентификацию, следуйте инструкциям в предыдущем разделе, чтобы создать файл конфигурации Redis и смонтировать его в свой контейнер. Если вы не хотите устанавливать пароль, защитите свою установку, подключив ее только к сетям Docker, необходимым для вашего приложения. Не привязывайте порт 6379 к вашему хосту без предварительной настройки аутентификации.

Использование вашей установки Redis

Теперь, когда Redis полностью настроен, вы можете перейти к доступу к нему из ваших клиентов. Если вы подключаетесь со своего хоста, вы можете использовать IP-адрес контейнера Docker (видимый при запуске docker inspect redis с поправкой на имя вашего контейнера) и порт 6379.

Чтобы получить доступ к Redis из другого контейнера Docker, лучше всего объединить оба контейнера в сеть Docker:

docker network create redis
docker run --name redis --network redis -d redis:6.0
docker run --name api --network redis -d my-api:latest

Теперь контейнер вашего приложения сможет подключаться к Redis через порт 6379 на имени хоста redis. Docker делает имена контейнеров доступными в качестве имен хостов, когда они совместно используют сеть Docker.

Вы можете вручную взаимодействовать со своей базой данных, используя двоичный файл redis-cli, включенный в образ контейнера. Запустите контейнер в автономном режиме (-d), чтобы он работал в фоновом режиме. Затем используйте docker exec для запуска команды redis-cli:

docker exec -it redis-container redis-cli

Это перенесет вас в сеанс Redis CLI в вашем контейнере.

Краткое содержание

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

Всегда следует помнить о двух вещах: хранилище и безопасность: если вам нужно использовать функции сохранения Redis, вам следует использовать том Docker, чтобы не потерять свои данные. Помните, что Dockerized Redis по умолчанию работает в незащищенном режиме без аутентификации, поэтому раскрытие порта 6379 может иметь катастрофические последствия в худшем случае.