一。工具介绍

1.1 什么是Docker?

Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目。使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。

但Docker和传统容器有一定区别,如下图:

1.2 什么是Redis?

Redis是一个开源的高性能的key-value存储系统。

传送门

Redis特点:

  • 1、Redis支持数据的持久化,可以以AOFRDB的形式将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
  • 2、Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,sorted set,hash等数据结构的存储。
  • 3、Redis支持数据的备份,即master-slave模式的数据备份。

Redis优势:

  • 1、性能极高 – Redis能读的速度是110000次/s, 写的速度是81000次/s 。
  • 2、丰富的数据类型 – Redis支持二进制案例的 String, List, Hash, Set 及 Sorted Set 数据类型操作。
  • 3、原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
  • 4、丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性

二。按部就班(安装使用)

2.1 镜像的选择和下载

2.1.1 查找Docker Hub 的Redis镜像

runoob@runoob:~/redis$ docker search redis
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
redis Redis is an open source ... 2321 [OK]
sameersbn/redis 32 [OK]
torusware/speedus-redis Always updated official ... 29 [OK]
bitnami/redis Bitnami Redis Docker Image 22 [OK]
anapsix/redis 11MB Redis server image ... 6 [OK]
webhippie/redis Docker images for redis 4 [OK]
clue/redis-benchmark A minimal docker image t... 3 [OK]
williamyeh/redis Redis image for Docker 3 [OK]
unblibraries/redis Leverages phusion/baseim... 2 [OK]
greytip/redis redis 3.0.3 1 [OK]
servivum/redis Redis Docker Image 1 [OK]

2.1.2 拉去镜像

这里我们拉取官方的镜像, 使用默认的版本标签latest.

runoob@runoob:~/redis$ docker pull redis

2.1.3 查看镜像

runoob@runoob:~/redis$ docker images

2.2 镜像的启动

2.2.1 方法1:直接启动

runoob@runoob:~/redis$ docker run --name clock-redis -p 6379:6379 -v $PWD/data:/data  -d redis redis-server --appendonly yes
43f7a65ec7f8bd64eb1c5d82bc4fb60e5eb31915979c4e7821759aac3b62f330

参数解读:

  • --name clock-redis 启动的容器名字
  • run docker命令, 运行一个image
  • -p 知道映射端口
  • 6379:6379 前面的6379表示映射到宿主机的端口,后面的端口表示Docker容器内,Redis监听的端口
  • -v 指定变量,本次为指定redis的一个文件夹映射
  • $PWD/data:/data 将容器内的/data文件夹映射到宿主机的$PWD/data
  • -d redis 指定启动的镜像
  • redis-server --appendonly yes 随容器启动时,容器内执行的命令,本次为启动Redis服务,并且开启AOF持久化
  • 43f7a65ec7f8bd64···· 执行后的返回值,启动成功后的container ID

三。略有不足

端口固定

这里需要注意,在本人旻天Clock使用官方的Redis容器时,还有一个Bug,就是映射到宿主机的外部端口必须也是6379,才可以通过连接宿主连接到Redis上, 不知道现在修复了没有。

解决办法

第一次遇到这个问题, 我的解决思路很暴力, 就是换了一个镜像。

因此我选择了使用次数仅次于(在2018.11.11)官方的一个镜像bitnami/redis, 获取方法大同小异,启动方式,这会我选择了使用Compose.yml启动:

version: '3'

services:
redis:
image: 'bitnami/redis:latest'
environment:
- ALLOW_EMPTY_PASSWORD=yes
ports:
- '6378:6379'
volumes:
- /path/to/redis-persistence:/bitnami/redis/data

注意, Compose.yml文件不能有tab制表符,只能用space空格代替。

启动命令:

runoob@runoob:~/redis$ docker stack deploy -c Compose.yml pharbers

其中pharbers为启动的服务前缀,此时查看服务,如下:

runoob@runoob:~/redis$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
agk34y1fixyb pharbers_apm replicated 1/1 clockq/pharbers-apm:latest *:18002->9000/tcp
rkno8e48wlad pharbers_redis replicated 1/1 clockq/redis:latest *:6378->6379/tcp

四。只要思想不滑坡, 方法总比困难多

本来已经可以爽爽的使用Redis了,可惜有一天,我发现Redis里面的数据空了, 并且被人插入了几条看着很陌生的数据,不用想,肯定被黑了。

这里有几点方法, 可以大大减少被黑的几率

4.1 修改外部端口

这个在上面已经说过了, 不咋赘述。

4.2 设置连接密码

我们继续使用bitnami/redis镜像, 在启动的Compose.yml文件中, 加入

environment:
- REDIS_PASSWORD=password123

4.3 禁用管理命令

同样, 我们在Compose.yml文件中加入:

environment:
- DISABLE_COMMANDS=FLUSHDB,FLUSHALL,CONFIG

4.4 上面的都不好使

理论上吧,上面的每一步,都是很简单的,只要改写启动的Compose.yml启动文件就行了。但是不排除有人和旻天Clock一样的脸黑,以上命令设置后,无法启动Redis镜像,还有人可能不放心别人打包的镜像, 或者想要使用redis自己的配置文件redis.conf

所以, 我们就需要打包一个自己的redis镜像, 步骤如下:

  1. 编写redis.conf

    找到一份redis.conf配置文件,并且加入自己的自定义配置,其中包括禁用命令,如下:
rename-command CONFIG ""
rename-command FLUSHALL ""
rename-command FLUSHDB ""
  1. 生成镜像

    编写一个Dockerfile文件,里面内容如下:
FROM redis
COPY redis.conf /usr/local/etc/redis/redis.conf
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]

注意,要将redis.confDockerfile放到同一目录

运行命令生成镜像

runoob@runoob:~/redis$ docker build -t redis:pharbers .
  1. 启动镜像

    使用Compose.yml启动,内容如下:
version: '3'

redis:
image: redis:pharbers
ports:
- "6378:6379"
volumes:
- /root/redis_data/redis.conf:/usr/local/etc/redis/redis.conf
- /root/redis_data:/data

原文地址https://www.cnblogs.com/clockq/p/9946513.html

至此, 本人会的Docker+Redis就交代完了,各位观众赏脸,可以留言讨论一下, 谢谢各位!!!

应用篇 = Docker下的Redis的更多相关文章

  1. docker下创建redis cluster集群

    概述 在Redis中,集群的解决方案有三种 主从复制 哨兵机制 Cluster Redis Cluster是Redis的分布式解决方案,在 3.0 版本正式推出. 准备工作 1.确定本机IP地址 2. ...

  2. docker下安装Redis

    Docker介绍 1.节约时间.快速部署和启动 2.节约成本 3.标准化应用发布 4.方便做持续继承 5作为集群中的轻量主机或节点 6.方便构建基于SOA或者微服务架构的系统 Docker中文文档 h ...

  3. docker下安装redis集群

    docker-compose.yml master: image: redis:4 container_name: redis-cluster_master command: redis-server ...

  4. docker下gitlab(redis)安装配置使用(完整版)

    ps:如果是云主机,需添加安全组开放相应端口(关联相应实例),防火墙开放端口或直接关闭 https://www.jianshu.com/p/080a962c35b6 将其中external_url换为 ...

  5. Docker下Python Flask+Redis+MySQL+RQ队列简单配置

    本篇博文主要讲解Docker下使用RQ队列的通信配置,主要是网上的部分文章写的不太清楚,特写一篇 作者使用docker-compose.yml文件调度各部分文件Dockerfile,起初是这样写的 v ...

  6. Docker下redis的主从、持久化配置

    Docker下redis的主从.持久化配置 redis是k-v型nosql数据库,支持字符串(string).列表(list).集合(set).散列(hash).有序集合(zset:形如member: ...

  7. redis第一讲【redis的描述,linux和docker下的安装使用】

    Redis(REmote DIctionary Server):是什么 redis(远程字典服务器),是完全开源免费的,高性能的k/v分布式内存数据,热门的Nosql数据库 Redis可以干什么: 内 ...

  8. docker下tomcat连redis

    之前已经讲了然后通过Maven 项目管理工具创建Web项目, 最后打包成War包 讲了docker 配置 Tomcat , Redis 现在讲如何使用War包,以及在docker下, 让jsp连上re ...

  9. Docker Centos安装Redis以及问题处理

    之前一篇文章 Redis安装及主从配置 介绍了redis的安装配置,另一篇文件介绍了 Docker Centos安装Openssh .今天将两篇文件结合一下——在Docker Centos环境下搭建r ...

随机推荐

  1. java代码实现简单的认证——图片验证码形式

    前言:认证在互联网中会经常见到,其主要作用是安全问题中防止恶意破解.刷票等.在系统开发中认证的实现也有很多种,什么手机短信认证,邮箱认证等.在这里我使用最基本的验证码的形式进行认证,下面例出过程. 验 ...

  2. Visual Studio Installer 设置属性简介

    1. 创建安装项目 2.创建项目完成之后,具体各类操作和文件的添加需要自行设置 2.1文件系统 针对文件安装位置,内容进行设置.包括文件,项目输出,程序集 2.2.文件类型(不常用) 设置文件后缀名 ...

  3. 视频剪辑软件原型-videocut

    制作软件:墨刀 分享网址:<iframe src="https://modao.cc/app/fb0e31590711295ebebdf50fff7dd9861b7a9c1d/embe ...

  4. gambit软件license文件

    最近自己的gambit软件license文件已经到期,后面采用fluent的license文件后,可以使用,但不能导入文件.不过通过努力,终于找到了可以实现导入文件的代码,并且可以实现无限期的使用fl ...

  5. SDK更新

    虽然国内google被墙了,但仍可利用国内的某些镜像网站实现Android SDK在线更新,使用方法如下: 1.启动 Android SDK Manager ,打开主界面,依次选择『Tools』.『O ...

  6. 桌面小部件Wight父类AppWidgetProvider的三个方法

    onUpdate()这个方法会在每次更新App Widget的时候调用,数据更新的逻辑都写在这个方法里边.而且要注意的是:在用户添加小部件的时候,会首先调用这个方法,应该在这个方法里进行初始化操作,比 ...

  7. Asp.Net项目与TCP服务端交互

    private void SocketSend(string sendstr) { //将字符串转换成字节数组 Byte[] fsSize = System.Text.Encoding.Default ...

  8. Chapter4_控制执行流程

    总结java中所有的与流程控制有关的知识 (1)表达式判断 Java中只允许true或者false来作为判断条件,不允许用0或者非0值作为判断条件. (2)if-else 与流程密切相关的语句,决定了 ...

  9. SAS 选取部分观测

    SAS  对部分观测得处理 在建立新数据集时,有以下两种方式可以从已经存在的数据集中选取观测到新数据集中. ·通过删除不满足条件的观测来保留想要的观测. ·仅接受满足条件的观测. 条件可以由IF语句. ...

  10. php7 三元运算 精简

    $abc = isset($_GET['name'])?$_GET['name']:'abc'; // 5.+ $abcd = $_GET[