1. 环境准备从零搭建Docker战场第一次在Windows 11上折腾Docker时我对着报错提示发呆了半小时。后来才发现现代开发环境就像乐高积木缺了哪块都搭不起来。咱们先从最基础的零件准备开始我会把当年踩过的坑都标成警示牌。Windows系统有个特别之处——它需要WSLWindows Subsystem for Linux作为Docker的运行时环境。这就像给Windows装了个Linux灵魂下载最新版WSL时建议直接到微软官网获取稳定版本。安装完成后有个隐藏关卡必须重启系统才能激活全部功能这个步骤很多人会忽略导致后续Docker服务启动失败。Docker Desktop的安装包虽然只有500MB左右但默认使用国外镜像源下载依赖时速度可能只有10KB/s。我推荐在安装前先修改Docker Engine配置加入国内镜像加速地址。实测下来阿里云和腾讯云的镜像源速度最稳定配置示例如下{ registry-mirrors: [ https://你的ID.mirror.aliyuncs.com, https://mirror.ccs.tencentyun.com ] }遇到镜像拉取失败时别急着重试。先运行docker info检查镜像源是否生效再通过ping测试镜像域名连通性。有时候简单的网络问题会浪费数小时我就曾因为公司代理设置导致所有镜像都无法下载。2. 前端作战室Vue项目的容器化改造若依的前端工程ruoyi-ui是个标准Vue项目但要让它在Docker里跑起来需要解决三个关键问题静态资源部署、路由兼容性和API代理。记得第一次部署时我忘了处理history模式的路由结果所有页面刷新都变成404。Nginx配置是前端容器化的核心这个配置文件就像交通指挥员server { listen 80; location / { root /usr/share/nginx/html; try_files $uri $uri/ /index.html; } location /prod-api/ { proxy_pass http://ruoyi-backend:8848/; proxy_set_header Host $host; } }重点注意proxy_pass最后的斜杠——它决定了请求路径是否被重写。有次线上事故就是因为漏了这个斜杠导致所有API请求都多了/prod-api前缀。建议在Dockerfile里增加配置校验步骤FROM nginx:1.22 RUN nginx -t # 构建时验证配置语法 COPY dist/ /usr/share/nginx/html/ COPY nginx.conf /etc/nginx/conf.d/default.conf构建镜像时有个效率技巧合理利用层缓存。应该把变动频率低的指令放在前面比如基础镜像选择。而COPY这类易变动的操作放在最后这样重新构建时能复用缓存层。实测下来这种优化能让构建时间从3分钟缩短到20秒。3. 后端攻坚战SpringBoot的Docker生存指南后端服务容器化最大的坑在于环境变量管理。若依的配置文件application.yml中有数据库和Redis连接配置直接打包进镜像会导致环境适应性差。后来我找到个妙招用Docker的-e参数动态注入docker run -d -e SPRING_DATASOURCE_URLjdbc:mysql://ruoyi-db:3306/ry-vue ...但更专业的做法是使用Docker的多阶段构建。先在构建阶段用Maven打包再创建轻量级的运行时镜像。这样生成的镜像能从300MB瘦身到120MB左右FROM maven:3.8-openjdk-8 AS builder COPY pom.xml . RUN mvn dependency:go-offline COPY src/ ./src/ RUN mvn package -DskipTests FROM openjdk:8-jre COPY --frombuilder target/ruoyi-admin.jar /app.jar ENTRYPOINT [java,-jar,/app.jar]健康检查是生产环境必备项。在docker-compose里配置健康探针后服务间依赖才能真正生效。有次MySQL启动较慢导致后端服务连环崩溃加上健康检查后就再没出现过healthcheck: test: [CMD, curl, -f, http://localhost:8848] interval: 10s timeout: 5s retries: 34. 云端会师腾讯云上的Docker编排实战把本地调试好的服务搬到云服务器就像把盆栽移植到野外。腾讯云的CentOS系统默认防火墙规则会拦截Docker端口记得先开闸放行firewall-cmd --permanent --add-port80/tcp firewall-cmd --permanent --add-port8848/tcp firewall-cmd --reload数据库持久化是云部署的生命线。我吃过没挂载数据卷的亏容器重建后所有数据灰飞烟灭。正确的姿势应该是volumes: ruoyi-data: driver_opts: type: none device: /data/mysql o: binddocker-compose的魔法在于服务发现。通过自定义网络容器间可以用服务名直接通信不用关心IP变化。但要注意网络别名和服务名的区别有次我把ruoyi-db写成db导致连接失败networks: ruoyi-net: driver: bridge ipam: config: - subnet: 172.28.0.0/16最后的部署命令暗藏玄机。直接docker-compose up会占用终端生产环境应该用-d参数后台运行。当需要查看实时日志时可以用docker-compose logs -f追尾日志比直接docker logs更方便观察多个服务的联动情况。