Ubuntu下优化Docker性能的关键策略
node:10替换为node:10-alpine,镜像体积可从几十MB降至几MB)。FROM指令分离构建环境与运行环境,仅将最终应用及必要依赖复制到最终镜像(例如Golang应用编译阶段使用golang:alpine,运行阶段仅复制编译后的二进制文件)。node_modules、.git等),避免其进入镜像构建上下文。RUN命令(如RUN apt-get update && apt-get install -y package1 package2 && rm -rf /var/lib/apt/lists/*),减少镜像层数;将频繁变动的指令(如COPY)放在Dockerfile末尾,提高构建缓存命中率。aufs或overlay,推荐切换至overlay2(需确保内核版本≥3.18),其性能更优且支持更多特性(修改/etc/docker/daemon.json:{"storage-driver": "overlay2"})。/etc/sysctl.conf优化磁盘与网络IO,例如:
vm.dirty_ratio = 10(脏页占比达到10%时触发写入磁盘,减少频繁IO);vm.swappiness = 10(降低交换分区使用频率,优先使用物理内存);net.core.somaxconn = 4096(增加TCP连接队列长度,提升网络吞吐量);修改后执行sysctl -p生效。docker system prune -a(清理未使用的镜像、容器、卷、网络),释放磁盘空间;使用docker system df查看资源占用情况。--cpus参数限制容器使用的CPU核心数(如docker run -it --cpus=1 ubuntu:latest限制为1核);或在docker-compose.yml中设置deploy.resources.limits.cpus: '1'。--memory(或-m)参数设置容器最大内存(如docker run -it --memory="512m" ubuntu:latest限制为512MB);建议同时设置--memory-swap(如--memory="512m" --memory-swap="1g",表示内存+交换分区总大小为1GB)。--blkio-weight参数设置磁盘IO权重(范围1-10000,默认500,值越大优先级越高,如docker run -it --blkio-weight=800 ubuntu:latest);或使用--device-read-bps/--device-write-bps限制设备读写速度(如docker run -it --device-read-bps=/dev/sda:1mb ubuntu:latest限制读速度为1MB/s)。tc命令)或网络插件(如Calico)实现。--network=host):容器共享主机网络堆栈,无NAT开销,适合低延迟应用(如数据库、高频交易系统);bridge):适合单主机环境,通过虚拟网桥实现容器间通信;overlay):适合多主机分布式系统(如Kubernetes集群),通过VXLAN实现跨主机通信。/etc/sysctl.conf中的网络参数,例如:
net.ipv4.tcp_tw_reuse = 1(允许复用TIME_WAIT状态的连接,减少端口占用);net.ipv4.tcp_max_syn_backlog = 8192(增加SYN队列长度,应对高并发连接);net.core.netdev_max_backlog = 5000(增加网络设备接收队列长度,提升网络吞吐量)。docker stats命令查看容器的CPU、内存、网络、磁盘IO使用情况(如docker stats --no-stream);或使用第三方工具(如Prometheus+Grafana、cAdvisor)实现可视化监控。sudo apt update && sudo apt upgrade),修复性能漏洞;清理系统日志(journalctl --vacuum-size=100M)、临时文件(rm -rf /tmp/*),保持系统整洁。