GitHub_Trending/cs/cs249r_book开发环境:Docker Compose一键部署
为什么选择Docker容器化部署
传统开发环境配置往往需要手动安装系统依赖、TeX Live、R和Python包等组件,整个过程耗时约45分钟,且容易出现环境不一致问题。而通过Docker容器化方案,可将Linux环境的构建时间从45分钟缩短至5-10分钟,大幅提升开发效率。
容器化架构概览
核心策略
- Linux环境:采用预构建容器包含所有依赖组件,每周自动重建并推送到GitHub Container Registry
- Windows环境:保持传统构建方式不变
- 镜像管理:使用GitHub Container Registry (ghcr.io)存储容器镜像
性能对比
传统Linux构建(45分钟):
├── 安装系统包 (5-10分钟)
├── 安装TeX Live (15-20分钟)
├── 安装R包 (5-10分钟)
├── 安装Python包 (2-5分钟)
├── 安装Quarto (1-2分钟)
└── 构建内容 (5-10分钟)
容器化Linux构建(5-10分钟):
├── 拉取容器 (30秒)
├── 检出代码 (30秒)
└── 构建内容 (5-10分钟)
准备工作
环境要求
- Docker Engine 20.10+
- Git
- 网络连接(用于拉取容器镜像和代码)
获取项目代码
git clone https://gitcode.com/GitHub_Trending/cs/cs249r_book
cd GitHub_Trending/cs/cs249r_book
容器镜像信息
可用镜像
- Linux镜像:
ghcr.io/harvard-edge/cs249r_book/quarto-linux - Windows镜像:
ghcr.io/harvard-edge/cs249r_book/quarto-windows
镜像标签
latest:最新稳定版main:主分支构建版dev:开发版本- 分支特定标签:如
feature/new-component
镜像内容
Linux容器预装以下组件:
- 系统:Ubuntu 22.04
- TeX Live:完整发行版
- R:R-base及所有依赖包
- Python:Python 3.13及依赖
- Quarto:1.7.31版本
- 工具:Inkscape、Ghostscript、字体等
本地构建容器
Linux容器构建
docker build -f docker/linux/Dockerfile -t mlsysbook-linux .
Dockerfile定义了完整的构建流程,包含12个主要阶段:
- 依赖文件复制
- 系统依赖安装
- Inkscape安装
- Ghostscript安装
- TeX Live安装
- R安装
- R包安装
- Python安装
- Quarto安装
- Python包安装
- R包验证
- 全面清理
Windows容器构建
docker build -f docker/windows/Dockerfile -t mlsysbook-windows .
运行容器
基本运行命令
# 运行Linux容器
docker run -it --rm -v $(pwd):/workspace mlsysbook-linux /bin/bash
# 在容器内构建项目
quarto render quarto/index.qmd --to html
Docker Compose支持
虽然项目目前未提供docker-compose.yml文件,但可创建以下配置实现一键部署:
version: '3'
services:
mlsysbook:
image: ghcr.io/harvard-edge/cs249r_book/quarto-linux:latest
volumes:
- .:/workspace
working_dir: /workspace
command: quarto render quarto/index.qmd --to html
保存为docker-compose.yml后,运行:
docker-compose up
使用GitHub Actions自动构建
项目提供了完整的GitHub Actions工作流配置:
quarto-build-container.yml:容器化构建工作流build-linux-container.yml:Linux容器构建工作流build-windows-container.yml:Windows容器构建工作流
可通过以下命令手动触发构建测试:
gh workflow run quarto-build-container.yml --field os=ubuntu-latest --field format=html
容器维护与更新
定期更新
容器每周自动重建:
- Linux容器:每周日0点
- Windows容器:每周日2点
手动更新
# 拉取最新镜像
docker pull ghcr.io/harvard-edge/cs249r_book/quarto-linux:latest
# 重新构建本地镜像
docker build --no-cache -f docker/linux/Dockerfile -t mlsysbook-linux .
故障排除
常见问题解决
-
容器构建失败
- 检查容器构建日志:GitHub Actions
- 验证依赖文件是否最新
- 本地测试构建:
docker build -t test .
-
构建问题
- 确认容器存在:
ghcr.io/harvard-edge/cs249r_book/quarto-linux:latest - 验证容器依赖是否完整
- 与传统构建日志对比
- 确认容器存在:
-
性能问题
- 监控容器拉取时间
- 检查容器内磁盘空间
- 验证内存分配
回滚方案
如果容器化构建出现问题,可回退到传统构建方式:
# 使用传统构建工作流
gh workflow run quarto-build-baremetal.yml
安全考虑
- 使用官方Ubuntu基础镜像
- 最小化攻击面
- 定期更新基础镜像
- 启用GitHub安全扫描
- 所有构建在隔离容器中运行
未来增强计划
- 多阶段构建:减小镜像体积
- Windows容器优化:提升Windows构建性能
- 分层优化:加快镜像拉取速度
- 并行构建:支持多种格式并行构建
相关文档
- 容器构建详细文档:docs/CONTAINER_BUILDS.md
- 开发指南:docs/DEVELOPMENT.md
- 发布流程:docs/RELEASE_PROCESS.md
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



