文章目录
- 一、nginx
- 二、redis
- 1、创建本地目录
- 2、/home/redis/conf下创建配置文件redis.config
- 3、运行
- 4、配置开机启动
- 三、mysql
- 1、创建目录
- 2、配置文件
- 3、启动命令
- 四、mongo
- 1、创建目录
- 2、配置文件
- 3、启动命令
一、nginx
在/home目录下创建文件夹nginx,将nginx配置文件nginx.conf粘贴到此目录下。这里遇到了一个问题,刚开始文件映射的时候指定nginx下的conf目录映射,然后在该目录下的default.conf里填加的配置信息,结果启动就各种报错。。。错误大概意思就是此处不能有这个配置,原因就是nginx目录下的nginx.con已经有这些配置了。
docker run -itd --name nginx -v /home/nginx:/etc/nginx -v /home/nginx/log:/usr/log/nginx -p 10080:80 nginx
二、redis
1、创建本地目录
/home/redis/conf /home/redis/data /home/redis/logs
2、/home/redis/conf下创建配置文件redis.config
配置文件说明,按需选择
daemonize no
默认情况下,redis不是在后台运行的。如果需要在后台运行,把该项的值更改为yes。pidfile /var/run/redis.pid
当redis在后台运行的时候,redis默认会把pid文件放在/var/run/redis.pid,你可以配置到其他位置。当运行多个redis服务时,需要指定不同的pid文件和端口。port 6379
指定redis运行的端口,默认是6379。bind 127.0.0.1
指定redis只接收来自于该IP地址的请求看,如果不进行设置,那么将处理所有请求。在生产环境中最好设置该项。loglevel debug
指定日志记录级别,其中redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose。
1 . debug表示记录很多信息,用于开发和测试
2.verbose表示记录有用的信息, 但不像debug会记录那么多
3.notice表示普通的verbose,常用于生产环境
4.warning 表示只有非常重要或者严重的信息会记录到日志logfile /var/log/redis/redis.log
配置log文件地址,默认值为stdout。若后台模式会输出到/dev/null。databases 16
可用数据库数,默认值为16,默认数据库为0,数据库范围在0~15之间切换,彼此隔离。save
保存数据到磁盘,格式为save,指出在多长时间内,有多少次更新操作,就将数据同步到数据文件rdb。相当于条件触发抓取快照,这个可以多个条件配合。
save 9001就表示900秒内至少有1个key被改变就保存数据到磁盘。rdbcompression yes
存储至本地数据库时(持久化到rdb文件)是否压缩数据,默认为yes。dbfilename dump.rdb
本地持久化数据库文件名,默认值为dump.rdb。dir ./
工作目录,数据库镜像备份的文件放置的路径。这里的路径跟文件名要分开配置是因为redis在进行备份时,先会将当前数据库的状态写入到一个临时文件中,等备份完成时,再把该临时文件替换为上面所指定的文件。 而这里的临时文件和上面所配置的备份文件都会放在这个指定的路径当中,AOF文件也会存放在这个目录下面。 注意这里必须指定一个目录而不是文件。slaveof
主从复制,设置该数据库为其他数据库的从数据库。设置当本机为slave服务时,设置master服务的IP地址及端口。 在redis启动时,它会自动从master进行数据同步。masterauth
当master服务设置了密码保护时(用requirepass制定的密码)slave服务连接master的密码。slave-serve-stale-data yes
当从库同主机失去连接或者复制正在进行,从机库有两种运行方式:
如果slave-serve-stale-data设置为 yes(默认设置),从库会继续相应客户端的请求。
如果slave-serve-stale-data是指为no,除去INFO和SLAVOF命令之外的任何请求都会返回一个错误"SYNC with master in progress"。repl-ping-slave-period 10
从库会按照一个时间间隔向主库发送PING,可以通过repl-ping-slave-period设置这个时间间隔,默认是10秒。repl-timeout 60
设置主库批量数据传输时间或者ping回复时间间隔,默认值是60秒,一定要确保repl-timeout大于repl-ping-slave-period。requirepass foobared
设置客户端连接后进行任何其他指定前需要使用的密码。因为redis速度相当快,所以在一台比较好的服务器平台下, 一个外部的用户可以在一秒钟进行150K次的密码尝试,这意味着你需要指定非常强大的密码来防止暴力破解。renamecommand CONFIG “”
命令重命名,在一个共享环境下可以重命名相对危险的命令,比如把CONFIG重名为一个不容易猜测的字符:
rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
如果想删除一个命令,直接把它重命名为一个空字符""即可:rename-command CONFIG “”。maxclients 128
设置同一时间最大客户端连接数,默认无限制。redis可以同时打开的客户端连接数为redis进程可以打开的最大文件描述符数。
如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,redis会关闭新的连接并向客户端返回max number of clients reached错误信息。maxmemory
指定redis最大内存限制。redis在启动时会把数据加载到内存中,达到最大内存后,redis会先尝试清除已到期或即将到期的key,redis同时也会移除空的list对象。当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。
注意:redis新的vm机制,会把key存放内存,value会存放在swap区。maxmemory-policy volatile-lru
当内存达到最大值的时候redis会选择删除哪些数据呢?有五种方式可供选择:
1.volatile-lru代表利用LRU算法移除设置过期时间的key(LRU:最近使用LeastRecentlyUsed)
2.allkeys-lru代表利用LRU算法移除任何key
3.volatile-random代表移除设置过过期时间的随机key
4.allkeys_random代表移除一个随机的key
5. volatile-ttl代表移除即将过期的key(minor TTL)
6. noeviction代表不移除任何key,只是返回一个写错误
注意:对于上面的策略,如果没有合适的key可以移除,写的时候redis会返回一个错误。appendonly no
默认情况下,redis会在后台异步的把数据库镜像备份到磁盘,但是该备份是非常耗时的,而且备份也不能很频繁。 如果发生诸如拉闸限电、拔插头等状况,那么将造成比较大范围的数据丢失,所以redis提供了另外一种更加高效的数据库备份及灾难恢复方式。
开启append only模式之后,redis会把所接收到的每一次写操作请求都追加到appendonly. aof文件中。当redis重新启动时,会从该文件恢复出之前的状态,但是这样会造成appendonly. aof文件过大,所以redis还支持BGREWRITEAOF指令对appendonly.aof。appendfilename appendonly.aof
AOF文件名称,默认为"appendonly.aof"。appendfsync everysec
redis支持三种同步AOF文件的策略:
1.no代表不进行同步,系统去操作
2.always代表每次有写操作都进行同步
3.everysec代表对写操作进行累积,每秒同步一次,默认是"everysec",按照速度和安全折中这是最好的slowlog-log-slower-than 10000
记录超过特定执行时间的命令。执行时间不包括I/O计算,比如连接客户端,返回结果等。只是命令执行时间,可以通过两个参数设置slow log:一个是告诉Redis执行超过多少时间被记录的参数slowlog-log-slower-than(微妙),另一个是slow log 的长度。
当一个新命令被记录的时候最早的命令将被从队列中移除,下面的时间以微妙微单位,因此1000000代表一分钟。注意制定一个负数将关闭慢日志,而设置为0将强制每个命令都会记录。hash-max-zipmap-entries 512 && hash-maxz-ipmap-value 64
当hash中包含超过指定元素个数并且最大的元素没有超过临界时,hash将以一种特殊的编码方式(大大减少内存使用)来存储,这里可以设置这两个临界值。Redis Hash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现。这个Hash的成员比较少时redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value redisObject的encoding为zipmap。当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。hash-max-zipmap-entries 512 512
list数据类型多少节点以下会采用去指针的紧凑存储格式。list-max-ziplist-value 64
数据类型节点值大小小于多少字节会采用紧凑存储格式。setmaxintsetentries 512
set数据类型内部数据如果全部是数值型,且包含多少节点以下会采用紧凑格式存储。zsetmaxziplistentries 128
zsort数据类型多少节点以下会采用去指针的紧凑存储格式。zsetmaxziplistvalue 64
zsort数据类型节点值大小小于多少字节会采用紧凑存储格式。activerehashing yes
redis将在每100毫秒时使用1毫秒的CPU时间来对redis的hash表进行重新hash,可以降低内存的使用。
当你的使用场景中,有非常严格的实时性需要,不能够接受redis时不时的对请求有2毫秒的延迟的话,把这项配置为no。如果没有这么严格的实时性要求,可以设置为yes,以便能够尽可能快的释放内存。
3、运行
docker run -p 16379:6379 --name redis6.2.6 -v /home/redis/conf/redis.conf:/etc/redis/redis.conf -v /home/redis/data:/data -v /home/redis/logs:/logs -d redis:6.2.6 redis-server /etc/redis/redis.conf
命令解释:
–privileged=true :容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限-p:端口映射,此处映射 主机6379端口 到 容器的6379端口-v:主机和容器的目录映射关系,":"前为主机目录,之后为容器目录新建配置文件书卷: -v /home/redis/conf/redis.config:/etc/redis/redis.conf redis数据保存数据卷 -v /home/redis/data:/datareids日志文数据卷 -v /home/redis/logs:/logs-d : 表示使得容器后台一直运行
redis-server /etc/redis/redis.conf:指定配置文件启动redis-server进程
–appendonly yes:开启数据持久化
–requirepass 123456 :设置你的密码,设置密码比较安全
4、配置开机启动
docker update --restart=always 容器ID
三、mysql
1、创建目录
mkdir /home/mysql/conf /home/mysql/log /home/mysql/data
2、配置文件
/home/mysql/conf下创建 my.cnf
[client]
# 端口号
port=3306[mysql]
no-beep
default-character-set=utf8mb4[mysqld]
# 端口号
port=3306
# 数据目录
datadir=/var/lib/mysql
# 新模式或表时将使用的默认字符集
character-set-server=utf8mb4
# 默认存储引擎
default-storage-engine=INNODB
# 将 SQL 模式设置为严格
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
# 最大连接数
max_connections=1024
# 表缓存
table_open_cache=2000
# 表内存
tmp_table_size=16M
# 线程缓存
thread_cache_size=10
# 设置大小写不敏感
lower_case_table_names=1# myisam设置
myisam_max_sort_file_size=100G
myisam_sort_buffer_size=8M
key_buffer_size=8M
read_buffer_size=0
read_rnd_buffer_size=0# innodb设置
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=1M
innodb_buffer_pool_size=8M
innodb_log_file_size=48M
innodb_thread_concurrency=33
innodb_autoextend_increment=64
innodb_buffer_pool_instances=8
innodb_concurrency_tickets=5000
innodb_old_blocks_time=1000
innodb_open_files=300
innodb_stats_on_metadata=0
innodb_file_per_table=1
innodb_checksum_algorithm=0
# 其他设置
back_log=80
flush_time=0
join_buffer_size=256K
max_allowed_packet=4M
max_connect_errors=100
open_files_limit=4161
sort_buffer_size=256K
table_definition_cache=1400
binlog_row_event_max_size=8K
sync_master_info=10000
sync_relay_log=10000
sync_relay_log_info=10000
3、启动命令
docker run --name mysql \-d \-p 3306:3306 \--restart unless-stopped \-v /home/mysql/log:/var/log/mysql \-v /home/mysql/data:/var/lib/mysql \-v /home/mysql/conf:/etc/mysql \-e MYSQL_ROOT_PASSWORD=root \mysql:5.7.34
四、mongo
1、创建目录
/home/mongo/conf /home/mongo/data /home/mongo/logs
2、配置文件
#数据库存储路径
dbpath=/data
# 日志文件路径
logpath=/logs/mongod.log
# 监听的端口
port=27017
# 允许所有的 IP 地址连接
bind_ip=0.0.0.0
# 启用日志记录
journal=true
# 是否后台运行
fork=true
# 启用身份验证
#auth=true
3、启动命令
docker run -dit --name mongo -p 27017:27017 -v /home/mongo/conf/mongod.conf:/etc/mongod.conf -v /home/mongo/data:/data/db -v /home/mongo/logs:/logs -eMONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=bahndepq --restart=always mongo