如何提升Docker部署网站的加载速度?附docker-compose配置
网站加载慢的排查与优化方案
先确认是否是VM资源不足
- 登录VM,用
top/htop查看CPU、内存占用:如果CPU长期跑满(超过80%)、内存接近耗尽,那就是VM资源不足,直接扩容配置即可。 - 检查容器资源使用:执行
docker stats apache,查看容器的CPU使用率、内存占用、磁盘IO速率,如果容器CPU拉满或内存不足,也会拖慢响应速度。
Docker相关优化
- 更换轻量镜像:弃用
httpd:latest,改用httpd:alpine,镜像体积仅为原镜像的1/3左右,资源占用更低。 - 优化挂载方式:如果是Windows/Mac使用Docker Desktop,本地目录绑定挂载的IO性能较差,建议将静态文件直接打包进自定义镜像(写个简单Dockerfile),或者改用Docker Volume挂载,能大幅提升IO性能。
- 给容器添加资源限制:未做资源限制时,容器可能抢占VM全部资源,或被VM的OOM进程终止,在docker-compose中添加资源配置:
services: apache: # 保留原有配置 deploy: resources: limits: cpus: '0.5' # 限制最多使用半核CPU memory: 256M # 限制最多使用256M内存 reservations: cpus: '0.2' # 预留0.2核CPU memory: 128M # 预留128M内存 - 排查网络问题:使用外部
vlan-ecm网络,可进入容器执行curl -s https://example.com测试对外访问速度,同时在VM上用mtr example.com检查是否存在网络丢包、带宽不足的情况。
Apache服务优化
- 开启Gzip/Deflate压缩:启用
mod_deflate模块,压缩HTML、CSS、JS、图片等静态资源,减少传输体积,提升加载速度。 - 配置浏览器缓存:启用
mod_expires,为静态资源设置过期时间(比如图片设30天,CSS/JS设7天),让浏览器缓存资源,避免重复请求。 - 调整连接数参数:根据实际并发量修改
MaxRequestWorkers(最大工作进程数)、MaxKeepAliveRequests(每个连接的最大请求数)、KeepAliveTimeout(连接超时时间),避免连接排队导致卡顿。 - 启用HTTP/2:开启
mod_http2模块,利用多路复用特性同时传输多个资源,比HTTP/1.1的加载效率更高。
静态资源优化
- 提前压缩文件:用Terser压缩JS,CleanCSS压缩CSS,ImageOptim压缩图片,尽可能减小文件体积。
- 实现懒加载:对图片、视频等大资源设置懒加载,仅在用户滚动到对应区域时才加载,提升首屏加载速度。
- 静态资源托管到CDN:如果是公网网站,将静态资源部署到CDN,让用户从就近节点获取资源,大幅缩短加载耗时。
内容的提问来源于stack exchange,提问作者jack_dan
相关产品推荐
相关产品推荐

