docker $PWD路径_Docker 技术系列之安装Redis单机版和集群版

ea37d53e8484bcb8e6165d446c93eec4.png

欢迎关注刘哥讲技术。上一节我们讲到通过docker安装了多台的mysql,很简单,那么我们这一节,利用 Docker 在一台机器上部署多个 Redis 实例。

f08f0240a76996d59795deeb01075b7a.png

那么redis是什么呢?Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 的 NoSQL 数据库,并提供多种语言的 API。

现在分布式缓存首选的应用,面试也基本离不开它,一起来学习学习它吧。

一、单机版本Redis

  • 1、查看可用的 Redis 版本

访问 Redis 镜像库地址:

https://hub.docker.com/_/redis

此外,我们还可以用命令来查看可用版本。

docker search redis
  • 2、取最新版的 Redis 镜像

这里我们获取官方的默认的镜像:

docker pull redis
  • 3、查看本地镜像

使用以下命令来查看是否已安装了 redis。

docker images
  • 4、运行容器

安装完成后,我们可以使用以下命令来运行 redis 容器

(1)创建挂载目录

创建一个文件夹用来存放redis的配置文件、数据等(也就是所谓的挂载目录,作用就是将此目录中的文件或文件夹覆盖掉容器内部的文件或文件夹)

mkdir -p $HOME/docker/redis

(2)进入到该目录下

cd $HOME/docker/redis

(3)启动redis容器

docker run -d -p 6379:6379 -v $PWD/redis.conf:/usr/local/etc/redis/redis.conf -v $PWD/data:/data --name myredis redis redis-server  /usr/local/etc/redis/redis.conf --appendonly yes  --requirepass "123456"

参数详解:

  • -d:表示后台运行
  • -p:表示端口映射,冒号左面的是我们的宿主机的端口,也就是我们虚拟机的端口
  • --name:给容器取的名字
  • -v:表示挂载路径。
  • redis-server --appendonly yes :在容器执行redis-server启动命令,并打开redis持久化配置
  • --requirepass 设置redis密码

(4)检测是否安装成功

最后我们可以通过 docker ps 命令查看容器的运行信息

docker ps

(5)查看容器的ip

如果没有指定容器内的ip,每次启动有可能都是会变化的。如果没有指定,那么我们可以通过以下命令来查看ip,然后登陆:

docker inspect myredis | grep IPAddress

我电脑分配的ip为:

"SecondaryIPAddresses": null,"IPAddress": "172.17.0.2","IPAddress": "172.17.0.2",

(6)测试使用redis 服务

可以通过以下连接命令进行连接。

不带密码版本,命令窗口再输入docker exec -ti myredis redis-cli -h 172.17.0.2 -p 6379 -a 123456带密码版本,不用再输入密码docker exec -ti myredis redis-cli -h 172.17.0.2 -p 6379 -a 123456

说明:

  • myredis 你设置的容器名字。
  • 默认是通过6379端口
  • 默认ip为:127.0.0.1
  • 一般需要指定获取的ip地址。

(7)测试过程

我这里先通过密码框登陆

docker exec -ti myredis redis-cli -h 172.17.0.2 -p 6379

首先获取一下值,看看是否可以使用,发现提示未认证:(error) NOAUTH Authentication required.

get myname

先输入错误的密码,进行验证,发现提示密码错误:(error) NOAUTH Authentication required.

auth 12345

我们再输入正确的密码,提示ok即可

auth 123456

再次获取值,发现redis存储为空:(nil)

get myname

对name值进行设置

set myname liuge

获取name值

get myname

我们可以通过redis desktop manager 进行连接进行查看。Redis桌面管理器(又名RDM) 是一个用于Windows,Linux和MacOS的快速开源Redis数据库管理应用程序。当然你也可以通过以下方式连接测试:RedisView、WebRedisManager、RedisDesktopManager、RedisPlus、AnotherRedisDesktopManager、FastoRedis。

eafd7681c9084ead6098084e613a17bc.png

小结:

如果你是简单实用,那么上面就能满足日常测试,学习redis命令等应用了。

但是,有时候还需要另外一台作为比较正式或者其他用,还是需要再搭建一台。

在windows那时候,我是通过修改配置文件,然后通过启动脚本,重新启动一份,比较折腾,有了docker,这个比较好解决。

如果有这个需求,可以接下来的教程。

二、多台Redis共存的情况

(1)创建挂在目录

data存放数据,conf存放配置文件。

mkdir -p $HOME/docker/redis2

(2)进入该目录

cd $HOME/docker/redis2

(3)启动redis容器

docker run -d -p 6388:6379 -v $PWD/redis.conf:/usr/local/etc/redis/redis.conf -v $PWD/data:/data --name myredis2 redis redis-server  /usr/local/etc/redis/redis.conf --appendonly yes  --requirepass "redispassword"

(4)检测是否安装成功

最后我们可以通过 docker ps 命令查看容器的运行信息

docker ps

(5)查看容器的ip

docker inspect myredis2 | grep IPAddress

目前电脑的redis的ip为

"SecondaryIPAddresses": null,"IPAddress": "172.17.0.4","IPAddress": "172.17.0.4",

(6)测试使用redis 服务

可以通过以下连接命令进行连接,myredis你设置的容器名字。

docker exec -it myredis2 redis-cli

输入密码

docker exec -it myredis2 redis-cli

三、搭建Redis集群

对于大多数中小公司来说,通常单机的Redis已经足够,最多根据不同业务分散到多台Redis。

为什么需要集群呢?

  • Redis单线程特性,多请求顺序执行,单个耗时的操作会阻塞后续的操作
  • 单机内存有限
  • 某些特殊业务,带宽压力较大
  • 单点问题,缺乏高可用性
  • 不能动态扩容
  • Redis集群的目标就是为了实现高可用性,避免性能瓶颈,可动态扩容,易于做监控告警。

那么接下来,我们看下如何进行安装。

我这里是通过一个比较快捷的方案,是一个开源的redis集群镜像来搭建。

集群是6个Redis实例,其中运行3个主节点和3个从节点,每个主节点一个从节点。它们在端口7000到7005上运行。接下来我们看看如何搭建:

镜像地址

源码
https://github.com/Grokzen/docker-redis-cluster仓库地址
https://hub.docker.com/r/grokzen/redis-cluster/

拉取镜像

docker pull grokzen/redis-cluster

通过这个镜像可以快速轻松地启动和运行Redis集群,用于演示/演示/开发。注意生产环境没经过严格验证,还不推荐直接使用。

docker run  -e "IP=0.0.0.0" -e STANDALONE=true -e SENTINEL=true -d grokzen/redis-cluster:latest

参数说明

  • -e "IP=0.0.0.0" 将内部IP环境变量添加到docker run命令中。使用此容器在Mac计算机上运行Redis集群,则需要将容器配置为使用另一个IP地址进行集群发现,因为它无法使用硬编码到容器中的默认发现IP。
  • -e SENTINEL=true 默认情况下,未启用Sentinel实例。表示启用哨兵实例。如果-e "STANDALONE=true"通过该标志,则默认情况下在端口7006和7007上运行2个独立实例。但是,您可以将此变量设置为所需的多个独立节点,例如-e "STANDALONE=1"。请注意,独立端口在最后一个从属设备之后立即启动。如果-e "SENTINEL=true"传递了该标志,则在与群集的主实例匹配的端口5000到5002上运行3个Sentinel节点。

查看容器的ip

docker inspect distracted_wing | grep IPAddress

测试

docker exec -ti distracted_wing redis-cli  -p 7000

(error) MOVED 原因和解决方案

错误:

(error) MOVED 6918 127.0.0.1:7001

这种情况一般是因为redis-cli连接redis服务时候,没有指定是集群模式连接。启动时使用-c参数来启动集群模式,命令如下:

docker exec -ti distracted_wing redis-cli -c -p 7000

查看集群信息

cluster info

查看节点信息

cluster nodes

83e1c4107017872ca5d82f6c44fff3fe.png

后面有时间再分享,如何通过redis源码自己构建一个docker redis 集群镜像。

Souvc:Docker 技术系列之安装多版本Mysql5.6和Mysql5.7​zhuanlan.zhihu.com
23665fda9cae209c681cd119fd52ff60.png
Souvc:Docker 技术系列之安装Docker Desktop for Mac​zhuanlan.zhihu.com
634bd566777af6e7cea62e95859e2ad9.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472598.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 1191. K 次串联后最大子数组之和(前缀和+分类讨论)

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 arr 和一个整数 k。 首先,我们要对该数组进行修改,即把原数组 arr 重复 k 次。 举个例子,如果 arr [1, 2] 且 k 3,那么修改后的数组就是 [1, 2, 1, 2, 1, 2]。 然后&#x…

sql 拆分_实践参考:MySQL架构设计从开发规范、选型、拆分到减压实战指南

导引作者,李辉,原新浪爱彩票运维负责人,常用网名:门牙没了。曾主导新浪爱彩票的MySQL运维工作。培训合伙人、资深讲师,中国科学院大学在读研究生(大数据方向),擅长大型项目的关系型数据库运维和管理&#x…

PowerBuilder调用.Net编译好的DLL

[ComVisible(true)][ClassInterface(ClassInterfaceType.AutoDual)][ProgId("HelloWorld.MyClass")] //类名public class MyClass{public string UserName { get; set; } //对外提供属性public string SayHello(string content) //对外提供方法{return "用户:&q…

python中流程图_python用graphviz画流程图

问题描述 项目中需要用到流程图,如果用js的echarts处理,不同层级建动态计算位置比较复杂,考虑用python来实现 测试demo实现效果如下完整代码 import yaml import os import ibm_db from graphviz import Digraph from datetime import dateti…

天池 在线编程 牛郎织女(广度优先搜索)

文章目录1. 题目2. 解题1. 题目 描述 又到了七夕节,牛郎织女相约一起去一个n*m大小的迷宫maze里玩耍。 然而没过多久,他们就倒霉地走散了。 现在给定由.,*,S,T组成的矩阵maze, 其中.表示空地,*表示障碍物,S表示牛郎的位置 ,T表示织女的位置&…

BZOJ 1001 狼捉兔子

Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: 左上角点…

可视化工具Navicat for MySQL-操作三

五、备份和还原MySQL数据库 在数据库的管理中,备份和还原是必须做认真做的事情,如果疏忽或者做粗糙了,那么一旦数据库故障后果不堪设想,所以Navicat同样也有备份和还原的功能,相比较创建功能,其备份功能则…

如何在python中打开文件_Python文件处理:创建、打开、追加、读、写

在Python中,不需要导入外部库来读取和写入文件。Python为创建、写入和读取文件提供了内置的函数。 在本文中,我们将学习 如何创建文本文件 如何将数据附加到文件中 如何读取文件 如何逐行读取文件 Python中的文件模式 如何创建文本文件 使用Python&#…

天池 在线编程 排名查询

文章目录1. 题目2. 解题1. 题目 描述 给一个二维数组scores表示每个学生的各科成绩&#xff0c;求出学生中总成绩排名第K的索引。 如果成绩一样&#xff0c;越早出现的排名越高。 0 < scores[i][j] < 100 示例&#xff1a; 输入: scores: [[90, 80, 70], [90, 90, 90],…

matlab处理亮度不均匀,校正亮度不均匀问题并分析前景对象

预处理图像将图像读入工作区。I imread(rice.png);imshow(I)图像中心的背景亮度比底部亮度高。预处理图像&#xff0c;使背景亮度更加均匀。第一步&#xff0c;使用形态学开运算删除所有前景(米粒)。开运算会删除无法完全包含结构元素的小对象。定义半径为 15 的盘形结构元素&…

LeetCode 1797. 设计一个验证系统(map)

文章目录1. 题目2. 解题1. 题目 你需要设计一个包含验证码的验证系统。 每一次验证中&#xff0c;用户会收到一个新的验证码&#xff0c;这个验证码在 currentTime 时刻之后 timeToLive 秒过期。 如果验证码被更新了&#xff0c;那么它会在 currentTime &#xff08;可能与之前…

git add remote_使用git管理嵌入式软件版本

点击上方蓝字关注我哦&#xff5e;你现在的Keil工程的版本控制是怎么管理的&#xff1f;可能有些人的做法是发布一个版本软件后将代码打一个包保存起来&#xff0c;作为此版本的备份。有一种常见的情况&#xff0c;当开始一项新功能的开发&#xff0c;并且最终的效果不理想老板…

xshell 6 连接debian系统拒绝了密码_Xshell中操作Linux的常用命令,你知道几个?

作为IT人员&#xff0c;想必都知道Linux是一套免费使用和自由传播的类Unix操作系统&#xff0c;是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Xshell作为专业的终端模拟器&#xff0c;可以用来登录Linux&#xff0c;从而通过命令来控制Linux系统&…

LeetCode 1798. 你能构造出连续值的最大数目

文章目录1. 题目2. 解题1. 题目 给你一个长度为 n 的整数数组 coins &#xff0c;它代表你拥有的 n 个硬币。 第 i 个硬币的值为 coins[i] 。如果你从这些硬币中选出一部分硬币&#xff0c;它们的和为 x &#xff0c;那么称&#xff0c;你可以 构造 出 x 。 请返回从 0 开始&…

分别用邻接矩阵和邻接表实现图的深度优先遍历和广度优先遍历_数据结构与算法学习笔记:图...

图&#xff1a;图结构区别于线性结构和树型结构&#xff0c;区别可见下图逻辑上的图(graph)结构由顶点(vertex)和边(edge)组成。一个图结构G包含顶点集合V和边集合E&#xff0c;任何两个顶点之间可以有一个边表示两者的关系。对于一个存在的G&#xff0c;V不可以为空集&#xf…

人类附身机器人获得永生_脑机接口先驱尼古莱利斯:人类无法实现数字永生

科幻作品中的意念控制、心灵感应&#xff0c;甚至数字“永生”&#xff0c;会通过脑机接口技术得以实现吗&#xff1f;脑机接口技术先驱者之一、杜克大学神经工程学教授米格尔尼古莱利斯(Miguel Nicolelis)表示&#xff0c;不可能。近日&#xff0c;尼古莱利斯在巴西家中与北京…

linux内核分成如下五个子系统,linux内核主要由5个子系统 Linux内核由哪几个子系统组成?...

1, Linux内核由哪几个子系统组成&#xff1f;Linux内核主要由五个子系统组成&#xff1a;进程调度&#xff0c;内存管理&#xff0c;虚拟文件系统&#xff0c;网络接口&#xff0c;进程间通信。1.进程调度(SCHED)&#xff1a;控制进程对CPU的访问。当需要选择下一个进程运行时&…

LeetCode 1799. N 次操作后的最大分数和(回溯 / 状态压缩DP)

文章目录1. 题目2. 解题2.1 错误解2.2 回溯超时解2.3 回溯通过2.4 状态压缩DP1. 题目 给你 nums &#xff0c;它是一个大小为 2 * n 的正整数数组。 你必须对这个数组执行 n 次操作。 在第 i 次操作时&#xff08;操作编号从 1 开始&#xff09;&#xff0c;你需要&#xff1…

pytorch argmax_轻松学Pytorch使用ResNet50实现图像分类

点击上方蓝字关注我们微信公众号&#xff1a;OpenCV学堂关注获取更多计算机视觉与深度学习知识Hello大家好&#xff0c;这篇文章给大家详细介绍一下pytorch中最重要的组件torchvision&#xff0c;它包含了常见的数据集、模型架构与预训练模型权重文件、常见图像变换、计算机视觉…

LeetCode 1800. 最大升序子数组和

文章目录1. 题目2. 解题1. 题目 给你一个正整数组成的数组 nums &#xff0c;返回 nums 中一个 升序 子数组的最大可能元素和。 子数组是数组中的一个连续数字序列。 已知子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;若对所有 i&#xff08;l < i < r&a…