Docker 进阶实战案例 - 部署 Hexo 博客、Java 项目与 Python 应用
Docker 进阶实战案例
本文分享如何通过 Docker 部署 Hexo 博客、Java 应用与 Python (Flask) 应用。内容包含场景解析、完整流程、实践经验、常见问题与资源推荐,适合需要将项目生产化容器部署的开发者。
一、用 Docker 部署 Hexo 博客(静态网站最佳实践)
背景与意义
传统网页需环境兼容、手工上传,Docker 容器可实现“快速部署 + 多云一致性”。
1. 准备静态资源
本地 Hexo 博客根目录执行:
1 | hexo clean && hexo g |
生成的 public/ 目录下全是已渲染好的静态文件。
2. 新建 Dockerfile,集成 Nginx
在 Hexo 根目录新建:
1 | FROM nginx:alpine |
nginx.conf 示例(可选,自定义 SEO/缓存):
1 | server { |
3. 构建镜像并运行
1 | docker build -t my-hexo-blog . |
- 如果用于线上推荐加 nginx 反向代理,或挂载静态目录、https、gzip 压缩等高级配置。
- 挂载本地:
-v $(pwd)/public:/usr/share/nginx/html:ro - 自动重启:
--restart unless-stopped
常见部署问题与对策
- _资源 404_:路径区分大小写或nginx配置问题
- _自动化更新_:结合 CI/CD 工具(比如 Github Actions + Docker Hub + 云服务器 webhook 自动拉取)
- _CDN加速_:可云商配置域名解析到 CDN,再由 CDN 回源 Docker 容器
二、Docker 化 Java Web 应用(Spring Boot 典型案例)
业务场景解析
微服务/java后端生产级方案,快速迭代上线、安全一致、支持多环境。
1. 完整 Spring Boot 应用 jar 包
1 | mvn clean package -DskipTests # 生成target/demo.jar |
2. Dockerfile 全参数示例
1 | FROM openjdk:17-jdk-alpine |
HEALTHCHECK利于容器编排平台如 k8s、compose 自动监控SPRING_PROFILES_ACTIVE支持多环境一镜多用- 外部映射配置:
-v $(pwd)/config:/config结合spring.config.additional-location - 挂载日志目录:
-v /data/logs:/logs
3. 构建与运行
1 | docker build -t springboot-demo . |
常见生产问题与建议
- JVM参数: 可通过
-e JAVA_OPTS="-Xms512m -Xmx1024m"灵活配置内存 - 端口占用: 优先用容器自定义端口如
-p 18080:8080 - 数据持久化: 业务数据别存容器,要外部数据库、云存储
三、用 Docker 部署 Python Flask 项目(Web API/工具典型)
背景与好处
Python 运行环境差异大,依赖多,容器化后“一次搞定,多处运行”,适合API、快速上线工具类项目。
1. 多依赖项目目录结构
1 | my-flask-app/ |
requirements.txt
1 | Flask==2.2.2 |
app.py 样例
1 | from flask import Flask, jsonify |
2. Dockerfile(升级加强版)
1 | FROM python:3.11-slim |
- 国内部署建议加镜像源加速
- 多服务可用 gunicorn 或 uwsgi 托管:
1
CMD ["gunicorn", "-w", "4", "-b", ":5000", "app:app"]
3. 启动命令进阶
1 | docker build -t flask-demo . |
常见安全&性能建议
- 禁止 debug 模式上线
- 限制源IP,或部署至内网并加负载均衡
- 业务大并发建议用 gunicorn/uwsgi + nginx 反代
四、Docker Compose 编排 - 多服务联动
场景举例+拓扑说明(以博客+mysql为例,可扩展redis/Nginx反代)
1 | version: '3.7' |
depends_on可顺序保证,比如 db 先于 blog,nginx 最后。- 各服务可独立端口方便本地/云平台调试
- nginx 可做统一证书/SSL,流量转发管理静态和API
- 推荐数据和配置文件都挂载为 volume,防配置丢失
启动:
1 | docker compose up -d |
- 关闭/删除服务:
docker compose down,数据卷根据实际决定是否保留
五、实际运维建议&常见排错
- 容器日志查看:
docker logs <容器名或ID> [-f] - 在线进入容器调试:
docker exec -it <容器名> /bin/sh(alpine/部分镜像无 bash) - 自动重启设置:
--restart unless-stopped(推荐生产环境) - 端口、用户权限问题:
尤其云服务器记得安全组与主机防火墙(如 ufw, firewalld)打开目标端口 - 磁盘占用清理:
docker system prune -af+ 清理无用 volume/image/container - 数据持久化:
数据型文件一律 volume 映射到主机专用目录 - 定时备份:
可结合主机 crontab +docker exec导出数据库/重要文件 - _镜像加速&源_:
国内推荐 Docker 官方镜像加速器&各云厂商加速
六、常见问题答疑&进阶实用资源
Q1:如何让应用自动升级?
- 结合 Github Actions/Drone/Jenkins 等持续集成,实现 push 镜像自动重建和上线。
Q2:如何安全迁移数据?
- 总是“挂载外部 volume”,主机目录定期快照;数据库用 dump 工具热备份。
Q3:生产推荐用什么监控方案?
- 可选 Docker 官方 metrics,或独立用 Prometheus+Grafana,log可直推 ELK。
Q4:如何一套代码多环境复用?
- 容器环境变量 + 多版本镜像 + 挂载独立配置。
Q5:出问题找不到人?社区哪里活跃?
- 推荐用:
- 官方文档:https://docs.docker.com/zh/
- Docker Hub & Awesome Docker
- Github、思否、V2EX、各大云厂商社区
进阶学习推荐:
- Awesome Docker
- Docker + K8s 部署微服务
- 制作属于自己的基础镜像(multi-stage build)
- 持续集成 CI/CD(如 Github Actions、Gitlab CI)
七、结语
通过本文丰富的实战案例和经验小结,你可以在各类云平台、开发和运维场景下,快速上手并高效维护 Docker 化项目。想进一步了解 Kubernetes、容器安全和自动化运维,欢迎关注后续分享!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Luoke‘s Blog!