Skip to content

biubushy/cuda_cenv

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CUDA 容器环境自动化创建工具

GitHub License CUDA Docker

English Version

一个用于快速创建和管理 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

脚本将引导你完成以下配置:

  1. 选择 Ubuntu 版本(18.04/20.04/22.04/24.04)
  2. 输入用户名和密码
  3. 配置 GPU/CPU/内存资源
  4. 设置端口映射
  5. 可选启用 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 远程桌面

启用 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 相关

# 检查 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 无法访问

  1. 确认容器正在运行
  2. 检查端口映射是否正确
  3. 查看 Code-server 日志:docker exec cuda-<用户名> cat /tmp/code-server.log

📄 许可证

MIT License - 详见 LICENSE

特别声明:本软件仅供学术科研使用,禁止用于商业或其他私人用途。


🤝 贡献

欢迎提交 Issue 和 Pull Request!

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 提交 Pull Request

⭐ Star History

如果这个项目对你有帮助,请给一个 Star ⭐

GitHub stars


📞 联系方式

About

No description, website, or topics provided.

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages