Files
qiming/qiming-rcoder/.qoder/repowiki/zh/content/部署指南/Docker Compose部署.md
2026-06-01 13:54:52 +08:00

328 lines
9.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Docker Compose部署
<cite>
**本文档中引用的文件**
- [docker-compose.yml](file://docker/docker-compose.yml)
- [build.sh](file://docker/scripts/build.sh)
- [deploy.sh](file://docker/scripts/deploy.sh)
- [Dockerfile](file://docker/Dockerfile)
- [start-rcoder.sh](file://docker/start-rcoder.sh)
- [config.yml](file://config.yml)
- [README.md](file://README.md)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构概述](#架构概述)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
## 简介
本文档全面阐述了RCoder项目的Docker Compose部署方案。通过分析`docker-compose.yml`文件、构建脚本和部署流程,详细说明了一键部署的实现机制。文档涵盖了服务编排、环境配置、多环境差异、部署对比以及常见问题的排查方法,旨在为新手和经验丰富的运维人员提供完整的部署指导。
## 项目结构
RCoder项目采用模块化设计主要包含crates核心组件、docker部署脚本和配置文件。部署相关文件集中在docker目录下包括Dockerfile、docker-compose.yml和一系列shell脚本。
```mermaid
graph TB
subgraph "部署脚本"
build[build.sh]
deploy[deploy.sh]
start[start-rcoder.sh]
end
subgraph "配置文件"
compose[docker-compose.yml]
dockerfile[Dockerfile]
config[config.yml]
end
subgraph "核心代码"
crates[crates/]
end
build --> dockerfile
deploy --> compose
deploy --> build
start --> compose
config --> compose
compose --> dockerfile
```
**图源**
- [docker-compose.yml](file://docker/docker-compose.yml)
- [build.sh](file://docker/scripts/build.sh)
- [deploy.sh](file://docker/scripts/deploy.sh)
**节源**
- [docker-compose.yml](file://docker/docker-compose.yml)
- [build.sh](file://docker/scripts/build.sh)
- [deploy.sh](file://docker/scripts/deploy.sh)
## 核心组件
本节分析Docker Compose部署的核心组件包括服务定义、构建流程和启动机制。通过环境变量注入、卷挂载和网络配置实现了灵活的部署方案。
**节源**
- [docker-compose.yml](file://docker/docker-compose.yml)
- [Dockerfile](file://docker/Dockerfile)
- [start-rcoder.sh](file://docker/start-rcoder.sh)
## 架构概述
RCoder的Docker Compose部署采用单服务架构主服务rcoder包含所有必要组件。部署架构通过分层设计实现了构建、部署和运行的分离。
```mermaid
graph TD
A[用户] --> B[deploy.sh]
B --> C{镜像存在?}
C --> |否| D[build.sh]
C --> |是| E[docker-compose up]
D --> F[Docker构建]
F --> G[rcoder镜像]
G --> E
E --> H[rcoder容器]
H --> I[项目工作目录]
H --> J[Docker Socket]
H --> K[日志目录]
style H fill:#f9f,stroke:#333
style I fill:#bbf,stroke:#333
style J fill:#f96,stroke:#333
style K fill:#6f9,stroke:#333
```
**图源**
- [deploy.sh](file://docker/scripts/deploy.sh)
- [build.sh](file://docker/scripts/build.sh)
- [docker-compose.yml](file://docker/docker-compose.yml)
## 详细组件分析
### Docker Compose配置分析
`docker-compose.yml`文件定义了rcoder服务的完整配置包括镜像、端口、环境变量、卷挂载和健康检查。
#### 服务定义
```mermaid
classDiagram
class RcoderService {
+image : string
+ports : array
+environment : array
+volumes : array
+command : array
+healthcheck : object
+restart : string
+networks : array
}
RcoderService : "使用" --> DockerSocket
RcoderService : "挂载" --> ProjectWorkspace
RcoderService : "挂载" --> Logs
RcoderService : "挂载" --> Specs
RcoderService : "连接" --> AgentNetwork
```
**图源**
- [docker-compose.yml](file://docker/docker-compose.yml)
#### 环境变量配置
服务通过环境变量实现灵活配置,支持默认值和变量替换机制。
```mermaid
flowchart TD
Start([启动]) --> TZ["设置时区: Asia/Shanghai"]
TZ --> RUST_LOG["设置日志级别: debug"]
RUST_LOG --> RCODER_PORT["设置服务端口: ${RCODER_PORT:-8087}"]
RCODER_PORT --> DOCKER_SOCKET["设置Docker Socket路径"]
DOCKER_SOCKET --> End([配置完成])
style Start fill:#f9f,stroke:#333
style End fill:#f9f,stroke:#333
```
**图源**
- [docker-compose.yml](file://docker/docker-compose.yml)
### 构建与部署流程
#### 构建脚本分析
`build.sh`脚本实现了镜像的自动化构建流程,包含错误检查和构建成功提示。
```mermaid
sequenceDiagram
participant User
participant BuildScript
participant Docker
User->>BuildScript : 执行 ./build.sh
BuildScript->>BuildScript : 检查 docker-compose.yml
alt 文件存在
BuildScript->>Docker : docker build 命令
Docker-->>BuildScript : 构建结果
alt 构建成功
BuildScript-->>User : 显示成功信息
else 构建失败
BuildScript-->>User : 显示失败信息并退出
end
else 文件不存在
BuildScript-->>User : 显示错误并退出
end
```
**图源**
- [build.sh](file://docker/scripts/build.sh)
#### 部署脚本分析
`deploy.sh`脚本实现了完整的部署流程,包括依赖检查、镜像构建和容器启动。
```mermaid
sequenceDiagram
participant User
participant DeployScript
participant BuildScript
participant DockerCompose
User->>DeployScript : 执行 ./deploy.sh
DeployScript->>DeployScript : 检查必要文件
alt 文件完整
DeployScript->>DeployScript : 检查镜像存在
alt 镜像不存在
DeployScript->>BuildScript : 调用 ./build.sh
BuildScript-->>DeployScript : 构建结果
alt 构建失败
DeployScript-->>User : 显示失败信息
end
end
DeployScript->>DockerCompose : docker-compose up -d
DockerCompose-->>DeployScript : 启动结果
alt 启动成功
DeployScript-->>User : 显示成功信息和管理命令
else 启动失败
DeployScript-->>User : 显示失败信息
end
else 文件缺失
DeployScript-->>User : 显示错误并退出
end
```
**图源**
- [deploy.sh](file://docker/scripts/deploy.sh)
- [build.sh](file://docker/scripts/build.sh)
### 启动脚本分析
`start-rcoder.sh`脚本负责容器内的服务启动和环境初始化。
```mermaid
flowchart TD
A[启动脚本] --> B[设置环境变量]
B --> C[创建必要目录]
C --> D[显示环境配置]
D --> E[启动rcoder服务]
E --> F[执行rcoder二进制]
style A fill:#f9f,stroke:#333
style F fill:#f9f,stroke:#333
```
**图源**
- [start-rcoder.sh](file://docker/start-rcoder.sh)
## 依赖分析
### 服务依赖关系
RCoder服务依赖于宿主机的Docker守护进程通过挂载Docker Socket实现容器管理功能。
```mermaid
graph LR
RcoderService --> DockerDaemon
DockerDaemon --> HostSystem
RcoderService --> ProjectWorkspace
RcoderService --> LogStorage
RcoderService --> SpecFiles
style RcoderService fill:#f9f,stroke:#333
style DockerDaemon fill:#f96,stroke:#333
style HostSystem fill:#bbf,stroke:#333
```
**图源**
- [docker-compose.yml](file://docker/docker-compose.yml)
- [config.yml](file://config.yml)
### 配置文件依赖
系统通过多层配置机制实现灵活的环境适配,优先级从高到低为:命令行参数 > 环境变量 > 配置文件 > 默认值。
```mermaid
graph TB
A[命令行参数] --> B[环境变量]
B --> C[config.yml]
C --> D[默认配置]
D --> E[应用]
style A fill:#f96,stroke:#333
style B fill:#f96,stroke:#333
style C fill:#f96,stroke:#333
style D fill:#f96,stroke:#333
```
**图源**
- [config.yml](file://config.yml)
- [README.md](file://README.md)
## 性能考虑
Docker Compose部署方案在性能方面具有以下特点
- **启动时间**:由于需要拉取镜像和启动容器,首次启动时间较长
- **资源占用**:容器化部署增加了少量资源开销,但提供了更好的隔离性
- **网络性能**:通过端口映射和内部网络通信,网络延迟极低
- **存储性能**使用卷挂载文件I/O性能接近原生
对于生产环境,建议:
1. 预先构建镜像以减少部署时间
2. 配置适当的资源限制防止资源耗尽
3. 使用持久化存储确保数据安全
4. 启用健康检查确保服务可用性
## 故障排除指南
### 常见问题及解决方案
#### 服务启动失败
**可能原因**
- 必要文件缺失
- 镜像构建失败
- 端口被占用
- Docker Socket权限不足
**解决方案**
1. 检查`docker-compose.yml``Dockerfile`是否存在
2. 确认Docker服务正在运行
3. 检查8087端口是否被其他进程占用
4. 确保用户有访问`/var/run/docker.sock`的权限
#### 网络连接超时
**可能原因**
- 容器网络配置错误
- 防火墙阻止连接
- 服务未正确启动
**解决方案**
1. 检查`docker-compose.yml`中的网络配置
2. 验证容器是否在`agent-network`网络中
3. 使用`docker logs`查看服务日志
4. 检查防火墙设置
#### 配置加载异常
**可能原因**
- 环境变量未正确设置
- 配置文件格式错误
- 卷挂载路径不正确
**解决方案**
1. 检查`deploy.sh`中的环境变量设置
2. 验证`config.yml`的YAML格式
3. 确认卷挂载路径在宿主机上存在
4. 使用`docker exec`进入容器验证配置文件位置
**节源**
- [deploy.sh](file://docker/scripts/deploy.sh)
- [docker-compose.yml](file://docker/docker-compose.yml)
- [config.yml](file://config.yml)
## 结论
RCoder的Docker Compose部署方案提供了一套完整、可靠的部署机制。通过`build.sh``deploy.sh`脚本实现了一键部署,降低了部署复杂度。`docker-compose.yml`文件清晰地定义了服务配置,包括端口映射、卷挂载和环境变量注入。
与独立Docker部署相比Docker Compose方案具有以下优势
- **简化管理**:通过单一配置文件管理多个服务
- **环境一致性**:确保开发、测试和生产环境的一致性
- **依赖管理**:自动处理服务间的依赖关系
- **可移植性**:配置文件可在不同环境中复用
对于高级用户可以进一步集成监控系统、实现自动化CI/CD流水线并配置高可用集群以满足生产环境需求。