Linux系统中Docker配置最佳实践:第1篇
·
本系列共 3 篇。本文为第 1 篇,聚焦:
daemon.json核心配置、存储驱动最佳实践、网络配置优化。
daemon.json核心配置
我的生产环境配置模板
{
"registry-mirrors": [
"https://docker.rainbond.cc",
"https://docker.1ms.run",
"https://docker.m.daocloud.io"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3",
"compress": "true"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
],
"exec-opts": ["native.cgroupdriver=systemd"],
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 64000,
"Soft": 64000
},
"nproc": {
"Name": "nproc",
"Hard": 8192,
"Soft": 8192
}
},
"live-restore": true,
"userland-proxy": false,
"icc": false,
"default-address-pools": [
{
"base": "172.80.0.0/16",
"size": 24
}
],
"dns": ["223.5.5.5", "8.8.8.8"],
"max-concurrent-downloads": 10,
"max-concurrent-uploads": 5,
"metrics-addr": "127.0.0.1:9323",
"experimental": false,
"features": {
"buildkit": true
}
}
配置项深度解析
1. 镜像加速器配置(必改)
"registry-mirrors": [
"https://docker.rainbond.cc",
"https://docker.1ms.run",
"https://docker.m.daocloud.io"
]
- 配置多个镜像源,Docker会自动failover
- 定期检查镜像源可用性
- 企业内网建议搭建 Harbor
2. 日志配置(必改)
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3",
"compress": "true"
}
3. 存储驱动配置(性能关键)
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
4. Cgroup驱动配置(Kubernetes必改)
"exec-opts": ["native.cgroupdriver=systemd"]
5. 文件描述符限制(高并发必改)
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 64000,
"Soft": 64000
},
"nproc": {
"Name": "nproc",
"Hard": 8192,
"Soft": 8192
}
}
6. live-restore配置(生产环境必开)
"live-restore": true
7. 网络配置优化
"userland-proxy": false,
"icc": false,
"default-address-pools": [
{
"base": "172.80.0.0/16",
"size": 24
}
],
"dns": ["223.5.5.5", "8.8.8.8"]
8. 并发下载优化
"max-concurrent-downloads": 10,
"max-concurrent-uploads": 5
9. 监控指标开启
"metrics-addr": "127.0.0.1:9323"
存储驱动最佳实践
overlay2深度配置
磁盘配额限制(防止容器占满磁盘)
mkfs.xfs -n ftype=1 /dev/sdb1
mount -o pquota /dev/sdb1 /var/lib/docker
# daemon.json
{
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true",
"overlay2.size=10G"
]
}
systemctl restart docker
docker run --storage-opt size=5G nginx
清理策略
#!/bin/bash
# /usr/local/bin/docker-cleanup.sh
docker container prune -f --filter "until=72h"
docker image prune -a -f --filter "until=168h"
docker volume prune -f --filter "until=168h"
docker builder prune -a -f --filter "until=168h"
echo "[$(date)] Docker cleanup completed" >> /var/log/docker-cleanup.log
0 3 * * * /usr/local/bin/docker-cleanup.sh
存储性能监控
#!/bin/bash
docker system df
docker system df -v
USAGE=$(df /var/lib/docker | tail -1 | awk '{print $5}' | sed 's/%//')
if [ $USAGE -gt 80 ]; then
echo "警告:Docker存储使用率 ${USAGE}%"
fi
网络配置优化
自定义网络最佳实践
docker network create \
--driver bridge \
--subnet 172.80.1.0/24 \
--gateway 172.80.1.1 \
--opt com.docker.network.bridge.name=docker-frontend \
frontend-net
docker network create \
--driver bridge \
--subnet 172.80.2.0/24 \
--gateway 172.80.2.1 \
--opt com.docker.network.bridge.name=docker-backend \
backend-net
docker network create \
--driver bridge \
--subnet 172.80.3.0/24 \
--gateway 172.80.3.1 \
--internal \
database-net
MTU设置
ip link show eth0
docker network create \
--driver bridge \
--opt com.docker.network.driver.mtu=1450 \
my-net
网络性能测试
docker run -d --name server --network my-net nginx
docker run -it --name client --network my-net alpine sh
# client中执行
apk add curl
time curl http://server
docker run -d --name iperf-server --network my-net networkstatic/iperf3 -s
docker run --rm --network my-net networkstatic/iperf3 -c iperf-server
端口映射优化
docker run -p 8000-8100:8000 myapp
docker run -P myapp
下篇预告
第 2 篇将继续:资源限制策略、日志管理方案、安全加固配置。
更详细内容
个人博客:https://itinstall.dev
公众号:IT安装手册
更多推荐


所有评论(0)