Redis是一种内存键值存储,可以保存高性能的抽象数据结构。开源软件通常用于数据库、消息传递和缓存功能。
Docker 是将应用程序打包到容器中的领先工具包。它允许您将软件组件隔离到具有自己的文件系统的独立环境中。
在本指南中,我们将使用 Docker 使用Docker Hub 上的官方镜像快速部署 Redis 。与裸机安装相比,Docker 实现了更简单的设置过程,并且不会用新包污染您的主机。在继续之前,请确保您的主机上安装了正常运行的 Docker。
入门
Redis 镜像包括服务器组件和官方 CLI。它已预先配置为在您启动新容器时使用运行的默认配置值启动服务器。
映像的变体可用于覆盖不同的 Redis 版本(5.0 和 6.0)和操作系统(Alpine 和 Debian)。浏览标签列表以找到适合您环境的最佳选项。
最简单的部署如下:
docker run –name redis -d -p 6379:6379 redis:6.0这将启动一个名为redisrunning 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 参数作为docker run命令的一部分传递给 Redis 服务器。–save上面的例子说明了这一点。图像名称 in 之后的任何内容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.confinside redis-conf。Docker 会将此路径挂载到容器中,让 Redis 可以访问docker run命令中指定的文件。
管理Redis安全
默认情况下,Redis Docker 映像配置为在不受保护的模式下运行 Redis。这使得使用 Docker 网络从其他 Docker 容器访问 Redis 服务器变得更加容易。但是,这也意味着可以到达您的容器的任何东西都可以完全访问您的数据。
保护模式是Redis 的一项功能,它仅响应从主机的环回地址发出的未经身份验证的查询,例如localhost. 您可以通过添加protected-mode yes到您的redis.conf. 当与 Dockerized 安装一起使用时,这将导致 Redis 只能在其自己的容器内访问,这通常并不理想。
您可以通过添加requirepass example到您的redis.conf. Redis 将只接受来自提供配置密码的客户端的查询。Redis 6 还支持功能更齐全的访问控制,让您可以设置具有不同权限的多个用户帐户。
要使用身份验证,请按照上一节中的指导创建 Redis 配置文件并将其挂载到您的容器中。如果您不想设置密码,只需将其加入应用程序所需的 Docker 网络,即可确保您的安装安全。不要在没有先设置身份验证的情况下将端口 6379 绑定到您的主机。
使用您的 Redis 安装
现在 Redis 已完全设置,您可以继续从客户端访问它。如果您从主机连接,则可以使用 Docker 容器的 IP(通过运行可见docker inspect redis,根据容器名称进行调整)和端口6379。
要从另一个 Docker 容器访问 Redis,最好将两个容器都加入一个 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 端口可能会产生灾难性的后果。
暂无评论内容