在 CentOS 上优化 Docker,可以从系统层、Docker 自身配置、镜像与容器、存储与网络几个方面来做。下面给你一套比较实用、可落地的优化方案。
uname -a
systemctl disable firewalld --now # 若用云安全组可关
systemctl disable postfix
⚠️ 生产环境谨慎关防火墙,可用 iptables/nftables 管理
编辑 /etc/sysctl.conf:
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
vm.swappiness = 10
sysctl -p
/etc/security/limits.conf:
* soft nofile 65535
* hard nofile 65535
yum remove docker docker-client docker-common
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
docker info | grep Storage
如果不是 overlay2:
{
"storage-driver": "overlay2"
}
编辑 /etc/docker/daemon.json:
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
"storage-driver": "overlay2",
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"live-restore": true,
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 65535,
"Soft": 65535
}
}
}
重启:
systemctl daemon-reload
systemctl restart docker
✅ live-restore:Docker 重启不影响运行中的容器
alpinedistrolesscentos / ubuntu 大镜像(除非必须)FROM golang:1.21 AS build
WORKDIR /app
COPY . .
RUN go build -o app
FROM alpine
COPY --from=build /app/app /app
CMD ["/app"]
RUN yum clean all && rm -rf /var/cache/yum
docker run -d \
--name app \
--memory=512m \
--cpus=1 \
nginx
restart 策略--restart=unless-stopped
--cap-drop ALL
systemctl stop docker
mv /var/lib/docker /data/docker
ln -s /data/docker /var/lib/docker
systemctl start docker
docker system prune -a
docker network create mynet
docker run --network mynet
docker stats
docker logs -f container
journalctl -u docker
| 问题 | 原因 | 解决 |
|---|---|---|
| 容器卡顿 | 内存限制 | 加 --memory |
| 磁盘爆满 | 日志无限 | max-size |
| 启动慢 | 镜像大 | 多阶段构建 |
| 网络慢 | 默认 bridge | 自定义网络 |
如果你愿意,可以告诉我:
我可以给你针对性最优配置方案。