# 默认配置文件内容
# 1. 两种配置映射的风格
docker 中映射配置文件的方式有 2 种。其实,本质上也就是 1 种,不过是 2 种编写风格。
方式一: 映射一整个配置文件目录
在宿主机中提供一个装有自定义配置文件的目录,然后将整个宿主机的配置文件目录映射给 docker 容器,“对上” 容器中的配置文件目录。docker 官方推荐这种方式。
方式二: 单映射某个配置文件
在宿主机中提供自定义的配置文件,然后将配置文件映射给 docker 容器,“对上” 容器中的配置文件。
第一种写法的好处在于,它统一了映射风格。无论你是要映射数据目录,还是日志目录,亦或者是配置文件目录,你都是在 “映射目录” ,你所需要提供的 -v
的写法是统一的。
但是坏处在于,如果某个软件有多个配置文件,而我们只需要改其中的某一个,在这种情况下我们仍然要准备好全套的配置文件(其中,有一个有变动,其它 N-1 个和默认配置一致)。否则,如果你的配置文件目录下,有且仅有你要自定义的那个配置文件的话,那么等同于你没有提供另外的 N-1 个配置。
# 2. 第二种写法的有点和缺点
第二种写法在这种情况下可以帮我们 “偷懒” 。我们仅需要提供、映射那个要自动定义的配置文件,其它的配置文件我们没有提供,也没有 “覆盖” 它们,它在容器中仍然存在,这种情况下,我们就偷了个懒,不用再提供 N-1 个配置了。
但是第二种写法在能帮我们 “提供偷懒的便利” 的同时,也会引入一个小 “坑” :当你使用 docker run 或者 docker-compose 且指定了挂载时,如果你所指定的挂载路劲不存在,那么 docker 会帮你创建它,但是,它一定创建成目录,一定不会是文件!
例如:
-v ~/docker/3306/data:/var/lib/mysql
-v ~/docker/3306/config/conf.d/mysql.cnf:/etc/mysql/conf.d/mysql.cnf
以上述的 mysql 的挂载为例,假设 ~/docker/3306
这个目录根本就不存在,而于此同时,在我们 “心里” 我们想映射一个目录一个配置文件。当你去执行 docker run
或者 docker-compose 命令时,由于这两个要挂载的路径不存在,所以 docker 会 “帮” 我们去创建 ~/docker/3306/data
和 ~/docker/3306/config/conf.d/mysql.cnf
。
但是,Docker 不会管、也不会知道我们 “心里的想法” ,它会把这两个路径全部创建成目录!很显然,对于我们 “想要” 映射的第二项,这明显是一个错误。
警告
在使用 docker 和 docker-compose 时,不要指望它们来 “帮” 我们创建目录和文件!有什么需要创建的,自己先创建出来,再执行 docker run 和 docker-compose 。
# 3. MySQL 默认配置
这两个配置文件在容器内的 /etc/mysql/conf.d
目录下。
docker.cnf
[mysqld]
skip-host-cache
skip-name-resolve
mysql.cnf
[mysql]
# 4. Redis 默认配置
Redis 要求配置文件必须放在 /usr/local/etc/redis/
下。
redis.conf( 6.2.1 )
bind 127.0.0.1 -::1
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 16
always-show-logo no
set-proc-title yes
proc-title-template "{title} {listen-addr} {server-mode}"
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
rdb-del-sync-files no
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-diskless-load disabled
repl-disable-tcp-nodelay no
replica-priority 100
acllog-max-len 128
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
lazyfree-lazy-user-flush no
oom-score-adj no
oom-score-adj-values 0 200 800
disable-thp yes
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
jemalloc-bg-thread yes
# 5. RabbitMQ 默认配置
RabbitMQ 的配置文件 rabbitmq.config
在容器内的 /etc/rabbitmq/
下。
其中的有效内容(取消注释)为:
rabbitmq.config
loopback_users.guest = false
listeners.tcp.default = 5672
management.tcp.port = 15672
# 6. Nginx 默认配置
Nginx 配置文件 nginx.conf
在容器内的 /etc/nginx/
下。低版本的 nginx 不在这里,留意日志中的错误信息。
nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
# 7. Nacos 默认配置
Nacos 的配置文件 custom.properties
在容器内的 /home/nacos/init.d/
下。
custom.properties 有效(去掉注释)默认内容
management.endpoints.web.exposure.include=*