328 lines
9.8 KiB
Markdown
328 lines
9.8 KiB
Markdown
# 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流水线,并配置高可用集群以满足生产环境需求。 |