一。工具介绍
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支持数据的持久化,可以以
AOF
和RDB
的形式将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。 - 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
镜像, 步骤如下:
- 编写
redis.conf
找到一份redis.conf
配置文件,并且加入自己的自定义配置,其中包括禁用命令,如下:
rename-command CONFIG ""
rename-command FLUSHALL ""
rename-command FLUSHDB ""
- 生成镜像
编写一个Dockerfile
文件,里面内容如下:
FROM redis
COPY redis.conf /usr/local/etc/redis/redis.conf
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
注意,要将redis.conf
和Dockerfile
放到同一目录
运行命令生成镜像
runoob@runoob:~/redis$ docker build -t redis:pharbers .
- 启动镜像
使用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就交代完了,各位观众赏脸,可以留言讨论一下, 谢谢各位!!!