GenStudio 于 2025 年 5 月 推出 GenStudio 高级版/企业版升级服务,大幅提升 API 调用频率GenStudio 于 2025 年 5 月 推出 GenStudio 高级版/企业版升级服务,大幅提升 API 调用频率 ,依然保留免费基础服务了解计费
Skip to content

定制容器开发环境

开发机是基于容器镜像创建的隔离开发环境。镜像相当于模板,预装操作系统、开发工具和语言环境。每个开发机实例互相独立,继承镜像的基础环境,支持个性化安装和配置。重启后,基础环境不变,个人数据和已安装软件会保留。

本指南介绍如何用 apt 和 pip 管理工具,快速定制和优化您的开发环境。

选择预置镜像

大多数开发者建议直接选择平台提供的预置镜像(如 Ubuntu、NVIDIA、PyTorch 等),这些镜像已集成主流操作系统、开发工具、驱动和常用编程环境,适用于常见开发场景,无需额外配置。

如需判断镜像是否满足需求,可参考镜像官方说明或平台文档(如 NGC Pytorch 镜像发布说明),通常会列出已安装的软件和功能。

仅当需要特殊工具、特定版本时,才建议自定义镜像。

定制新镜像

虽然基础镜像提供了良好的起点,但可能存在工具缺失问题。您可以使用自定义镜像,以满足您的开发需求。

基于现有镜像构建自定义镜像

平台支持基于预置镜像快速定制自定义镜像。只需会用 apt/pip,即可添加所需工具、库或配置,满足个性化开发需求。

主要流程:

  • 选择基础镜像
  • 填写安装和配置命令
  • 自动构建新镜像
  • 后续开发机可直接使用

适合需在标准环境基础上增加特定组件的用户。

  1. 访问构建自定义镜像页面。请根据页面提示,完成以下配置。

    • 镜像名称及 tag:填写符合要求的名称与镜像标签。
    • 可用服务:如果您希望镜像被用于开发机和任务,可根据需要进行勾选。
    • 镜像构建资源池:选择可使用该镜像的资源池。如果下拉列表只有一项,选择默认值即可。如果有多项,说明您的计算资源分布在多个可用区(例如,宁夏、广东等)。列表中的每一行为该可用区中的所有资源池,请选择希望使用该镜像的资源池。单次构建操作仅支持选择一个可用区的所有资源池。

    alt text

  2. 选择构建方式基于现有镜像。例如,您可以选择平台预置 Ubuntu 22.04 镜像(也可以选择当前已有的自定义镜像),可在该镜像基础上使用 apt-getpip install 等方式安装软件。

    alt text

    安装命令中,输入以下命令安装一些网络工具、传输工具、开发工具等,便于在开发过程中排障。点击确认后开始构建定制镜像。同时可前往镜像列表页,找到该镜像,在右侧点击查看构建日志。

    shell
    # =============================
    # 安装缺失的系统诊断与实用工具
    # =============================
    
    # 更新APT包列表
    apt-get update
    
    # 安装系统工具
    # -y: 自动确认所有提示,避免交互式输入
    # --no-install-recommends: 仅安装核心依赖,不安装推荐的附加包(本脚本中已省略该选项,因此会安装推荐依赖)
    
    apt-get install -y pciutils         # lspci: 列出所有PCI设备
    apt-get install -y usbutils         # lsusb: 列出所有USB设备
    apt-get install -y lsb-release      # lsb_release: 显示Linux发行版信息
    apt-get install -y sysstat          # iostat/sar/vmstat: 系统性能统计与监控工具
    apt-get install -y lsof             # 查看当前系统打开文件与端口的工具
    apt-get install -y strace           # 跟踪系统调用和信号的工具
    
    # =============================
    # 安装文本编辑器(仅终端版)
    # =============================
    
    apt-get install -y nano             # 轻量级终端文本编辑器
    apt-get install -y emacs-nox        # Emacs终端版,无图形界面,适合容器
    
    # =============================
    # 安装系统监控工具
    # =============================
    
    apt-get install -y iotop            # 实时磁盘IO监控
    apt-get install -y nethogs          # 按进程统计网络带宽占用
    apt-get install -y iftop            # 实时网络流量监控
    apt-get install -y nmon             # 多功能系统性能监控
    apt-get install -y glances          # 跨平台系统监控工具,综合展示多项资源
    
    # =============================
    # 安装网络工具
    # =============================
    
    apt-get install -y traceroute       # 路由跟踪工具
    apt-get install -y mtr              # 集成traceroute和ping
    apt-get install -y nmap             # 网络端口扫描和安全工具
    apt-get install -y netcat-openbsd   # nc/netcat: 网络调试与端口监听工具
    apt-get install -y rsync            # 高效文件同步/镜像工具
    apt-get install -y dnsutils         # 提供dig/nslookup等DNS工具
    apt-get install -y host             # 简单DNS查询
    apt-get install -y tcpdump          # 网络数据包分析工具,用于抓包和分析网络流量
    
    # =============================
    # 安装文件和归档工具
    # =============================
    
    apt-get install -y p7zip-full       # 7z/7za: 多格式压缩与解压
    apt-get install -y rclone           # 云存储同步管理工具
    
    # =============================
    # 安装 Python 相关工具与包
    # --quiet: 减少安装过程的输出信息
    # --no-cache-dir: 不缓存下载的包
    # =============================
    
    apt-get install -y python3-pip                      # Python 3 包管理器
    python3 -m pip install --quiet --no-cache-dir --upgrade pip      # 升级pip本身
    python3 -m pip install --quiet --no-cache-dir ipython            # 增强版Python交互解释器
    python3 -m pip install --quiet --no-cache-dir jupyterlab         # JupyterLab网页交互式环境
    
    # =============================
    # 清理 apt 缓存,减小镜像体积(容器推荐)
    # =============================
    
    apt-get clean && rm -rf /var/lib/apt/lists/*
    
    # =============================
    # 初始化 Conda Shell 支持
    # 如果基于平台预置镜像(已安装 Miniconda,建议使用该方式初始化)
    # =============================
    # conda init --system    # 系统范围内初始化 conda 环境

注意

  • 采用「基于现有镜像」构建的镜像将直接保存到租户私有镜像仓库,无需推送。
  • 镜像中心还支持多种从网页端快捷创建自定义镜像的方式,包括直接保存运行中的开发机为镜像,或基于 dockerfile 构建镜像。详见构建自定义镜像

使用自定义镜像的注意事项

在部分特殊场景下,使用自定义镜像的开发机可能会遇到一些问题。一般仅见于以下情况:

  • 自定义镜像并非在平台构建,且未基于任何平台的预置镜像
  • 在镜像中心使用 Dockerfile 构建,且未基于任何平台的预置镜像
  • 上传至平台镜像中心的其他自定义镜像(如从 Docker Hub 等镜像源下载的镜像)

镜像中缺少必要启动组件

如果您的自定义镜像并非在平台构建(或是直接在镜像中心使用 Dockerfile 构建),请确保镜像中包含平台要求的必要组件。虽然在启动开发机时平台会尝试安装,但仍可能安装失败导致开发机无法正常启动。

以 Ubuntu 为例:

shell
apt update && apt install openssh-server sudo runit runit-systemd -y

镜像中缺少 RDMA 相关组件

如果您的自定义镜像中缺少 RDMA 相关组件,在需要开发机之间通过 RDMA 通信时(IB 或 RoCE),可能会遇到 RDMA 相关问题。

以 Ubuntu 为例,建议在已有自定义镜像基础上,通过以下命令安装 RDMA 相关组件。详见基于现有镜像构建自定义镜像

shell
apt update && apt install -y infiniband-diags perftest ibverbs-providers libibumad3 libibverbs1 libnl-3-200 libnl-route-3-200 librdmacm1

常见问题

预置镜像和自定义镜像有什么区别?

预置镜像是平台官方提供的标准化容器镜像,已经预装了常用的操作系统、开发工具和主流框架,可以直接使用无需额外配置。平台预置了 NGC 官方镜像、CUDA 社区镜像、Ubuntu 基础镜像等预置镜像,用户无需自行从 Docker Hub 等镜像源下载。

自定义镜像则是基于预置镜像或其他基础镜像,根据特定需求添加工具、库或配置后构建的个性化镜像,适合有特殊开发需求的场景。

什么情况下应该选择预置镜像?什么时候需要自定义镜像?

当您的开发需求与主流场景一致时(如 Python 开发、深度学习、Web 开发),应优先选择预置镜像,这样可以快速启动开发环境。只有在需要特定版本的工具、团队环境标准化、或预置镜像缺少关键组件时,才建议创建自定义镜像。

预置镜像包含哪些预装的工具和库?

预置镜像通常包含 Ubuntu 或 CentOS 等主流操作系统、git/vim/gcc 等常用开发工具、CUDA/cuDNN 等相关驱动,以及 Python/PyTorch/TensorFlow 等主流编程语言和框架。具体的预装内容可以在镜像中心查看各镜像的详细说明。

如何知道预置镜像是否满足我的项目需求?

您可以查看镜像的官方说明文档,了解预装的软件包和版本信息,或者先创建一个基于预置镜像的开发机进行测试。如果发现缺少必要工具,可以在开发机中临时安装验证,确认需求后再考虑是否需要自定义镜像。

如何创建和上传自己的容器镜像?

平台提供三种方式创建自定义镜像:基于现有镜像添加安装命令、使用 Dockerfile 构建、或将运行中的开发机保存为镜像。创建的镜像会自动保存到租户私有镜像仓库,无需手动上传。推荐使用"基于现有镜像"的方式,简单高效。

自定义镜像有什么限制?

自定义镜像需要符合容器化环境的安全要求,不能包含特权操作或系统级配置。镜像大小建议控制在合理范围内以提升启动速度,构建过程中的安装命令需要是非交互式的(使用 -y 参数)。镜像必须基于 Linux 系统,且需要与平台的容器运行时兼容。

单个镜像大小不能超过 50 GiB。

重要

如果您的开发机自定义镜像并非在智算云平台构建、或直接使用 Dockerfile 构建,推荐在镜像中包含平台要求的必要组件:

以 Ubuntu 为例:

shell
apt update && apt install openssh-server sudo runit runit-systemd -y

如果镜像中缺失上述组件,在启动开发机时平台会尝试安装,但仍可能安装失败导致开发机无法正常启动。

可以基于哪些基础镜像来构建?

您可以基于平台提供的任何预置镜像(如 Ubuntu、NVIDIA、PyTorch 等)构建自定义镜像,也可以基于已有的自定义镜像进行进一步定制。请确保基础镜像的安全性和兼容性。

如何在自定义镜像中预装我需要的开发工具?

在镜像构建时,使用安装命令脚本预装所需工具,如 apt-get install 安装系统包、pip install 安装 Python 库、npm install 安装 Node.js 包等。建议在安装命令中包含清理缓存的步骤(如 apt-get clean),以减小最终镜像体积。

容器环境与传统 Linux 环境有什么不同?

开发机本身为容器环境,由平台自动管理,用户无法使用 docker 或 kubectl 命令控制开发机,且不能执行系统级或特权操作,安全性更高。容器中没有 systemd,服务管理需要使用 sv 命令或手动运行,CPU、内存和网络资源由平台分配。容器化环境的优势是环境一致性好,代码在不同环境中更容易运行。

注意

如果需要在开发机内使用 docker 命令,请使用开发机内的 Docker 容器功能

为什么不在开发机容器中直接安装额外的软件包?

虽然可以在开发机容器中直接安装软件包,但通过定制镜像预装软件具有明显优势。直接安装意味着每次创建新开发机时都需要重复执行安装命令,浪费时间和网络资源,而定制镜像可以一次构建、多次使用,显著提升开发机启动速度。

此外,定制镜像确保了环境的一致性和可重现性,无论是个人使用多个开发机还是团队协作,都能保证相同的开发环境。这种方式还便于版本管理和环境分享,符合基础设施即代码的最佳实践,让开发环境的管理更加规范和高效。

GPU 支持如何配置?如何验证 GPU 可用性?

选择带有 NVIDIA 标识的预置镜像或在自定义镜像中安装 CUDA 工具包即可获得 GPU 支持。创建开发机时需要选择 GPU 资源规格。可以使用 nvidia-smi 命令验证 GPU 硬件是否可用。如果开发机使用的镜像已经包含 Pytorch,可以使用 python -c "import torch; print(torch.cuda.is_available())" 验证 PyTorch 的 GPU 支持。

如何持久化数据和配置文件?

开发机的 / 目录会自动持久化,存储在其中的代码、配置文件和数据在开发机重启后会保留。/tmp 目录下的数据在开发机重启后会被清除,避免将数据存储在临时目录中。如需大容量存储,可以挂载共享文件存储。

容器中可以安装哪些文本编辑器和 IDE?

可以安装 vim、emacs、nano 等终端编辑器,也可以安装 VS Code Server、JupyterLab 等 Web 版本的 IDE。对于图形界面的编辑器,建议使用 Web 版本或通过 Web 预览功能访问。

如何配置 Python、Conda、Jupyter 等开发工具?

Python 环境通常已经在预置镜像中预装(使用 which python3 验证),可以使用 pip 管理包和 conda 管理虚拟环境。

如果自行安装,建议在自定义镜像构建时预装这些环境,避免在开发机重置后丢失环境。

如何设置版本控制和 SSH 密钥?

Git 通常已经预装,可以通过 git config 设置用户信息。SSH 密钥可以在 /root/.ssh/ 目录下生成和管理,使用 ssh-keygen 生成密钥对。建议将 SSH 配置和密钥存储在平台的密钥管理功能中,这样在开发机重启后配置会保留。

如何监控容器资源使用情况?

可以使用 tophtopglances 等工具监控 CPU 和内存使用情况,使用 iotop 监控磁盘 IO,使用 nethogs 监控网络带宽。平台控制台也提供开发机资源监控图表,可以查看开发机的总体资源使用趋势。

容器启动慢怎么办?

开发机容器的启动速度主要取决于镜像大小和复杂程度。建议优化自定义镜像,清理不必要的缓存文件,合并安装命令减少镜像层数。选择合适的资源规格,避免过度配置。如果问题持续,可以考虑将常用环境制作成自定义镜像减少启动时的安装步骤。

网络连接问题如何排查?

首先使用 ping 测试基本网络连通性,使用 traceroute 检查路由路径,使用 netstatss 查看端口占用情况。检查防火墙设置和 DNS 解析,使用 dignslookup 测试域名解析。如果是代理相关问题,检查环境变量设置。

如何与团队分享环境配置?

与团队成员使用同一个自定义镜像,确保开发环境的一致性。可以将环境设置脚本和配置文件提交到版本控制系统,团队成员可以在自己的开发机中运行这些脚本。对于复杂的环境,建议统一使用团队构建的自定义镜像。