镜像在线构建和管理

不熟悉 Docker、想在平台上通过 Web Shell 或 Dockerfile 在线构建并保存自己的工作镜像、或想知道有哪些 GPU 基础镜像时读这篇

平台使用 / 镜像构建与仓库
镜像构建在线构建web shelldockerdockerfilecommitpush镜像仓库repository基础镜像base imagetarget imageGPU基础镜像cudacudnn

在线构建镜像

在云原生里面,所有的调度都是基于容器的,但这一部分的门槛比较高:

  1. 算法工程师并不熟悉 Docker 技术,部分环境在转化为 Dockerfile 时浪费了很多时间,编写 Dockerfile 也可能比较难(比如在一个镜像中安装多个 CUDA 的场景)。
  2. 基础镜像封装太多,用户不知道该选择什么镜像。

docker-build

针对用户不熟悉 Docker 技术的情况,CubeStudio 加入了在线构建镜像的功能:启动调试后直接进入 bash 命令行,像在 Linux 上一样随意运行命令、安装环境,之后点击保存就会自动生成用户的工作镜像并 push 到仓库。期间 CubeStudio 会自动寻找用户进行镜像调试的 pod,在同一台机器上把用户的容器 commit 成镜像,并将构建好的镜像推送到仓库。

对于基础镜像太多的问题,CubeStudio 的方案是仅封装 cuda / python 这类基础环境,更上层的环境在任务运行时现场安装——基本模板中都保留了让用户自定义初始化命令的能力。对于长期运行的任务,安装环境的时间成本并不高。

docker-add

平台支持用户通过 Web Shell 形式在线构建镜像,安装环境后保存镜像到自己的仓库,方便快速构建和部署。

一、Web Shell 构建镜像

“在线开发” → “镜像构建”,在 docker 记录上点击“调试”,即可进入 Web Shell 界面进行交互式镜像构建。

web shell 入口

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

web shell 安装环境

注意:镜像调试只用于安装环境,请不要在调试容器里运行业务代码;当晚前请注意点击“保存”生成新镜像(调试 pod 有自动回收策略,见 myapp/views/view_docker.pydebug 创建的 sleep 看护命令)。

二、Dockerfile 构建镜像

在“镜像管理”中添加镜像时可以填入 Dockerfile,填了 Dockerfile 之后,“构建”列会出现“在线构建”。

添加 dockerfile

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

在线构建界面

三、平台后端构建流程(基于源码核实)

镜像在线构建由 Docker 模型与 Docker_ModelView_Api(路由 /docker_modelview/api)实现。核实依据:myapp/models/model_docker.pymyapp/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 GPUexpand 可覆盖),就绪后跳转到 Web Shell。
  • 保存/docker_modelview/api/save/<docker_id>):找到调试 pod 所在节点和容器 id,新建 docker-commit-<user>-<id> pod,用 docker / nerdctl(取决于集群 CONTAINER_CLI)登录目标仓库 → commit 容器为 target_imagepush 到仓库。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-cudnn8cuda12.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 是否确实存在于你的镜像仓库。

最后更新 2026-07-04完整文档以官方仓库为准:GitHub Wiki