制作开发机镜像
更新时间:2026-01-16
平台提供通过控制台基于开发机制作镜像和在开发机容器内制作镜像两种方式(全托管资源池仅支持控制台界面制作镜像)。在开发机内制作镜像时,使用自定义镜像创建的开发机需要先安装PodMan工具,使用平台预置镜像创建的开发机已经内置PodMan无需安装。
制作镜像注意事项
- 百舸开发机和百舸提供的预置镜像都是以amd64架构为基础,若需要使用其他来源的镜像作为基础镜像或安装二进制包,请使用amd64或x64的基础镜像和二进制包;
- 请勿在镜像中捆绑GPU驱动(如libcuda.so);
- 通过控制台制作镜像写入的数据不能超过40GiB。
基于控制台界面制作镜像制作镜像
- 登录百舸AI计算平台,进入开发机列表页面
- 选择相应的开发机实例,点击【制作镜像】
- 选择需要保存的ccr镜像仓库,如列表无内容,需要先创建ccr镜像仓库,并创建用户名密码
- 填写相关参数,保存镜像到CCR镜像仓库,等待镜像制作完成
- 镜像制作完成后,可点击开发机实例,进入详情,查看和管理镜像列表,此处仅为列表信息,镜像实际保存在ccr仓库中
在开发机内制作镜像
使用预置镜像创建的开发机
使用预置镜像创建的开发机,目前已内置PodMan。PodMan使用命令与Docker基本一致,制作镜像相关命令示例如下:
Plain Text
1# 登录镜像仓库
2podman login --username=xxxxxx ccr-2nf6531g-pub.cnc.bj.baidubce.com
3# 拉取镜像
4podman pull image
5# 使用Dockerfile制作镜像,需要一个--isolation=chroot 参数
6podman build --isolation=chroot -t imageName .
7# 推送镜像到远程仓库
8podman push imagename
更多命令可参考官网文档:https://docs.podman.io/en/latest/Commands.html
自定义镜像开发机内制作镜像
不同系统版本PodMan的安装和配置方式有所差别。
Ubuntu22.04
步骤一:安装podman
Plain Text
1apt-get update -y
2apt-get install -y podman
步骤二:制作镜像
Plain Text
1# 登录镜像仓库
2podman login ccr-abc12345-vpc.cnc.bj.baidubce.com --username=xxxxxx
3# 拉取镜像
4podman pull ccr-abc12345-vpc.cnc.bj.baidubce.com/xyz/image:tag
5# 使用Dockerfile制作镜像 (省略创建和编写Dockerfile步骤,建议将RUN指令合并以减少层数,稳定依赖(如系统包)安装在前,频繁变动的代码复制在后,以充分利用Docker构建缓存)
6# --isolation=chroot 轻量级的文件系统隔离,启动更快、资源消耗更低
7# --format docker 设置为docker模式,避免出现shell类型报错
8podman build --format docker --isolation=chroot -t ccr-abc12345-vpc.cnc.bj.baidubce.com/xyz/new_image:new_tag .
9# 推送镜像到远程仓库
10podman push ccr-abc12345-vpc.cnc.bj.baidubce.com/xyz/new_image:new_tag
Ubuntu20.04
步骤一:安装podman
Plain Text
1apt-get update -y
2apt-get install curl vim gnupg
3echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_20.04/ /" | tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
4curl -s -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_20.04/Release.key | apt-key add -
5apt-get update
6apt-get install -y podman
步骤二:修改配置文件
/etc/containers/storage.conf修改 driver=“vfs”
步骤三:制作镜像
Plain Text
1# 登录镜像仓库
2podman login ccr-abc12345-vpc.cnc.bj.baidubce.com --username=xxxxxx
3# 拉取镜像
4podman pull ccr-abc12345-vpc.cnc.bj.baidubce.com/xyz/image:tag
5# 使用Dockerfile制作镜像 (省略创建和编写Dockerfile步骤,建议将RUN指令合并以减少层数,稳定依赖(如系统包)安装在前,频繁变动的代码复制在后,以充分利用Docker构建缓存)
6# --isolation=chroot 轻量级的文件系统隔离,启动更快、资源消耗更低
7# --format docker 设置为docker模式,避免出现shell类型报错
8podman build --format docker --isolation=chroot -t ccr-abc12345-vpc.cnc.bj.baidubce.com/xyz/new_image:new_tag .
9# 推送镜像到远程仓库
10podman push ccr-abc12345-vpc.cnc.bj.baidubce.com/xyz/new_image:new_tag
Centos8
步骤一:安装podman
Plain Text
1# 进入root,切换至yum.repos.d目录
2cd /etc/yum.repos.d/
3# 创建新文件夹并将源文件备份为repo.bak
4mkdir backup && mv *repo backup/
5# 下载国内yum源文件
6curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
7# 更新下载yum源地址
8sed -i -e"s|mirrors.cloud.aliyuncs.com|mirrors.aliyun.com|g " /etc/yum.repos.d/CentOS-*
9sed -i -e "s|releasever|releasever-stream|g" /etc/yum.repos.d/CentOS-*
10# 生成缓存
11yum clean all && yum makecache\
12yum install podman -y
步骤二:修改配置文件
/etc/containers/storage.conf修改 driver=“vfs”
步骤三:制作镜像
Plain Text
1# 登录镜像仓库
2podman login ccr-abc12345-vpc.cnc.bj.baidubce.com --username=xxxxxx
3# 拉取镜像
4podman pull ccr-abc12345-vpc.cnc.bj.baidubce.com/xyz/image:tag
5# 使用Dockerfile制作镜像 (省略创建和编写Dockerfile步骤,建议将RUN指令合并以减少层数,稳定依赖(如系统包)安装在前,频繁变动的代码复制在后,以充分利用Docker构建缓存)
6# --isolation=chroot 轻量级的文件系统隔离,启动更快、资源消耗更低
7# --format docker 设置为docker模式,避免出现shell类型报错
8podman build --format docker --isolation=chroot -t ccr-abc12345-vpc.cnc.bj.baidubce.com/xyz/new_image:new_tag .
9# 推送镜像到远程仓库
10podman push ccr-abc12345-vpc.cnc.bj.baidubce.com/xyz/new_image:new_tag
如何减小镜像体积
如果制作的镜像体积过大,可以通过以下方式多阶段构建或清理apt缓存、临时文件
Plain Text
1# 多阶段构建例子,本质上就是基础环境单独生成一个镜像,然后从这个镜像里面只拿走我们需要的部分
2# 当前只是显示格式的范例,直接使用python:3.9-slim这样的官网镜像在开发机内无法下载,建议以国内的源或者使用推荐的百度CCR源为基础
3
4# ========== 第一阶段:构建阶段 ==========
5# 这个阶段可以很“胖”,因为它不会进入最终镜像
6FROM python:3.9-slim AS builder
7WORKDIR /build
8
9# 在这个阶段,放心地安装所有构建工具
10RUN apt-get update && apt-get install -y --no-install-recommends \
11 gcc g++ git
12
13# 将依赖文件单独复制,以利用Docker缓存
14COPY requirements.txt .
15# 安装依赖(会下载whl包,产生缓存,所以要在后面追加rm -rf ~/.cache/pip/*命令清理缓存,不过这只是范例,因为当前是构建阶段,留下缓存也不会有问题)
16RUN pip install --user --no-cache-dir -r requirements.txt && \
17 rm -rf ~/.cache/pip/*
18# 假设requirements.txt包含: torch, torchvision, numpy
19
20# 复制应用代码
21COPY app.py .
22
23# ========== 第二阶段:运行阶段 ==========
24# 这个阶段必须非常“瘦”,它才是最终发布的镜像
25FROM python:3.9-slim
26WORKDIR /app
27
28# 从“构建阶段”只复制安装好的依赖成品和应用程序
29COPY --from=builder /root/.local /root/.local
30COPY --from=builder /build/app.py .
31
32# 确保PATH能找到我们复制的本地依赖
33ENV PATH=/root/.local/bin:$PATH
34
35# (可选)安装最小的运行时系统依赖
36RUN apt-get update && apt-get install -y --no-install-recommends \ # 使用 --no-install-recommends:在 apt-get install 时加上此参数,可以避免安装非严格依赖的“推荐”包,进一步减少不必要的内容。
37 # 例如PyTorch可能需要的libgomp1
38 libgomp1 && \
39 apt-get clean && \ # 删除已下载的 .deb 安装包文件
40 rm -rf /var/lib/apt/lists/* && \ # 删除 apt-get update 后下载的软件包元数据列表文件
41 rm -rf /tmp/* /var/tmp/* # 删除临时目录下的文件。一些安装脚本或解压操作会在这里留下残留
42# 合并RUN指令:务必像示例一样,将 update、install、clean 放在同一条 RUN 指令中(用 && 连接)。这样做是为了让清理操作发生在同一个Docker镜像层里,如果分开成多条 RUN,即使清理了,被删除的文件在之前的镜像层中仍然存在,无法真正减小镜像体积。
43
44CMD ["python", "app.py"]
