# 默认配置文件内容

# 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=*