在线构建镜像
在云原生里面,所有的调度都是基于容器的,但这一部分的门槛比较高:
- 算法工程师并不熟悉 Docker 技术,部分环境在转化为 Dockerfile 时浪费了很多时间,编写 Dockerfile 也可能比较难(比如在一个镜像中安装多个 CUDA 的场景)。
- 基础镜像封装太多,用户不知道该选择什么镜像。

针对用户不熟悉 Docker 技术的情况,CubeStudio 加入了在线构建镜像的功能:启动调试后直接进入 bash 命令行,像在 Linux 上一样随意运行命令、安装环境,之后点击保存就会自动生成用户的工作镜像并 push 到仓库。期间 CubeStudio 会自动寻找用户进行镜像调试的 pod,在同一台机器上把用户的容器 commit 成镜像,并将构建好的镜像推送到仓库。
对于基础镜像太多的问题,CubeStudio 的方案是仅封装 cuda / python 这类基础环境,更上层的环境在任务运行时现场安装——基本模板中都保留了让用户自定义初始化命令的能力。对于长期运行的任务,安装环境的时间成本并不高。

平台支持用户通过 Web Shell 形式在线构建镜像,安装环境后保存镜像到自己的仓库,方便快速构建和部署。
一、Web Shell 构建镜像
“在线开发” → “镜像构建”,在 docker 记录上点击“调试”,即可进入 Web Shell 界面进行交互式镜像构建。

进入 Web Shell 后,直接通过 pip 等命令就能安装镜像中所需要的环境,不需要编写 Dockerfile。

注意:镜像调试只用于安装环境,请不要在调试容器里运行业务代码;当晚前请注意点击“保存”生成新镜像(调试 pod 有自动回收策略,见
myapp/views/view_docker.py中debug创建的sleep看护命令)。
二、Dockerfile 构建镜像
在“镜像管理”中添加镜像时可以填入 Dockerfile,填了 Dockerfile 之后,“构建”列会出现“在线构建”。

点击“在线构建”,即可进入在线构建界面:

三、平台后端构建流程(基于源码核实)
镜像在线构建由 Docker 模型与 Docker_ModelView_Api(路由 /docker_modelview/api)实现。核实依据:myapp/models/model_docker.py、myapp/views/view_docker.py。
- Docker 记录字段(
model_docker.py:20-34):project(项目组)、describe(描述)、base_image(基础镜像)、target_image(目标镜像)、last_image(最后生成镜像)、consecutive_build(连续构建,默认 True)、namespace(默认jupyter)、expand(扩展参数,含resource_memory/resource_cpu/resource_gpu/volume_mount)。 - 目标镜像默认值(
view_docker.py:151-157):PUSH_REPOSITORY_ORG + 用户名 + ":" + 日期(如ccr.ccs.tencentyun.com/cube-studio/<user>:2026.06.29.1)。目标镜像所在仓库必须先在“镜像仓库”中配置账号密码,否则保存时会提示“构建推送镜像前,请先添加镜像仓库信息”。 - 调试(
/docker_modelview/api/debug/<docker_id>):在 notebook 命名空间创建名为docker-<user>-<id>的调试 pod,挂载用户工作目录,默认资源8G / 4核 / 0 GPU(expand可覆盖),就绪后跳转到 Web Shell。 - 保存(
/docker_modelview/api/save/<docker_id>):找到调试 pod 所在节点和容器 id,新建docker-commit-<user>-<id>pod,用docker/nerdctl(取决于集群CONTAINER_CLI)登录目标仓库 →commit容器为target_image→push到仓库。commit 时会先inspect原始镜像的 ENTRYPOINT/CMD 并通过--change写回,避免调试用的sleep启动命令覆盖原始入口。 - 清理(
/docker_modelview/api/delete_pod/<docker_id>):删除调试 pod 与 commit pod;切换项目组(集群)或更换基础镜像时会自动清理旧调试容器。 - 连续构建(
consecutive_build):开启时,下次调试基于上次生成的last_image继续,而非每次都从base_image重新开始。
与“二次开发”中的镜像构建相关内容相互参照,见 06-二次开发 段。
四、Dockerfile 常用片段参考
以下为常见的镜像内环境配置片段,仅作示例(实际 Python 版本以所用基础镜像为准)。
修改默认 python 版本
rm /usr/bin/python
ln -s /usr/bin/python3.6 /usr/bin/python
rm /usr/bin/pip
ln -s /usr/bin/pip3 /usr/bin/pip
pip install pip --upgrade
Ubuntu 容器基础工具的封装
RUN apt update -y
# 安装运维工具
RUN apt install -y --force-yes --no-install-recommends vim apt-transport-https gnupg2 ca-certificates-java rsync jq wget git dnsutils iputils-ping net-tools curl mysql-client locales zip traceroute
# 安装 python
RUN apt install -y python3.6-dev python3-pip libsasl2-dev libpq-dev \
&& ln -s /usr/bin/python3 /usr/bin/python \
&& ln -s /usr/bin/pip3 /usr/bin/pip
# 安装中文
RUN apt install -y --force-yes --no-install-recommends locales ttf-wqy-microhei ttf-wqy-zenhei xfonts-wqy && locale-gen zh_CN && locale-gen zh_CN.utf8
ENV LANG=zh_CN.UTF-8
ENV LC_ALL=zh_CN.UTF-8
ENV LANGUAGE=zh_CN.UTF-8
# 便捷操作
RUN echo "alias ll='ls -alF'" >> ~/.bashrc && \
echo "alias la='ls -A'" >> ~/.bashrc && \
echo "alias vi='vim'" >> ~/.bashrc
# 安装其他工具
### 安装 kubectl
RUN curl -LO https://dl.k8s.io/release/v1.16.0/bin/linux/amd64/kubectl && chmod +x kubectl && mv kubectl /usr/local/bin/
### 安装 mysql 客户端
RUN apt install -y mysql-client-5.7
### 安装 java
RUN apt install -y openjdk-8-jdk
### 安装最新版的 nodejs
RUN curl -sL https://deb.nodesource.com/setup_13.x | bash -
RUN apt-get install -y nodejs && npm config set unicode false
五、常用 GPU 基础镜像
构建脚本位于源码 images/ubuntu-gpu/build.sh(基础镜像基于 nvidia/cuda:*-cudnn8-devel-ubuntu20.04 构建,再叠加指定 Python 版本)。
Ubuntu / CUDA 12.1.0-cudnn8
ccr.ccs.tencentyun.com/cube-studio/ubuntu-gpu:cuda12.1.0-cudnn8-amd64- python3.11:
ccr.ccs.tencentyun.com/cube-studio/ubuntu-gpu:cuda12.1.0-cudnn8-python3.11-amd64 - python3.10:
ccr.ccs.tencentyun.com/cube-studio/ubuntu-gpu:cuda12.1.0-cudnn8-python3.10-amd64 - python3.9:
ccr.ccs.tencentyun.com/cube-studio/ubuntu-gpu:cuda12.1.0-cudnn8-python3.9-amd64
Ubuntu / CUDA 11.8.0-cudnn8
ccr.ccs.tencentyun.com/cube-studio/ubuntu-gpu:cuda11.8.0-cudnn8-amd64- python3.11:
ccr.ccs.tencentyun.com/cube-studio/ubuntu-gpu:cuda11.8.0-cudnn8-python3.11-amd64 - python3.10:
ccr.ccs.tencentyun.com/cube-studio/ubuntu-gpu:cuda11.8.0-cudnn8-python3.10-amd64 - python3.9:
ccr.ccs.tencentyun.com/cube-studio/ubuntu-gpu:cuda11.8.0-cudnn8-python3.9 - python3.8:
ccr.ccs.tencentyun.com/cube-studio/ubuntu-gpu:cuda11.8.0-cudnn8-python3.8 - python3.7:
ccr.ccs.tencentyun.com/cube-studio/ubuntu-gpu:cuda11.8.0-cudnn8-python3.7
注意:当前
images/ubuntu-gpu/build.sh只构建并推送cuda11.8.0-cudnn8、cuda12.1.0-cudnn8两个基础镜像及其 python3.9 变体(见images/ubuntu-gpu/build.sh:7-22),脚本本身不构建 python3.7 / 3.8 / 3.10 / 3.11 变体。上面列出的完整 Python 版本镜像在images/README.md中作为已发布镜像列出,可能由历史构建或其他流程产出。使用前请确认对应 tag 是否确实存在于你的镜像仓库。