侧边栏壁纸
博主头像
孔子说JAVA博主等级

成功只是一只沦落在鸡窝里的鹰,成功永远属于自信且有毅力的人!

  • 累计撰写 292 篇文章
  • 累计创建 132 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

Docker教程-4-Redis容器的安装配置使用

孔子说JAVA
2021-10-16 / 0 评论 / 0 点赞 / 138 阅读 / 7,400 字 / 正在检测是否收录...

1、环境检查

首先检查服务器是否安装了Docker服务,通过docker -vdocker info 命令查看docker版本等相关信息,若不识别docker命令表示未安装Docker服务。

image-1648995383222

2、查看可用的 Redis 版本

访问 Redis 镜像库地址:https://hub.docker.com/_/redis?tab=tags 。可以通过 Sort by 查看其他版本的 Redis,默认是最新版本 redis:latest 。通过Filter Tags搜索特定版本。

image-1648995423766

  • 还可通过docker search redis 查找Docker Hub或其他Docker仓库中的redis可用版本镜像。

image-1648995430308

3、下载所需版本的Redis镜像

1)下载 redis 6.2.6 版本镜像

# 下载redis 6.2.6版本镜像
docker pull redis:6.2.6
 
# 不带版本号默认下载最新版本
docker pull redis

image-1648995455067

2)查看是否已下载 redis 6.2.6 版本镜像文件

docker images 查看系统中的镜像文件是否包含刚下载的redis镜像,可以看到redis 6.2.6版本已经下载到本地。

image-1648995466610

4、挂载目录/数据卷方式创建数据目录和Redis配置文件

启动Redis容器和其他容器有点区别, Redis启动时是没有默认配置文件的,是因为Redis本身容器只存在 /etc/redis 目录 , 本身就不创建 redis.conf 文件,当服务器和容器都不存在 redis.conf 文件时, 执行启动命令的时候 docker 会将 redis.conf 作为目录创建 , 这并不是我们想要的结果,我们需要在启动时设置一条额外的启动命令,让Redis加载指定的配置文件启动,所以我们要提前在宿主机创建好这个配置文件并映射到容器中。

4.1 挂载目录方式:创建数据目录和配置文件

1)创建数据目录及配置文件目录

在 /usr/local/docker 目录下创建 redis/redis6-1 目录,命令:mkdir -p redis/redis6-1,redis6-1表示该目录存储redis6版本的一份配置,若搭建多个redis服务,可以增加redis6-2的配置。

image-1648995528577

在 /usr/local/docker/redis/redis6-1/目录下创建data目录和conf目录,其中data目录用于存储redis的数据,conf目录用于存储配置文件,使用命令:mkdir data 和 mkdir conf 创建目录。

image-1648995535902

2)创建配置文件 redis.conf(也可以从已有的redis安装目录上拷贝一份)

在 /usr/local/docker/redis/redis6-1/conf 目录下创建配置文件redis.conf,也可以从已有的redis安装目录上拷贝一份。

# 创建配置文件
touch redis.conf

# 编辑配置文件并填入以下内容保存
vim redis.conf

配置文件内容

# 端口
port 6379
# RDB相关配置
save 900 1
save 300 10
save 60 10000
rdbcompression yes
# 数据目录
dir /data
# AOF相关配置
appendonly yes
appendfsync everysec
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 密码
requirepass 111111

image-1648995602587

4.2 数据卷方式:创建数据目录和配置文件的数据卷

1)创建数据目录及redis配置文件对应的数据卷

在宿主机创建数据目录对应的数据卷redis6-data,创建redis配置文件对应的数据卷redis6-conf。

#在宿主机创建数据目录对应的数据卷redis6-data
docker volume create redis6-data

# 创建redis配置文件对应的数据卷redis6-conf
docker volume create redis6-conf

# 查看所有数据卷列表
docker volume ls

image-1648995638248

2)在数据卷目录下创建配置文件 redis.conf

在数据卷的实际存储目录 /var/lib/docker/volumes/redis6-conf/_data/ 下创建1个空的redis配置文件redis.conf。

  • 可使用命令 docker volume inspect redis6-data 查看 redis6-data 数据卷的信息(包含实际存储目录)
# 在数据卷目录下创建redis配置文件
touch /var/lib/docker/volumes/redis6-conf/_data/redis.conf

# 查看数据卷目录下是否有redis配置文件
ls /var/lib/docker/volumes/redis6-conf/_data/

image-1648995670676

3)编辑配置文件 redis.conf 并保存

# 编辑数据卷目录下的redis配置文件并保存
vim /var/lib/docker/volumes/redis6-conf/_data/redis.conf

配置文件内容

# 端口
port 6379
# RDB相关配置
save 900 1
save 300 10
save 60 10000
rdbcompression yes
# 数据目录
dir /data
# AOF相关配置
appendonly yes
appendfsync everysec
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 密码
requirepass 111111

image-1648995708922

4.3 配置文件说明

  • appendonly yes         启动Redis持久化功能 (默认 no , 所有信息都存储在内存 [重启丢失] 。 设置为 yes , 将存储在硬盘 [重启还在])
  • protected-mode no    关闭protected-mode模式,此时外部网络可以直接访问 (docker貌似自动开启了)
  • bind 0.0.0.0               设置所有IP都可以访问 (docker貌似自动开启了)
  • requirepass 密码       设置密码

5、创建 Redis 单机版容器

5.1 挂载本地目录方式创建 redis 单机版容器

1)创建容器

使用4.1挂载目录方式创建的数据目录和配置文件路径挂载容器的对应配置。

docker run -it -p 6379:6379  \
--name redis6-1 \
--privileged=true \
--restart=always \
-v /usr/local/docker/redis/redis6-1/conf/redis.conf:/etc/redis/redis.conf \
-v /usr/local/docker/redis/redis6-1/data:/data \
-v /etc/localtime:/etc/localtime \
-e TZ="Asia/Shanghai" \
-d redis:6.2.6 redis-server /etc/redis/redis.conf
  • –name  指定容器的名称为redis6-1
  • –privileged=true  挂载文件权限设置,使容器内root拥有真正的root权限
  • –restart=always 设置随服务启动而启动容器
  • -p  将容器内的6379端口与本地6379接口映射,前者是本地访问端口,后者是容器内部端口
  • -v 挂载宿主目录到容器目录,格式为:主机(宿主)目录:容器目录
  • -v /usr/local/docker/redis/redis6-1/conf/redis.conf:/etc/redis/redis.conf \  挂载redis配置文件
  • -v /usr/local/docker/redis/redis6-1/data:/data  \   挂载数据目录
  • -v /etc/localtime:/etc/localtime    容器时间与宿主机同步
  • -e  添加了一个环境变量TZ,指定容器时区,不指定的话mysql的时间函数执行结果会不正确
  • -d  后台运行容器,并返回容器ID
  • redis:6.2.6,运行指定的镜像创建容器
  • redis-server /etc/redis/redis.conf  表示以配置文件的方式启动,若不加这一句密码无效
  • 对于已经运行但没设置随docker服务的启动而启动容器的可以执行命令 docker update –restart=always 容器名

如果创建容器启动的时候不以配置文件的方式启动的话,那么配置文件里面的密码是不生效的, 也就是没有密码,这时可以加上参数 --requirepass 你的密码,但是这个密码好像是没法更改的,只是用这一个容器,下次创建redis容器时还要设置密码。当我们没有配置文件 也不挂载数据和配置文件的时候也可以直接在创建启动redis容器的时候加上 --requirepass 你的密码,也是有密码生效的,仅限该容器。

docker run --name redis01 -p 6379:6379 -v /usr/local/docker/data1:/data 
		-v /usr/local/docker/redis1.conf:/etc/redis/redis.conf 
		-d redis:6.2.6 --requirepass 123456

–restart=always参数能够使我们在重启docker时,自动启动相关容器。Docker容器的重启策略如下:

  • no,默认策略,在容器退出时不重启容器
  • on-failure,在容器非正常退出时(退出状态非0),才会重启容器
  • on-failure:3,在容器非正常退出时重启容器,最多重启3次
  • always,在容器退出时总是重启容器
  • unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

2)查看容器是否创建成功

通过docker ps 或 docker ps -al 命令可以查看到redis6-1容器已启动成功。

image-1648995936497

3)创建第二个容器

docker run -it -p 6380:6379  \
--name redis6-2 \
--privileged=true \
--restart=always \
-v /usr/local/docker/redis/redis6-2/conf/redis.conf:/etc/redis/redis.conf \
-v /usr/local/docker/redis/redis6-2/data:/data \
-v /etc/localtime:/etc/localtime \
-e TZ="Asia/Shanghai" \
-d redis:6.2.6 redis-server /etc/redis/redis.conf

与第一个容器不同的地方有3点:

  • 1是映射到本地宿主机的访问端口(6380)不同。
  • 2是容器名称不同(redis6-2)。
  • 3是挂载的本地宿主机的数据目录及配置目录不同。

4)重启redis容器

docker restart redis6-1

image-1648995982361

5.2 挂载数据卷方式创建 redis 单机版容器

使用4.2挂载数据卷方式创建的数据目录和配置文件的数据卷。

1)查看数据卷信息

# 查看所有数据卷
docker volume ls
 
# 查看指定 数据卷 的信息
docker volume inspect redis6-data
 
# 删除数据卷
docker volume rm 卷名1 卷名2 … 删除一个或者多个数据卷
docker volume prune 删除所有未被使用的数据卷

# 如果不再使用自定义数据卷了,那么可以手动清理掉:
docker stop 容器名或容器id// 暂停容器实例
docker rm 容器名或容器id // 移除容器实例
docker volume rm 卷名1 卷名2 … // 删除自定义数据卷

2)数据卷的挂载

我们在创建容器的时候要想好容器的哪些目录需要挂载数据卷!在创建容器时使用 --volume/-v或–mount 选项就可以挂载数据卷了。

方式一:使用-v创建自volume名称的容器: 若volume没有则自动创建

docker run -it -p 6380:6379  \
--name redis6-2 \
--privileged=true \
--restart=always \
-v redis6-conf:/etc/redis/redis.conf \
-v redis6-data:/data \
-v /etc/localtime:/etc/localtime \
-e TZ="Asia/Shanghai" \
-d redis:6.2.6 redis-server /etc/redis/redis.conf

查看容器是否创建成功

通过docker ps 或 docker ps -al 命令可以查看到redis6-2容器已创建并启动成功。

image-1648996046463

方式二:使用–mount创建自volume名称的容器: :若volume没有创建失败

参数–mount默认情况下用来挂载volume,但也可以用来创建bind mount和tmpfs。如果不指定type选项,则默认为挂载volume,volume是一种更为灵活的数据管理方式,volume可以通过docker volume命令集被管理。

docker run -it -p 6380:6379  \
--name redis6-2 \
--privileged=true \
--restart=always \
--mount source=redis6-conf, destination=/etc/redis/redis.conf,readonly \
--mount source=redis6-data, destination=/data \
-v /etc/localtime:/etc/localtime \
-e TZ="Asia/Shanghai" \
-d redis:6.2.6 redis-server /etc/redis/redis.conf
  • 挂载volume命令格式:[type=volume,]source=my-volume,destination=/path/in/container[,…]
  • 创建bind mount命令格式:type=bind,source=/path/on/host,destination=/path/in/container[,…]
  • 如果创建bind mount并指定source,则必须是绝对路径,且路径必须已经存在
  • 示例中readonly表示只读

image-1648996091047

6、Redis 单机版容器测试

6.1 进入redis容器及redis控制台

### 通过 Docker 命令进入 Redis 容器内部
# redis6-1 是容器名称,也可以用容器id指定
docker exec -it redis6-1 /bin/bash
docker exec -it redis6-1 bash

### 进入 Redis 控制台
redis-cli

### 通过密码进入Redis控制台
redis-cli -h 127.0.0.1 -p 6379 -a 123456

### 或者也可以直接通过Docker Redis 命令进入Redis控制台 (上面两个命令的结合)
docker exec -it redis6-1 redis-cli

image-1648996129935

6.2 容器内命令行测试

### 添加一个变量为 key 为 name , value 为 bella 的内容
> set name bella
### 查看 key 为 name 的 value 值
> get name

image-1648996169354

6.3 查看指定容器的log

# 查看指定容器的日志:docker logs -f 容器id或容器名称
docker logs redis6-1
docker logs -f redis6-1

image-1648996191628

6.4 redisclient工具测试

管理redis的可视化客户端目前较流行的有三个:Redis Client ; Redis Desktop Manager ; Redis Studio.

image-1648996231556

Redis可视化工具 Redis Client 下载

Redis可视化工具 Redis Desktop Manager 下载

Redis可视化工具 Redis Studio 下载

7、基本docker命令列表

docker build -t friendlyname .# 使用此目录的 Dockerfile 创建镜像
docker run -p 4000:80 friendlyname  # 运行端口 4000 到 90 的“友好名称”映射
docker run -d -p 4000:80 friendlyname         # 内容相同,但在分离模式下
docker ps                                 # 查看所有正在运行的容器的列表
docker stop <hash>                     # 平稳地停止指定的容器
docker ps -a           # 查看所有容器的列表,甚至包含未运行的容器
docker kill <hash>                   # 强制关闭指定的容器
docker rm <hash>              # 从此机器中删除指定的容器
docker rm $(docker ps -a -q)           # 从此机器中删除所有容器
docker images -a                               # 显示此机器上的所有镜像
docker rmi <imagename>            # 从此机器中删除指定的镜像
docker rmi $(docker images -q)             # 从此机器中删除所有镜像
docker login             # 使用您的 Docker 凭证登录此 CLI 会话
docker tag <image> username/repository:tag  # 标记 <image> 以上传到镜像库
docker push username/repository:tag            # 将已标记的镜像上传到镜像库
docker run username/repository:tag                   # 运行镜像库中的镜像
0

评论区