• Docker创建redis容器


    Docker运行Redis

    一:Docker安装Redis

    docker search redis
    
    • 1

    二:Docker拉取镜像

    下面两个命令看自己的需求

    docker pull <镜像名称><版本号> #需要自己清楚自己需要什么般本的redis
    
    docker pull redis  #这个命令会自动下载最新版本的redis 省事 推荐
    
    • 1
    • 2
    • 3

    三:Docker挂载配置文件

    接下来就是将redis到的配置文件进行挂载,以配置文件方式启动redis容器。(挂载:即将宿主的文件和容器内部目录相关联,相互绑定,在宿主机内修改文件的话也随之修改容器内部文件)
    1)、挂载redis的配置文件
    2)、挂载redis的持久化文件
    因为 redis 默认配置你会发现只能够本地连接,不能进行远程访问,使用 Redis Desktop Manager连接都会报错,因此需要手动挂载 redis 配置文件
    新建data和conf两个文件夹,位置随意。但要记住自己创建的位置

    mkdir -p /home/redis/data
    mkdir -p /root/docker/redis/conf
    
    
    • 1
    • 2
    • 3

    四:增加配置文件redis.conf

    在刚才新建的/root/docker/redis/conf中新建文件redis.conf,内容如下:

    bind 0.0.0.0		# 只允许来自bind指定网卡的Redis请求。如没有指定,则可以接受来自任意一个网卡的Redis请求
    protected-mode no
    port 6379				#redis的默认端口号
    tcp-backlog 511
    timeout 0				# 连接超时时间,单位秒;超过timeout,服务端会断开连接,为0则服务端不会主动断开连接,不能小于0
    
    # tcp keepalive参数。如果设置不为0,就使用配置tcp的SO_KEEPALIVE值
    # 使用keepalive有两个好处:
    #  1) 检测挂掉的对端。降低中间设备出问题而导致网络看似连接却已经与对端端口的问题。
    #  2) 在Linux内核中,设置了keepalive,redis会定时给对端发送ack。检测到对端关闭需两倍的设置值
    tcp-keepalive 0
    loglevel notice	#日志文件的等级
    logfile ""			#日志文件的位置 这里没有配置
    databases 16		#redis默认的数据库是16个
    
    # 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
    # 注释掉“save”这一行配置项就可以让保存数据库功能失效
    # 900秒(15分钟)内至少1个key值改变(则进行数据库保存--持久化) 
    # 300秒(5分钟)内至少10个key值改变(则进行数据库保存--持久化) 
    # 60秒(1分钟)内至少10000个key值改变(则进行数据库保存--持久化)
    save 900 1
    save 300 10
    save 60 10000
    
    # 当RDB持久化出现错误后,是否依然进行继续进行工作,yes:不能进行工作,no:可以继续进行工作
    stop-writes-on-bgsave-error yes
    
    # 指定存储至本地数据库时是否压缩数据,耗cpu资源,默认为yes,Redis采用LZF压缩
    # 如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大
    rdbcompression yes
    
    # 保存rdb文件时,是否进行错误检查校验。
    # 从rdb格式的第五个版本开始,在rdb文件的末尾会带上CRC64的校验和。这跟有利于文件的容错性
    # 但是在保存rdb文件的时候,会有大概10%的性能损耗,如果你追求高性能,可以关闭该配置。
    rdbchecksum yes
    dbfilename dump.rdb
    dir ./	 	# 数据目录,数据库的写入会在这个目录。rdb、aof文件也会写在这个目录							
    slave-serve-stale-data yes
    slave-read-only yes
    repl-diskless-sync no
    repl-diskless-sync-delay 5
    repl-disable-tcp-nodelay no
    slave-priority 100
    
    # AOF持久化,指定是否在每次更新操作后进行日志记录,默认redis是异步(快照)的把数据写入本地磁盘
    # redis默认使用的是rdb方式持久化,此方式在许多应用中已足够用。
    # 但redis如果中途宕机,会导致可能有几分钟的数据丢失,按照上面save条件来策略进行持久化
    # Append Only File是另一种持久化方式,可提供更好的持久化特性。
    # Redis会把每次写入的数据在接收后都写入appendonly.aof 文件
    # 每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。
    appendonly yes
    appendfilename "appendonly.aof"  #指定文件名称
    appendfsync everysec   #AOF的三种持久化方式 no:不同步,always:每次数据变化写入,everysec:每秒中写入
    no-appendfsync-on-rewrite no
    auto-aof-rewrite-percentage 100	
    auto-aof-rewrite-min-size 64mb
    aof-load-truncated yes
    lua-time-limit 5000
    slowlog-log-slower-than 10000		# slog log是用来记录redis运行中执行比较慢的命令耗时。
    slowlog-max-len 128
    latency-monitor-threshold 0
    notify-keyspace-events ""
    
    hash-max-ziplist-entries 512		# 哈希表中元素(条目)总个数<=512个,采用ziplist,否则使用hash
    hash-max-ziplist-value 64				# 哈希表中每个value的长度<=64字节时,采用ziplist,否则使用hash
    list-max-ziplist-size -2
    list-max-ziplist-entries 512		# list元素<=512个,采用ziplist,否则用linkedlist
    list-max-ziplist-value 64				# list内某个元素大小<=64字节时,采用ziplist,否则用linkedlist
    list-compress-depth 0
    set-max-intset-entries 512			# set内元素数量<=512个,且都是整数型值,采用inset,否则使用hashtable
    zset-max-ziplist-entries 128		# zset内元素数量<=128个,采用ziplist,否则用skiplist跳表
    zset-max-ziplist-value 64				# zset内某个元素大小<=64字节时,采用ziplist,否则用skiplist跳表
    hll-sparse-max-bytes 3000
    
    # Redis将在每100毫秒时使用1毫秒的CPU时间来对redis的hash表进行重新hash,可以降低内存的使用。
    # 当你的使用场景中,有非常严格的实时性需要,不能够接受Redis时不时的对请求有2毫秒的延迟的话
    # 把这项配置为no。如果没有这么严格的实时性要求,可以设置为yes,以便能够尽可能快的释放内存。
    # 指定是否激活重置哈希,默认为开启
    activerehashing yes
    
    client-output-buffer-limit normal 0 0 0		# 对客户端输出缓冲进行限制,可以强迫那些不从服务器读取数据的客户端断开连接
    
    # 对于slave client和 MONITER client,如果client-output-buffer一旦超过256mb
    # 又或者超过64mb持续60秒,那么服务器就会立即断开客户端连接。
    client-output-buffer-limit slave 256mb 64mb 60
    
    # 对于pubsub client,如果client-output-buffer一旦超过32mb,又或者超过8mb持续60秒,
    # 那么服务器就会立即断开客户端连接。
    client-output-buffer-limit pubsub 32mb 8mb 60
    
    # redis执行任务的频率为1s除以hz。
    hz 10
    
    # 在AOF重写时,如果打开了aof-rewrite-incremental-fsync开关,系统会每32MB执行一次fsync。
    # 这对于把文件写入磁盘是有帮助的,可以避免过大的延迟峰值。
    aof-rewrite-incremental-fsync yes 
    
    requirepass 123456  ##设置密码 123456  可以更改
    
    #这几个逼不能随便用,这样配置是把这几个家伙禁用了
    rename-command FLUSHALL ""
    rename-command FLUSHDB  ""
    rename-command CONFIG   ""
    rename-command KEYS     ""
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104

    五:创建容器并启动

    注意路径,一定要注意路径

    docker run --name redis -p 8081:8081 
    						-v /root/docker/redis/data:/data 
          			-v /root/docker/redis/conf/redis.conf:/etc/redis/redis.conf 
             		-d redis redis-server /etc/redis/redis.conf  
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    –name:给容器起一个名
    -p:端口映射 宿主机:容器
    -v:挂载自定义配置 自定义配置:容器内部配置
    -d:后台运行 redis-server --appendonly yes: 在容器执行redis-server启动命令,并打开redis持久化配置
    查看是否启动成功 docker -ps

    2023年11月16号 补记

    1、为了保险,我们一般通常会给redis设置密码。之前的服务一直没有密码的。设置密码后登陆的方式和命令有一点不一样(配置文件已经修改过了,不用担心)

    [root@VM-4-12-centos conf]# docker exec -it 8bf3 /bin/bash
    root@8bf3152fd931:/data# redis-cli -h 106.54.224.114 -p 6379
    
    
    • 1
    • 2
    • 3

    2、第二点 我的数据会被清空缓存,但数据并没有保存下来,所以我在配置文件下面添加了两行禁止flush的指令

    rename-command FLUSHALL ""
    rename-command FLUSHDB  ""
    rename-command CONFIG   ""
    rename-command KEYS     ""
    
    • 1
    • 2
    • 3
    • 4

    注意 完成上面的指令要重启容器才能生效
    启动客户端

    [root@VM-4-12-centos /]# docker exec -it 7d92cf78dff1 /bin/bash
    root@7d92cf78dff1:/data# redis-cli -h 106.54.224.114 -p 6379 -a 123456 2>/dev/null
    127.0.0.1:6379> 
    
    • 1
    • 2
    • 3

    -a 后跟的密码

    六:容器内部连接进行测试

    sudo docker exec -it 757225638cab /bin/bash

    docker exec -it redis redis-cli				# 这里的redis是容器名称  也可以是容器id
    
    • 1

    进入容器后 可以测试一下密码

    127.0.0.1:6379> auth 123456
    OK
    
    
    • 1
    • 2
    • 3

    6.尝试进行删除redis容器
    1.查看所有在运行的容器:

    docker PS -a
    
    • 1

    2.停止运行Redis。停止命令

    docker stop <容器ID或名称>
    
    • 1

    curl localhost:5000
    curl: (7) Failed connect to localhost:5000; Connection refused

    七:进行外部redis的连接

    RedisInsight 这是redis官方推荐的 也是免费使用的
    下载链接:https://redis.io/docs/connect/insight/
    双击打开 点击
    image.png
    会出现下面的弹窗,输入对应的服务器地址、端口号、用户名和密码,先进行测试链接, 成功后,然后再点击 Add Redis Database
    image.png

  • 相关阅读:
    使用JavaStream将List转为Map
    WPF实现右键菜单
    给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。
    HCIP-综合实验 知识覆盖全面 建议收藏
    C语言详解系列——操作符详解
    新服务器 CentOS 8.2 上安装 nginx 1.22 全过程
    Ubuntu出现无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend),是否有其他进程正占用它?
    《C++ primer plus》第10章:对象和类(1)
    9.06 Day47---Element UI局部组件库的使用
    卫浴服务信息展示预约小程序的作用如何
  • 原文地址:https://blog.csdn.net/weixin_43491259/article/details/138185176