当前位置: 首页 > news >正文

Docker 容器 + Docker Compose单机部署理发店系统

之前使用docker+docker的自定义桥接网络部署好了理发店系统。

一、自定义网络和Compose区别

docker+docker自定义网络 和 docker+docker compose;这两种部署方式的核心区别在于:"手动拼积木" vs "按图纸一键组装"。对于部署一个包含后端、数据库、缓存等多服务的理发店系统,使用docker+docker network手动管理,和用docker-compose编排,体验和效率会有天壤之别。

我把它们的区别和好处整理成了一个表格,方便你对比查看:

对比维度纯 Docker 命令 (docker + docker network)Docker Compose (docker-compose)
工作方式命令式,手动逐条输入docker run ...指令。声明式,在docker-compose.yml文件中定义所有服务。
配置管理配置分散在命令行参数中,难以记录和复用。所有配置(镜像、端口、环境变量)集中在YAML文件,可纳入版本控制。
服务依赖需手动控制启动顺序,或编写脚本等待。通过depends_on自动管理服务启动顺序(例如先启动数据库,再启动应用)。
网络管理需要手动docker network create并让容器加入指定网络。自动创建网络,容器间可通过服务名直接通信(如应用连接db:3306)。
操作指令启动、停止、删除每个服务都需单独执行命令。一条命令docker-compose up -d启动所有服务;docker-compose down一键清理。
适用场景单容器测试、临时任务。多容器应用开发、测试及中小型生产环境

二、环境准备

本次直接把数据库、后端、前端都通过docker compose部署了。

规模中大的产品会把数据库单独部署,但是我是学习阶段,把数据库也部署到docker compose了。

所以准备阶段,一定先把后端、前端、docker-compose.yml、数据库执行脚本(创建表、创建初始值,生成初始库的脚本)放在同一个目录

结构如下:

/root/barbershop/ ├── docker-compose.yml ├── dump-lfd-202606080947.sql # ← 必须放在这里 ├── barbershop-backend/ │ ├── Dockerfile │ └── barbershop-backend-1.0.0.jar └── barbershop-frontend/ ├── Dockerfile ├── nginx.conf └── dist/

三、打开网桥

1、打开网桥,执行如下脚本

不然虚拟机无法到互联网下载东西

#!/bin/bash # 确保设置永久生效 echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/99-docker.conf # 立即应用所有 sysctl 设置 sysctl -p /etc/sysctl.d/99-docker.conf # 重启 Docker 服务,确保配置生效 systemctl restart docker

四、docker-compose.yml配置如下

# ================================================================ # Docker Compose 配置文件 - 理发店管理系统 # ================================================================ # 文件格式版本: 3.8(Docker Compose v2.x 完全支持) # 使用说明: # 启动: docker-compose up -d # 停止: docker-compose down # 查看状态: docker-compose ps # 查看日志: docker-compose logs -f # 重启: docker-compose restart # ================================================================ version: '3.8' # ================================================================ # 服务定义(三个服务:数据库、后端、前端) # ================================================================ services: # -------------------------------------------------------------- # 1. MySQL 数据库服务 # -------------------------------------------------------------- mysql: # 服务名: 后端代码中用 "mysql" 连接数据库 # 例: jdbc:mysql://mysql:3306/LFD # 使用官方 MySQL 8.0 镜像 image: mysql:8.0 # 容器名(命令行操作时使用) # 例: docker logs barbershop-mysql container_name: barbershop-mysql # 环境变量(容器启动时自动执行) environment: # root 用户密码(必须设置,否则容器无法启动) MYSQL_ROOT_PASSWORD: 数据库root密码 # 自动创建数据库 LFD MYSQL_DATABASE: 数据库名LFD # 自动创建普通用户 LFD(应用程序使用) MYSQL_USER: 用户名LFD # 普通用户密码(必须和后端 application.yml 一致) MYSQL_PASSWORD: 用户名LFD密码 # 端口映射: 宿主机:容器 # 宿主机 3306 映射到容器 3306,方便 DBeaver 等工具连接 ports: - "3306:3306" # 数据持久化(容器删除数据不丢失) volumes: # 数据库文件: 宿主机 /data/barbershop/mysql → 容器 /var/lib/mysql # 注意: 此目录需要提前创建: mkdir -p /data/barbershop/mysql - /data/barbershop/mysql:/var/lib/mysql # 初始化脚本: 首次启动时自动导入备份数据 # 注意: dump-lfd-202606080947.sql 放在 docker-compose.yml 同级目录 - ./dump-lfd-202606080947.sql:/docker-entrypoint-initdb.d/init.sql # 网络: 加入 barbershop-net 网络,与其他容器通信 networks: - barbershop-net # 重启策略: 除非手动停止,否则总是自动重启 # 服务器重启、容器崩溃都会自动恢复 restart: unless-stopped # 健康检查: 检测 MySQL 是否真正启动完成 healthcheck: # 执行 mysqladmin ping 检测数据库是否可用 test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-pJc19951221"] # 每 10 秒检测一次 interval: 10s # 单次检测超时 5 秒 timeout: 5s # 连续 5 次成功才标记为 healthy retries: 5 # 注意: 状态为 healthy 后,后端容器才会启动 # -------------------------------------------------------------- # 2. 后端 Spring Boot 服务 # -------------------------------------------------------------- lfd: # 服务名: 与 nginx.conf 中的 proxy_pass http://lfd:8081/api/ 一致 # 前端 Nginx 通过此名称访问后端 # 构建镜像: 使用 /home/lfd/houduan 目录下的 Dockerfile # Dockerfile 内容: 将 jar 包打包成可运行镜像 build: /home/lfd/houduan dns: - 8.8.8.8 - 114.114.114.114 # 容器名(命令行操作使用) container_name: barbershop-backend # 端口映射: 宿主机 8081 → 容器 8081 # 用户可通过 http://服务器IP:8081/api/ 直接访问后端 ports: - "8081:8081" # 数据持久化: 上传文件保存在宿主机 volumes: # 用户上传的图片/文件存放在宿主机 /data/barbershop/uploads # 容器内路径为 /app/uploads(与 Dockerfile 中一致) - /data/barbershop/uploads:/app/uploads # 网络: 加入 barbershop-net networks: - barbershop-net # 依赖关系: 等待 MySQL 健康后再启动 depends_on: mysql: condition: service_healthy # 等 MySQL 健康检查通过 # 重启策略: 除非手动停止,否则自动重启 restart: unless-stopped # -------------------------------------------------------------- # 3. 前端 Vue + Nginx 服务 # -------------------------------------------------------------- frontend: # 服务名: 用于 Docker Compose 内部标识 # 构建镜像: 使用 /home/lfd/qianduan 目录下的 Dockerfile # Dockerfile 内容: 将 dist 静态文件 + nginx.conf 打包 build: /home/lfd/qianduan dns: - 8.8.8.8 - 114.114.114.114 # 容器名(命令行操作使用) container_name: barbershop-frontend # 端口映射: 宿主机 80 → 容器 80 # 用户通过 http://服务器IP/LFD/login 访问 # 端口 80 是 HTTP 默认端口,访问时可省略 ports: - "80:80" # 网络: 加入 barbershop-net networks: - barbershop-net # 依赖关系: 依赖后端,但不等待健康检查 # 前端 Nginx 启动很快,不需要等后端 depends_on: - lfd # 重启策略: 除非手动停止,否则自动重启 restart: unless-stopped # ================================================================ # 网络配置 # ================================================================ networks: # 自定义桥接网络 # 作用: 让三个容器在同一个网络内,通过服务名互相访问 barbershop-net: # bridge: 默认网络模式,同一网络内容器互通 driver: bridge

五、完整启动流程

# 1. 进入项目目录 cd /home/lfd # 2. 创建数据目录 mkdir -p /data/barbershop/mysql mkdir -p /data/barbershop/uploads # 3. 设置 MySQL 数据目录权限(必须) chown -R 999:999 /data/barbershop/mysql # 4. 确认文件存在 ls -la docker-compose.yml dump-lfd-202606080947.sql ls -la houduan/Dockerfile houduan/*.jar ls -la qianduan/Dockerfile qianduan/dist/ # 5. 启动 docker-compose up -d # 6. 查看状态 docker-compose ps # 7. 查看日志 docker-compose logs -f

六、验证成功标志

# 1. 查看容器状态,都是 Up docker-compose ps # 2. 测试前端 curl http://localhost/LFD/login # 3. 测试后端 curl http://localhost:8081/api/你的接口 # 4. 查看 MySQL 健康状态 docker ps | grep mysql # 应该显示 (healthy)

七、其他常用命令

后台启动全部 docker compose up -d 后台启动指定服务 docker compose up -d frontend 停止全部 docker compose stop 停止指定服务 docker compose stop frontend 启动全部 docker compose start 启动指定服务 docker compose start frontend 重启全部 docker compose restart 重启指定服务 docker compose restart lfd 删除全部 docker compose down 删除全部+数据卷(⚠️) docker compose down -v 查看状态 docker compose ps 查看日志 docker compose logs -f 查看指定服务日志 docker compose logs -f lfd 进入容器 docker compose exec lfd sh 重新构建并启动 docker compose up -d --build 拉取镜像并启动 docker compose pull && docker compose up -d

八、替换前端代码

替换前端包,重新构建前端,启动前端即可

# 1. 进入项目目录 cd /home/lfd # 2. 重新构建前端镜像(--no-cache 确保不使用旧缓存) docker compose build --no-cache frontend # 3. 重新创建并启动前端容器 docker compose up -d frontend # 4. 查看前端日志 docker compose logs -f frontend
http://www.jsqmd.com/news/1204909/

相关文章:

  • 跨越天际:从智能汽车到 eVTOL 的适航与系统级开发44——DAL A 级飞控计算机的非相似硬件与非相似软件设计体系
  • STM32 PWM蓝牙无线调光实战:从原理到物联网应用
  • 天津爱彼回收价格查询及靠谱回收平台实测排行(2026年7月最新数据) - 尊奢回收二奢平台
  • 2026年7月最新南宁格拉苏蒂官方售后客服电话及服务网点地址查询 - 亨得利钟表维修中心
  • OpenHarmony UART驱动开发实战与Hi3516DV300应用
  • Hyper-V与PowerShell高效管理虚拟机指南
  • C++二维数组实战:从遍历到优化,手把手实现方阵对角线求和
  • 【论文阅读】Agent 记忆机制(1):A-Mem——让 Agent 记忆从“存储”走向“自进化”
  • 厦门欧米茄回收价格查询与靠谱回收平台实测排行(2026年7月最新) - 嘉价奢侈品回收平台
  • Ollama-Python本地大模型调用:从安装到流式处理的完整指南
  • 写小说卡文、没灵感?实测 12 款能帮你“日更过万”的 AI 写小说软件大汇总(2025年终版)
  • RFID 资产标签批量生成技术落地实践 —— 机房资产管理配套打印方案
  • 编译原理:算符优先分析法
  • 鸿蒙应用开发实战【61】— 卡号颜色主题系统CardColor枚举映射
  • 大模型与知识库结合的自动化代码审查实践
  • Cesium 实战 36 - 地图鼠标移动事件功能
  • 【超详细】STM32F407ZGT6 + HAL库 手把手移植RT-Thread
  • 2026年7月最新万国北京双桥万达广场维修保养服务电话 - 万国中国官方服务中心
  • LVGL 9.5.0 嵌入式32位mcu的 ram/rom 精简
  • C++高性能IO架构:从Reactor模式到微秒级响应优化实战
  • 全平台QQ数据库逆向解密:原理、工具与实战指南
  • 华为OD机试C卷“记票统计”题解:双数据结构实现高效映射与顺序输出
  • Python编译安装SSL模块缺失问题深度解析与解决方案
  • fastadmin 最新版本V1.6.5.20260602记录
  • python数据可视化技巧的100个练习 -- 21. 网站流量数据的流图
  • SpringBoot通过Moquette集成MQTT Broker快速实现设备管理消息订阅与发布
  • C# 多线程进阶知识点(线程优先级、多委托传参、线程锁、死锁)
  • Liunx内核IO多路复用selector机制简介
  • 梁山派学习笔记1
  • 宝珀官方售后服务中心电话和完整地址实地考察报告_多信源验证(2026年7月更新) - 宝珀官方售后服务中心