Docker是我们常用的容器引擎,使用Docker来部署和管理我们的常用数据库例如MySQL和Redis是非常的方便的。不过使用Docker安装部署MySQL和Redis还是有一些需要注意的地方的。
使用docker pull命令即可拉取
复制
docker pull mysql
这里我们使用具名挂载的方式挂载MySQL容器的数据卷,方便管理。 先创建三个数据卷,分别用于挂载并持久化MySQL的数据文件、配置文件和日志这三个目录:
复制
docker volume create mysql-data
docker volume create mysql-config
docker volume create mysql-log
这样,我们就创建了三个数据卷,这三个数据卷分别被命名为mysql-data、mysql-config和mysql-log,大家也可以自行取名。
通过以下命令创建MySQL容器
复制
docker run --restart=always -d \
--name=mysql \
-v mysql-config:/etc/mysql/conf.d \
-v mysql-log:/logs \
-v mysql-data:/var/lib/mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-e LANG=C.UTF-8 mysql
这样,就完成了MySQL容器的创建和启动,上述命令的参数意义如下:
上述我们已经把创建了数据卷并具名挂载了容器内的MySQL配置目录,只需查看数据卷的位置并修改其中文件即可。 查看数据卷mysql-config的位置:
复制
docker volume inspect mysql-config
然后展示如图
进入这个目录,可以看到里面有两个默认的MySQL配置文件,使用vim编辑即可,在里面加入自定义的配置。
(为什么要开启定时任务,后面文章将会讲解mysql的定时任务,用于全量更新数据等等) 修改mysql.cnf中的配置文件
复制
[mysqld]
event_scheduler=ON
default-time-zone='+08:00'
编辑完成记得重启容器
复制
# 上述创建时容器名为mysql,若为自定义此处换为自己的
docker restart mysql
使用docker pull命令即可拉取
复制
docker pull redis
接下来就是要将redis 的配置文件进行挂载,以配置文件方式启动redis 容器。(挂载:即将宿主的文件和容器内部目录相关联,相互绑定,在宿主机内修改文件的话也随之修改容器内部文件)
复制
docker volume create redis-data
docker volume create redis-config
这样,我们就创建了两个数据卷,这两个数据卷分别被命名为redis-data、redisl-config,大家也可以自行取名。
通过以下命令创建MySQL容器
复制
docker run --restart=always \
--log-opt max-size=100m \
--log-opt max-file=2 \
-p 6379:6379 \
--name redis \
-v redis-config:/etc/redis/redis.conf \
-v redis-data:/data -d redis \
redis-server /etc/redis/redis.conf \
--appendonly yes \
--requirepass 123456
这样,就完成了Redis容器的创建和启动,上述命令的参数意义如下:
复制
docker ps -a |grep redis # 通过docker ps指令查看启动状态,是否成功.
复制
docker exec -it 容器id /bin/bash
进去后输入redis-cli测试连接
验证密码auth 123456
redis.conf 5.1、创建目录存放redis.conf文件
复制
docker volume inspect redis-config
2.cd 到redis-config挂载的目录下
复制
cd /var/lib/docker/volumes/redis-config/_data
这个目录对应的挂载相当于容器的/etc/redis/redis.conf
如果没有wget,可以自己 vi redis.conf然后复制粘贴
复制
wget http://download.redis.io/redis-stable/redis.conf
复制
chmod 777 redis.conf
复制
vi redis.conf
配置完后,重启redis容器
复制
####需要修改的部分(开始)###
#客户端的最大连接数
maxclients 10000
# 密码
requirepass 123456
#最大内存,单位是 byte 位。这里是512M。
maxmemory 512MB
#淘汰策略,默认noeviction只返回错误,不会删除任何key。该策略是Redis的默认淘汰策略,一般不会选用。
maxmemory-policy volatile-ttl
#常见的几种策略:作用对象-淘汰算法 ==》 淘汰策略
#(1)淘汰算法:ttl、random、lru、lfu
#(2) 作用对象:allkeys、volatile
#端口号
port 6379
#开启保护模式
protected-mode yes
#后台运行. 这里必须填no,否则docker容器会推退出。
daemonize no
#默认的日志级别
loglevel notice
#日志文件名
logfile server_log.txt
#以后台方式运行后,进程的位置
pidfile /var/run/redis_6379.pid
#默认可以使用的数据库数量
databases 16
#### 需要修改的部分(结束) ###
###### RDB 持久化策略 (开始) #####
#15分钟1个更新
save 900 1
#5分钟10个更新
save 300 10
# 分钟1万个更新
save 60 10000
#持久化失败后,是否继续工作,默认yes
stop-writes-on-bgsave-error yes
#是否压缩rdb文件,如果开启比较小号cpu资源
rdbcompression yes
#rdb文件保存时,是否校验错误
rdbchecksum yes
#rdb文件存放的目录
dir ./
###### RDB 持久化策略 (结束) #####
###### AOF 持久化策略 (开始) #####
#开启aof,默认是不开启的。
appendonly yes
# of文件名称
appendfilename appendonly.aof
#erverysec: 1s 刷盘一次(最常用);always: 每次更新都刷,io次数多,性能低下;no: 不做持久化;
appendfsync everysec
#重写aof的前提条件,文件达到了64MB(默认是64MB)
auto-aof-rewrite-min-size 64mb
#文件达到了64MB,同时最近一次文件大小超出了原来的一倍,才进行aof重写
auto-aof-rewrite-percentage 100
###### AOF 持久化策略 (结束) #####
#使用 RDB、AOF混合持久化
aof-use-rdb-preamble yes