一。工具介绍

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. docker容器composer 部署 laravel框架

    首先yum install docker     安装docker service docker start   启动docker docker pull  docker.io/skiychan/ng ...

  2. php判断用户是否关注微信公众号

    方法一: <?php     $access_token = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_cr ...

  3. sonar之阿里巴巴java规则(p3c)

    今天为了打包生成sonar-p3c-pdm插件,折腾了半天.sonar版本v6.7.6,p3c源码地址https://gitee.com/jasonlong10/sonar-p3c-pmd-plugi ...

  4. MUI 添加自定义图标(注意点)

    参考: https://blog.csdn.net/qq_39759115/article/details/79436606 注意: 1. 将这个原来的逗号改成分号 2. 这些图标的名字都可以改名字

  5. docker-2 tomcat

    启动容器命令 docker run -d -p 8080:8080 -v /root/tomcat/webapps:/usr/local/tomcat/webapps -v /root/tomcat/ ...

  6. Python模拟接口登录

    参考地址:https://blog.csdn.net/rifengxxc/article/details/77414090 下面讲下关于python模拟登录实验,之前怎么调试也不行,我也是摸索了好久, ...

  7. java socket编程(一)简介

    #Java TCP Ip编程 其实下面几张图片就可以解释简单解释tcp-ip协议的大体流程了. ###计算机网络,分组报文和协议 网络是一组通过通信信道相互连接的机器组成. 组与组之间通过路由器连接 ...

  8. bottle源码

    import sys __author__ = 'Marcel Hellkamp' __version__ = '0.13-dev' __license__ = 'MIT' ############# ...

  9. windows 上安装冷门python模块

    最近在逼乎看到 笑虎大大 的python 撸代码学知识专栏..就下载他的Pspider 框架 安装了一下,准备耍耍. 由于是在Windows下的pycharm 有个 pybloom_live 模块 老 ...

  10. springmvd接收参数问题

    问题描述: 好久不写博客了,今天遇到一个问题,那就是post请求时,参数接收不到,当时我很纳闷,看代码: 就是这样几个参数,我使用postman请求时无法获取参数: 报错信息: "msg&q ...