Как быстро развернуть 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 может иметь катастрофические последствия в худшем случае.