专栏精选文章
- 《Docker是什么?Docker从介绍到Linux安装图文详细教程》
- 《30条Docker常用命令图文举例总结》
- 《Docker如何构建自己的镜像?从镜像构建到推送远程镜像仓库图文教程》
- 《Docker多个容器和宿主机之间如何进行数据同步和数据共享?容器数据卷从介绍到常用操作图文教程》
本期目录
- 专栏精选文章
- 1. 搜索镜像
- 2. 拉取镜像
- 3. 查看镜像
- 4. 创建容器
- 1)设置Redis配置文件
- 2)创建Redis容器
- 3)检验配置文件是否生效
1. 搜索镜像
在 Docker Hub 上查找 Redis 6.2 的镜像。
2. 拉取镜像
$ docker pull redis:6.2
3. 查看镜像
$ docker images -a
4. 创建容器
1)设置Redis配置文件
创建 Redis 容器时必须加容器数据卷,Redis 容器 redis1
中的数据实时备份和同步到宿主机上,即使 Redis 容器被删除,虽然容器中的所有数据都会丢失,但宿主机上还存有备份数据,只要 Redis 容器再次创建,宿主机上的数据就能自动同步会容器中。
在宿主机上新建文件夹,用于存放 Redis 数据卷同步的数据。
$ mkdir -p /xsh/apps/redis/conf
$ mkdir -p /xsh/apps/redis/data
进入到宿主机的 /xsh/apps/redis/conf
目录下,创建一个空的 Redis 配置文件 redis.conf
。
$ cd /xsh/apps/redis/conf
$ touch redis.conf
把下面 redis.conf
文件模板内容拷贝到宿主机的空的 Redis 配置文件 redis.conf
中。Redis 6.2 的 redis.conf
官方来源 https://raw.githubusercontent.com/redis/redis/6.2/redis.conf 。
$ vim redis.conf
接下来我们需要修改这个 Redis 配置文件。
首先,在第 903 行可以设置 Redis 登录密码。笔者为了方便偷懒,因此不设置密码。
requirepass 123456
然后,在第 75 行,允许 Redis 外部连接。否则就不能远程登录 Redis 了。监听的地址,默认是127.0.0.1,会导致只能在本地访问。修改为 0.0.0.0 则可以在任意 IP 访问,生产环境不要设置为 0.0.0.0,会有安全问题
bind 0.0.0.0
然后,在第 259 行,关闭后台守护进程。否则会和 docker run 命令的 -d
冲突,导致无法后台启动容器。
daemonize no
然后,第 1254 行,开启 Redis 数据持久化,这是可选的。
appendonly yes
修改完毕,按 :wq
保存退出。
通过容器数据卷带来的数据同步,我们只需要在宿主机的 Redis 配置文件 redis.conf
中修改配置,就能自动地实时同步到 Redis 容器内的 redis.conf
,从而达到配置容器内 Redis 的目的。
2)创建Redis容器
接下来是真正创建 Redis 容器。
$ docker run -d -p 6379:6379 --privileged=true \
-v /xsh/apps/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /xsh/apps/redis/data/:/data \
--name=redis1 \
redis:6.2 \
redis-server /etc/redis/redis.conf
其中,--privileged=true
表示开启容器数据卷的权限;这次创建 Redis 中,增加了 2 个容器数据卷。
-v /xsh/apps/redis/conf/redis.conf:/etc/redis/redis.conf
表示 Redis 的配置文件与宿主机双向同步;
-v /xsh/apps/redis/data/:/data
表示 Redis 的数据与宿主机双向同步;
redis-server /etc/redis/redis.conf
表示启动 Redis 容器时,去容器内 /etc/redis/redis.conf
目录下读取 Redis 配置文件。
查看正在运行的容器。Redis 容器已经成功运行起来。
$ docker ps
3)检验配置文件是否生效
以前台交互式进入 Redis 容器 redis1
的 redis-cli 客户端中。
$ docker exec -it redis1 redis-cli
在宿主机的 Redis 配置文件 redis.conf
中,最大的数据库数量为 16 个。
因为 Redis 的索引从 0 开始,所以我们选择数据库 15 是可以的,而选择数据库 16 是非法的。
那么为了证明修改宿主机上的配置文件 redis.conf
会自动同步进 Redis 容器内并生效。我们在宿主机中,把配置文件中的最大数据库数量设置为 10 个。
$ vim /xsh/apps/redis/conf/redis.conf
databases 10
按 :wq
保存退出。
然后,重启 Redis 容器 redis1
让配置文件生效。
$ docker restart redis1
再次以前台交互式进入 Redis 容器 redis1
的 redis-cli 客户端中。
$ docker exec -it redis1 redis-cli
选择数据库 15 ,查看是否允许。
select 15
修改前是能够选择数据库 15 的 ,但现在不允许选择数据库 15 了,说明宿主机与容器内的配置文件实现了双向同步,且配置文件成功生效。
选择数据库 9 和 10 ,查看是否允许。
10 不允许选择而 9 可以选择。这也进一步说明我们在宿主机设置的最大数据库数量为 10 成功同步进 Redis 容器内并生效。