# seata_demo **Repository Path**: xinwei8_admin/seata_demo ## Basic Information - **Project Name**: seata_demo - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-10 - **Last Updated**: 2025-12-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Seata Demo 项目说明 ## 项目结构 ``` seata_demo ├── gateway-service # 网关服务 ├── order-service # 订单服务 ├── product-service # 产品服务 └── user-service # 用户服务 ``` ## Docker部署说明 ### 1. 构建镜像 #### 构建缓存说明 Docker在构建镜像时会使用缓存机制来提高构建速度。以下是两种构建方式的区别: 1. 使用缓存构建(`docker build`): - 速度快:重用之前构建的层 - 适用场景: - 日常开发中的增量代码修改 - 仅改动了源代码,依赖没有变化 - 工作原理: - Docker会对比每一层的构建指令和内容 - 如果某一层没有变化,则使用缓存 - 一旦某一层发生变化,其后的所有层都会重新构建 2. 不使用缓存构建(`docker build --no-cache`): - 速度慢:完全重新构建所有层 - 适用场景: - 依赖版本升级 - 基础镜像更新 - 排查缓存导致的问题 - 确保构建最新的依赖 - 工作原理: - 忽略所有已有的缓存层 - 重新执行Dockerfile中的所有指令 - 重新下载和安装所有依赖 #### 缓存示例说明 假设我们有以下Dockerfile: ```dockerfile # 第1层:基础镜像 FROM openjdk:17-slim # 第2层:创建目录 RUN mkdir -p /app WORKDIR /app # 第3层:复制jar包 COPY target/app.jar ./app.jar # 第4层:设置启动命令 ENTRYPOINT ["java","-jar","app.jar"] ``` 场景分析: 1. 修改了代码但没改依赖(使用缓存): - 只有第3层(COPY命令)会重新执行 - 第1、2、4层会使用缓存 - 构建速度快 2. 更新了基础镜像(需要--no-cache): - 所有层都会重新构建 - 确保获取最新的基础镜像和依赖 - 构建速度慢 3. 缓存可能导致的问题: - 基础镜像的安全更新没有及时应用 - 依赖包的版本没有更新到最新 - 系统环境变量等配置没有更新 #### 不使用缓存构建(完全重新构建) ```bash # 构建单个服务 cd gateway-service docker build --no-cache -t gateway-service . cd ../order-service docker build --no-cache -t order-service . cd ../product-service docker build --no-cache -t product-service . cd ../user-service docker build --no-cache -t user-service . # 或使用docker-compose构建所有服务 docker-compose build --no-cache ``` #### 使用缓存构建(常规构建) ```bash # 构建单个服务 cd gateway-service docker build -t gateway-service . # 或使用docker-compose构建所有服务 docker-compose build ``` ### 2. 运行服务 #### 使用docker run运行(可访问宿主机服务) ##### Windows/Mac环境 ```bash # Gateway Service docker run -d \ --name gateway-service \ --restart always \ -p 8080:8080 \ -e spring.cloud.nacos.discovery.server-addr=host.docker.internal:8848 \ -e spring.cloud.nacos.config.server-addr=host.docker.internal:8848 \ gateway-service # Order Service docker run -d \ --name order-service \ --restart always \ -p 8083:8083 \ -e spring.cloud.nacos.discovery.server-addr=host.docker.internal:8848 \ -e spring.cloud.nacos.config.server-addr=host.docker.internal:8848 \ order-service # Product Service docker run -d \ --name product-service \ --restart always \ -p 8081:8081 \ -e spring.cloud.nacos.discovery.server-addr=host.docker.internal:8848 \ -e spring.cloud.nacos.config.server-addr=host.docker.internal:8848 \ product-service # User Service docker run -d \ --name user-service \ --restart always \ -p 8084:8084 \ -e spring.cloud.nacos.discovery.server-addr=host.docker.internal:8848 \ -e spring.cloud.nacos.config.server-addr=host.docker.internal:8848 \ user-service ``` ##### Linux环境 ```bash # 需要替换YOUR_HOST_IP为实际的宿主机IP地址 # Gateway Service docker run -d \ --name gateway-service \ --restart always \ -p 8080:8080 \ -e spring.cloud.nacos.discovery.server-addr=YOUR_HOST_IP:8848 \ -e spring.cloud.nacos.config.server-addr=YOUR_HOST_IP:8848 \ gateway-service ``` #### 容器命名和重启策略说明 1. 容器命名(--name): - 方便识别:给容器一个有意义的名称 - 方便管理:可以通过名称而不是容器ID来操作容器 - 方便链接:其他容器可以通过名称来访问 2. 重启策略(--restart): - `no`:默认策略,容器退出时不重启 - `always`:容器退出时总是重启 - `unless-stopped`:容器退出时总是重启,但不考虑在Docker守护进程启动时就已经停止了的容器 - `on-failure[:max-retries]`:容器退出时重启,但是只有当容器的退出状态为非0时 使用示例: ```bash # 使用容器名称查看日志 docker logs -f gateway-service # 使用容器名称进入容器 docker exec -it gateway-service /bin/sh # 使用容器名称停止容器 docker stop gateway-service # 使用容器名称启动容器 docker start gateway-service ``` #### 使用host网络模式运行(直接使用宿主机网络) ```bash # Gateway Service docker run -d \ --name gateway-service \ --restart always \ --network host \ gateway-service # Order Service docker run -d \ --name order-service \ --restart always \ --network host \ order-service # Product Service docker run -d \ --name product-service \ --restart always \ --network host \ product-service # User Service docker run -d \ --name user-service \ --restart always \ --network host \ user-service ``` ### 3. 常用Docker命令 #### 查看容器状态 ```bash # 查看所有容器 docker ps -a # 查看容器日志 docker logs -f [container_id] ``` #### 停止和删除容器 ```bash # 停止所有容器 docker stop $(docker ps -aq) # 删除所有容器 docker rm $(docker ps -aq) # 删除所有镜像 docker rmi $(docker images -q) ``` #### 进入容器 ```bash docker exec -it [container_id] /bin/sh ``` ### 4. 使用docker-compose(推荐) #### 启动所有服务 ```bash docker-compose up -d ``` #### 查看服务日志 ```bash # 查看所有服务日志 docker-compose logs -f # 查看特定服务日志 docker-compose logs -f gateway-service ``` #### 停止所有服务 ```bash docker-compose down ``` ### 5. 常见问题处理 1. 如果遇到端口占用问题: ```bash # 查看端口占用 lsof -i:8080 # 或 netstat -tunlp | grep 8080 ``` 2. 如果需要清理Docker资源: ```bash # 清理未使用的镜像、容器等 docker system prune -a ``` 3. 如果需要重新加载配置: ```bash docker-compose up -d --force-recreate ```