一个用于快速创建和管理 CUDA 开发容器的自动化工具,为每个用户提供隔离的 GPU 开发环境。
- Linux 操作系统(推荐 Ubuntu 18.04+)
- Docker 已安装并运行
- NVIDIA 驱动已安装
- NVIDIA Container Toolkit(nvidia-docker2)已配置
- Root 权限
# 克隆项目
git clone https://github.com/biubushy/cuda-cenv.git
cd cuda-cenv
# 运行创建脚本(需要 sudo)
sudo bash scripts/create.sh脚本将引导你完成以下配置:
- 选择 Ubuntu 版本(18.04/20.04/22.04/24.04)
- 输入用户名和密码
- 配置 GPU/CPU/内存资源
- 设置端口映射
- 可选启用 VNC 远程桌面
容器创建成功后,你将获得:
| 服务 | 访问方式 |
|---|---|
| SSH | ssh <用户名>@localhost -p <SSH端口> |
| Code-server | http://localhost:<Code-server端口> |
| Web VNC | http://localhost:<Code-server端口>/proxy/6080/(需先登录 Code-server) |
| Syncthing | http://localhost:<Code-server端口>/proxy/8384/(需先登录 Code-server) |
本项目是一个 CUDA 容器环境自动化创建工具,主要用于:
- 为多用户提供隔离的 GPU 开发环境
- 快速部署深度学习/机器学习开发环境
- 统一管理服务器上的 CUDA 容器资源
| 特性 | 说明 |
|---|---|
| 🖥️ 多 Ubuntu 版本支持 | 18.04、20.04、22.04、24.04 |
| 🎮 GPU 资源隔离 | 支持指定 GPU 分配 |
| 📊 资源限制 | CPU、内存、共享内存可配置 |
| 🌐 Web IDE | 内置 Code-server(VS Code 网页版) |
| 🖼️ 远程桌面 | 可选 VNC + noVNC(支持中文) |
| 📁 文件同步 | 内置 Syncthing |
| 🐍 Python 环境 | 预装 Miniconda(清华镜像源) |
| 🐚 终端美化 | 预装 Oh-My-Zsh |
cuda-container-env/
├── scripts/
│ └── create.sh # 主创建脚本(交互式向导)
├── dockerfiles/
│ ├── base/
│ │ ├── Dockerfile.ubuntu18.04
│ │ ├── Dockerfile.ubuntu20.04
│ │ ├── Dockerfile.ubuntu22.04
│ │ └── Dockerfile.ubuntu24.04
│ └── scripts/
│ ├── image-init.sh # 镜像构建时初始化脚本
│ └── user-init.sh # 用户首次登录初始化脚本
├── configs/
│ ├── .workspace_config # 工作目录配置(自动生成)
│ ├── banner.txt # 登录欢迎信息(自定义)
│ └── banner.example.txt # 欢迎信息模板
├── assets/
│ └── oh-my-zsh-pkg.tar.gz # Oh-My-Zsh 预打包资源
├── data/
│ └── containers/ # 容器信息记录
└── README.md
┌─────────────────────────────────────────────────────────────────┐
│ create.sh 主脚本 │
├─────────────────────────────────────────────────────────────────┤
│ 1. 环境检查 (Docker, NVIDIA Docker) │
│ 2. 选择 Ubuntu 版本 │
│ 3. 构建/复用基础镜像 │
│ 4. 交互式配置向导 │
│ 5. 创建并启动容器 │
│ 6. 保存容器信息 │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ Docker 镜像构建 │
├─────────────────────────────────────────────────────────────────┤
│ Dockerfile.ubuntu*.04 │
│ ├── 基础镜像: nvidia/cuda:12.8.0-devel-ubuntu* │
│ ├── 安装: SSH, Code-server, VNC, 中文环境 │
│ ├── 执行: image-init.sh (下载 Miniconda, 配置 Oh-My-Zsh) │
│ └── 设置: 启动脚本 /start.sh │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 容器启动流程 │
├─────────────────────────────────────────────────────────────────┤
│ /start.sh │
│ ├── 启动 SSH 服务 │
│ ├── 创建用户(如不存在) │
│ ├── 执行 user-init.sh (安装 Miniconda) │
│ ├── 启动 Code-server │
│ ├── 启动 Syncthing │
│ ├── 启动 VNC/noVNC(如启用) │
│ └── 保持容器运行 │
└─────────────────────────────────────────────────────────────────┘
| 配置项 | 说明 | 默认值 |
|---|---|---|
| GPU | 指定 GPU ID(如 0,1)或 all |
all |
| CPU | CPU 核心数限制 | 无限制 |
| 内存 | 内存限制(如 16g) |
无限制 |
| 共享内存 | 自动计算:GPU数量 × 16GB | 动态计算 |
| 服务 | 容器内端口 | 默认主机端口 |
|---|---|---|
| SSH | 22 | 22001 起自动分配 |
| Code-server | 8080 | 8080 起自动分配 |
| Syncthing | 8384 | 通过 Code-server 代理 |
| VNC | 5901 | 5901 起自动分配(可选) |
| noVNC | 6080 | 通过 Code-server 代理 |
启用 VNC 后提供:
- XFCE4 桌面环境
- 完整中文支持(Fcitx5 输入法)
- Google Chrome 浏览器
- Web VNC(通过浏览器访问)
- 客户端 VNC(使用 VNC Viewer 等工具)
# 查看容器状态
docker ps -a | grep cuda-
# 查看容器日志
docker logs cuda-<用户名>
# 进入容器
docker exec -it cuda-<用户名> bash
# 停止容器
docker stop cuda-<用户名>
# 启动容器
docker start cuda-<用户名>
# 删除容器
docker rm -f cuda-<用户名>| 组件 | 说明 |
|---|---|
| CUDA 12.8 | 完整开发工具包 |
| Miniconda | Python 环境管理(清华镜像源) |
| Oh-My-Zsh | 终端美化(Powerlevel10k 主题) |
| Code-server | VS Code 网页版 |
| Syncthing | 文件同步工具 |
| tmux | 终端复用器 |
| vim, git | 基础开发工具 |
~/workspace 目录!
~/workspace目录映射到主机,数据持久化- 其他目录在容器删除后数据将丢失
编辑 configs/banner.txt 文件,支持以下变量:
| 变量 | 说明 |
|---|---|
${CONTAINER_USERNAME} |
用户名 |
${CONTAINER_SSH_PORT} |
SSH 端口 |
${CONTAINER_CODESERVER_PORT} |
Code-server 端口 |
${CONTAINER_VNC_PORT} |
VNC 端口 |
${CONTAINER_SYNCTHING_PORT} |
Syncthing 端口 |
${CONTAINER_NOVNC_PORT} |
noVNC 端口 |
工作目录配置保存在 configs/.workspace_config,默认为 /home/cuda-container/workspace。
创建容器时可以交互式修改,或直接编辑配置文件。
# 检查 Docker 服务
sudo systemctl status docker
# 检查 NVIDIA Docker
docker run --rm --gpus all nvidia/cuda:12.8.0-base-ubuntu22.04 nvidia-smi# 查看详细日志
docker logs cuda-<用户名>
# 检查端口占用
netstat -tuln | grep <端口号>- 确认容器正在运行
- 检查端口映射是否正确
- 查看 Code-server 日志:
docker exec cuda-<用户名> cat /tmp/code-server.log
MIT License - 详见 LICENSE
特别声明:本软件仅供学术科研使用,禁止用于商业或其他私人用途。
欢迎提交 Issue 和 Pull Request!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 提交 Pull Request
如果这个项目对你有帮助,请给一个 Star ⭐
- GitHub Issues: 提交问题