9.8 KiB
Docker Compose部署
**本文档中引用的文件** - [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)目录
简介
本文档全面阐述了RCoder项目的Docker Compose部署方案。通过分析docker-compose.yml文件、构建脚本和部署流程,详细说明了一键部署的实现机制。文档涵盖了服务编排、环境配置、多环境差异、部署对比以及常见问题的排查方法,旨在为新手和经验丰富的运维人员提供完整的部署指导。
项目结构
RCoder项目采用模块化设计,主要包含crates核心组件、docker部署脚本和配置文件。部署相关文件集中在docker目录下,包括Dockerfile、docker-compose.yml和一系列shell脚本。
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部署的核心组件,包括服务定义、构建流程和启动机制。通过环境变量注入、卷挂载和网络配置,实现了灵活的部署方案。
节源
架构概述
RCoder的Docker Compose部署采用单服务架构,主服务rcoder包含所有必要组件。部署架构通过分层设计实现了构建、部署和运行的分离。
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
图源
详细组件分析
Docker Compose配置分析
docker-compose.yml文件定义了rcoder服务的完整配置,包括镜像、端口、环境变量、卷挂载和健康检查。
服务定义
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
图源
环境变量配置
服务通过环境变量实现灵活配置,支持默认值和变量替换机制。
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
图源
构建与部署流程
构建脚本分析
build.sh脚本实现了镜像的自动化构建流程,包含错误检查和构建成功提示。
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
图源
部署脚本分析
deploy.sh脚本实现了完整的部署流程,包括依赖检查、镜像构建和容器启动。
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
图源
启动脚本分析
start-rcoder.sh脚本负责容器内的服务启动和环境初始化。
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
图源
依赖分析
服务依赖关系
RCoder服务依赖于宿主机的Docker守护进程,通过挂载Docker Socket实现容器管理功能。
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
图源
配置文件依赖
系统通过多层配置机制实现灵活的环境适配,优先级从高到低为:命令行参数 > 环境变量 > 配置文件 > 默认值。
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
图源
性能考虑
Docker Compose部署方案在性能方面具有以下特点:
- 启动时间:由于需要拉取镜像和启动容器,首次启动时间较长
- 资源占用:容器化部署增加了少量资源开销,但提供了更好的隔离性
- 网络性能:通过端口映射和内部网络通信,网络延迟极低
- 存储性能:使用卷挂载,文件I/O性能接近原生
对于生产环境,建议:
- 预先构建镜像以减少部署时间
- 配置适当的资源限制防止资源耗尽
- 使用持久化存储确保数据安全
- 启用健康检查确保服务可用性
故障排除指南
常见问题及解决方案
服务启动失败
可能原因:
- 必要文件缺失
- 镜像构建失败
- 端口被占用
- Docker Socket权限不足
解决方案:
- 检查
docker-compose.yml和Dockerfile是否存在 - 确认Docker服务正在运行
- 检查8087端口是否被其他进程占用
- 确保用户有访问
/var/run/docker.sock的权限
网络连接超时
可能原因:
- 容器网络配置错误
- 防火墙阻止连接
- 服务未正确启动
解决方案:
- 检查
docker-compose.yml中的网络配置 - 验证容器是否在
agent-network网络中 - 使用
docker logs查看服务日志 - 检查防火墙设置
配置加载异常
可能原因:
- 环境变量未正确设置
- 配置文件格式错误
- 卷挂载路径不正确
解决方案:
- 检查
deploy.sh中的环境变量设置 - 验证
config.yml的YAML格式 - 确认卷挂载路径在宿主机上存在
- 使用
docker exec进入容器验证配置文件位置
节源
结论
RCoder的Docker Compose部署方案提供了一套完整、可靠的部署机制。通过build.sh和deploy.sh脚本实现了一键部署,降低了部署复杂度。docker-compose.yml文件清晰地定义了服务配置,包括端口映射、卷挂载和环境变量注入。
与独立Docker部署相比,Docker Compose方案具有以下优势:
- 简化管理:通过单一配置文件管理多个服务
- 环境一致性:确保开发、测试和生产环境的一致性
- 依赖管理:自动处理服务间的依赖关系
- 可移植性:配置文件可在不同环境中复用
对于高级用户,可以进一步集成监控系统、实现自动化CI/CD流水线,并配置高可用集群以满足生产环境需求。