- 本文环境
- 系统:Ubuntu 22.04
- 终端:腾讯云 OrcaTerm(可使用 Xshell+Xftp 代替)
前言
- 首先需要安装好 Docker,可以参考Ubuntu 安装 Docker
- 使用 Docker 需要 root 权限,推荐将用户加入 Docker 用户组(上文中有),这样使用就不需要加上
sudo
了(但是我是 root,所以文中都没加)
- 使用 Docker 需要 root 权限,推荐将用户加入 Docker 用户组(上文中有),这样使用就不需要加上
- Docker Hub 中的 Redis 官方镜像文档 redis - Official Image | Docker Hub
1.寻找镜像
在 Docker 仓库中查找 Redis 镜像
1 | docker search redis |
可以看到第一个就是我们需要的镜像
2.拉取镜像
在查找到 Redis 的镜像后,就可以进行拉取
1 | docker pull redis |
因为没有指定 Redis 的版本,所以默认拉取最新的版本(即 latest)
如果想要拉取指定的版本,可以在拉取时添加版本号(redis:tag
),以 Redis 7.2.3 版本为例
1 | docker pull redis:7.2.3 |
3.查看镜像
拉取完毕后,检查镜像是否安装完成
1 | ## 查看所有镜像 |
可以看到已经有 Redis 的镜像了
4.创建容器并启动
通过 Docker 安装 Redis 和直接安装 Redis 的一处不同在于通过 Docker 创建的 Redis 容器中是没有redis.conf
配置文件的
Redis 可以在没有配置文件的情况下使用内置的默认配置启动,但是这种方法只建议在测试和开发的时候使用,当然 Redis 官方也给我们提供了使用配置文件启动 Redis 容器的方法,因此下面介绍两种方法
一、无配置文件简易版
1 | # 容器名称、端口、密码均可自行指定 |
参数说明:
--name redis
:指定容器的名称为 redis(可以自己指定)-p 6379:6379
:将容器的 6379(右边的)端口映射到宿主机的 6379(左边的)端口(前提是不被占用)-- requirepass 123456
:设置密码为 123456- 如果不想设置密码可以不使用该参数,但是需要注意为了便于容器外能够访问到该容器内的 Redis,其
protected mode
(保护模式)默认关闭,这意味着如果你将端口暴露在主机外部,它将在没有密码的情况下对所有人开放
- 如果不想设置密码可以不使用该参数,但是需要注意为了便于容器外能够访问到该容器内的 Redis,其
-d
:以后台的方式运行redis:tag
:指定创建容器的镜像(:tag
指定版本,不加默认最新版)- 建议创建容器时使用
:tag
指定版本,可以使用docker images
查看镜像的版本,以免过段时间版本更新后导致现在拉取的镜像已经不是最新版本,又重新拉取一个最新版本的镜像进行容器创建
- 建议创建容器时使用
执行后返回的一长串是容器 id
说明
该方式创建的容器适合在测试环境使用,简单方便,但是没法通过配置文件去自定义一些配置,而且数据容易丢失,一旦关机或者容器挂了数据就没了,因为是存在缓存里的
二、 配置文件挂载版
准备配置文件
先准备一个目录用于存放配置文件(用于后面创建容器时挂载配置),目录可以自己选择,通常选择放在用户的主目录下的一个子目录中,好处是每个用户都有自己的挂载目录,可以隔离不同用户的数据
但是因为我的云服务器只有我一个人在玩,平常都是直接用的 root 用户,所以直接在根目录下创建了一个/data
目录用来存放 Docker 容器的挂载配置和数据,因此我这边准备的目录在/data/redis/
1 | # 创建用于 Redis 容器配置文件挂载的目录 |
然后提前在该目录下新建一个redis.conf
文件
1 | # 新建 redis.conf 文件 |
创建完配置文件后,直接去 Redis 的官网找对应版本的配置文件 Redis configuration | Redis
往下滑可以找到各个不同版本的配置文件
因为我拉取的是最新版本的镜像,所以这边选择第一个 7.2 版本(最新版本),根据拉取 Redis 的实际版本选择即可
点进去后就可以看到配置文件的内容,本文就不具体介绍了,可以自行了解
直接ctrl+a
+ ctrl+c
复制,然后用 vim 打开我们之前准备好的redis.conf
文件
1 | vim /data/redis/conf/redis.conf |
输入i
进入编辑模式,ctrl+v
粘贴,然后别急着保存退出,还需要修改一些配置
编辑配置文件
修改配置主要是为了能在宿主机访问容器中的 Redis,因为配置文件中的protected-mode
(保护模式)设置是开启的
- 保护模式:如果符合下面两个条件(不是之一)则无法被外部访问
- 没有明确使用 bind 绑定某个 ip 地址
- 没有设置密码
取消本地绑定/绑定某个 ip 地址
定位到bind 127.0.0.1 -::1
,将其注释bind 127.0.0.1 -::1
的意思是限制只能本地访问(即只有该容器内部才可以访问,容器外的宿主机也访问不了),注释掉表示允许所有 ip 访问
当然也可以选择绑定指定 ip 允许其访问
设置密码
定位到## requirepass foobared
,取消其注释,并将foobared
修改为你想设置的密码
比如我这边就将密码设置为了123456
如果不想设置密码还想被外部宿主机访问,那就需要另外定位到protected-mode yes
,将参数修改为no
(解除保护模式的限制)
其他配置
1 | ## 默认 no,表示不以守护进程启动,Docker 部署不需要改为 yes,因为 docker run -d 本身就是后台启动 |
更多其他配置根据自己需求修改,本文不多介绍
以配置文件方式创建容器并启动
1 | # 容器名称、端口、挂载目录均可自行指定 |
简易版的参数就不再介绍了,说明一下新参数:
-v
:数据卷挂载/data/redis/conf:/usr/local/etc/redis
:将容器中/usr/local/etc/redis
目录挂载到宿主机的/data/redis/conf
目录/data/redis/conf
目录即之前准备的存放redis.conf
文件的目录,这里可以理解为 Docker 容器和宿主机共享该配置文件
/data/redis/data:/data
:将容器中/data
数据目录挂载到宿主机的/data/redis/data
目录- 如果开启了持久化,进行挂载可以避免持久化的数据丢失,如果不挂载的话在删除容器后会丢失该容器中持久化的数据,即挂载后即使容器删除,只要宿主机目录中的数据还存在,使用该目录新创建的容器中依旧有原先容器中挂载的数据
- 如果没有开启持久化也就不需要挂载
\data
数据目录了,因为 Redis 的数据都存在缓存里,不开启持久化也不会在该目录下存储数据 - 宿主机用于挂载的目录(比如我这边的
/data/redis/data
)可以自行选择,一般就放在配置目录旁边
redis-server /usr/local/etc/redis/redis.conf
:以配置文件启动容器,加载容器内的redis.conf
文件,实际找到的是挂载在宿主机中配置目录下的reids.conf
返回的一长串是创建的容器 id
6.查看容器
检查容器是否创建成功
1 | # 查看运行中的容器 |
可以看到创建的 Redis 容器已经在运行中了
我们可以通过 Docker 命令进入 Redis 容器内部
1 | # 这里的 redis 是创建容器时自行指定的容器名称 |
进入后就可以和在 linux 中一样使用 Redis 了
输入redis-cli -a 123456
即可进入 Redis 命令行,-a
后面的参数是你设置的密码
后续使用和正常 Redis 一样,想要退出 Redis 和容器使用exit
命令即可
7.删除容器
不能直接删除运行中的容器,因此需要先停止容器再删除
1 | # 这里的 redis 是创建容器时自行指定的容器名称 |
但是可以加上-f
参数来强制删除运行中的容器
1 | # 这里的 redis 是创建容器时自行指定的容器名称 |