在 CentOS 上使用 Docker 时,性能优化可以从宿主机系统、Docker 配置、镜像与容器、存储与网络几个层面入手。下面给你一套比较实用、可落地的优化建议。
Docker 依赖内核特性(cgroup、overlay2、namespace)。
uname -r
建议:
减少系统开销:
systemctl disable --now firewalld
systemctl disable --now postfix
(如用防火墙,建议用 nftables 或云安全组)
编辑 /etc/sysctl.conf:
net.ipv4.ip_forward=1
net.core.somaxconn=1024
vm.swappiness=10
fs.inotify.max_user_watches=524288
生效:
sysctl -p
检查:
docker info | grep Storage
CentOS 推荐:
/etc/docker/daemon.json(不存在则新建):
{
"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 restart docker
已在上面 daemon.json 中配置。
alpine、distroless、ubi-minimalcentos:latest(很大)示例:
FROM node:18-alpine
FROM golang:1.21 AS build
WORKDIR /app
COPY . .
RUN go build -o app
FROM alpine
COPY --from=build /app/app /app
CMD ["/app"]
运行容器时:
docker run -d \
--name app \
--memory=1g \
--cpus=2 \
--restart=unless-stopped \
myimage
默认:
/var/lib/docker
迁移:
systemctl stop docker
mv /var/lib/docker /data/docker
ln -s /data/docker /var/lib/docker
systemctl start docker
docker run -d \
--tmpfs /tmp \
-v /data/logs:/app/logs \
myimage
docker run --network host myimage
适合:
docker network create mynet
docker run --network mynet myimage
避免某容器吃满 CPU。
--cpuset-cpus绑定核心:
docker run --cpuset-cpus="0,1" myimage
docker stats
iostat -x 1
docker system df
docker system prune -a
✅ CentOS + Docker 推荐组合:
如果你愿意,可以告诉我:
我可以给你更针对性的优化方案。