Docker在Linux上的性能优化策略
调整Linux内核参数以提升Docker容器的网络和文件系统性能。
/etc/security/limits.conf,添加* soft nofile 65536和* hard nofile 65536,提升容器处理并发连接的能力;/etc/sysctl.conf中设置net.core.rmem_max=16777216、net.core.wmem_max=16777216及对应的tcp_rmem/tcp_wmem参数(如net.ipv4.tcp_rmem=4096 87380 16777216),优化网络数据传输效率;swapoff -a并添加到/etc/rc.local,避免Swap导致的磁盘I/O瓶颈(仅适用于内存充足的场景)。通过/etc/docker/daemon.json调整守护进程行为,提升稳定性和性能:
overlay2(Linux默认高性能驱动),添加"storage-driver": "overlay2"和"storage-opts": ["overlay2.override_kernel_check=true"];"log-driver": "json-file"、"log-opts": {"max-size": "100m", "max-file": "3"}),避免日志文件过大占用磁盘空间;"features": {"buildkit": true},提升镜像构建速度(支持并行构建和缓存优化)。通过资源限制避免单个容器占用过多主机资源,保障整体稳定性:
--cpus参数指定容器可使用的CPU核心数(如docker run --cpus=2 my_container),或通过--cpu-period和--cpu-quota设置CPU配额;--memory(或-m)参数设置内存上限(如-m 512m),并为容器分配 swap 空间(--memory-swap),防止内存溢出导致容器崩溃;--cpuset-cpus将容器绑定到特定CPU核心(如--cpuset-cpus="0,1"),减少CPU上下文切换开销。精简镜像大小以提升构建、拉取和启动速度:
FROM ... AS builder分离构建环境和运行时环境,仅将运行时必要的文件(如编译后的二进制文件)复制到最终镜像;RUN apt-get clean && rm -rf /var/lib/apt/lists/*删除缓存和临时文件,减少镜像层数(合并多个RUN命令)。根据应用场景选择合适的网络模式,并调整网络参数:
bridge(默认),跨主机通信使用overlay(需Docker Swarm或Kubernetes支持),高性能场景使用host(容器直接共享主机网络栈,减少NAT开销);ip link set dev docker0 mtu 1400或启动容器时指定--mtu 1400,减少网络碎片;/etc/sysctl.conf中设置net.core.somaxconn=1024(提升连接队列长度)、net.ipv4.tcp_tw_reuse=1(复用TIME_WAIT连接)、net.ipv4.tcp_fin_timeout=15(缩短TIME_WAIT超时时间),提升网络吞吐量。选择高性能存储驱动和设备,提升磁盘I/O性能:
/var/lib/docker)挂载到SSD设备,提升磁盘读写速度;overlay2驱动,确保内核版本支持(Linux内核≥4.0),并开启overlay2.override_kernel_check=true(如需兼容旧内核);-v /host/data:/container/data)或使用卷(Volume),减少容器内磁盘IO压力。通过监控工具识别性能瓶颈,持续调整优化策略:
docker stats命令查看容器的CPU、内存、网络和磁盘I/O使用情况;iftop(网络流量)、iostat(磁盘I/O)、htop(CPU/内存)等工具定位具体瓶颈(如网络延迟高则调整MTU或TCP参数)。