Docker(容器与镜像)

AI TERM术语词条

Docker

基础设施 容器部署环境隔离镜像

术语释义

Docker 把应用与依赖打包成镜像,以容器方式隔离运行,是训练环境与模型服务交付的起点。

Docker 把代码、运行时、系统库与配置一起打包成镜像,运行时以容器形式隔离进程、文件系统与网络。它解决的是「在我机器上能跑」这类环境差异问题:训练环境、推理服务与数据处理任务用同一份镜像分发,换机器不必重新配依赖,也方便在本地复现线上环境。镜像只读、容器可写,一个镜像可以同时起多个互不影响的容器。

镜像分层与构建

  • 分层复用:每条构建指令生成一层,未变化的层直接命中缓存,因此依赖安装要放在代码拷贝之前。
  • 基础镜像选择:带加速库的运行时镜像体积很大,需与驱动和框架版本对齐,避免运行时不兼容。
  • 多阶段构建:编译依赖留在构建阶段,产物拷进精简运行阶段,体积与暴露面同时缩小。
  • 缓存失效:改动频繁的文件靠后拷贝,否则每次构建都从中间层重来,浪费大量时间。
  • 镜像标签:构建产物打上可追溯的标签并记录摘要,避免只留一个浮动标签。

运行时与运维

容器共享宿主机内核,隔离强度弱于虚拟机,因此不能把容器当作安全边界:同一宿主上的容器互相可见的风险要靠额外的隔离手段控制。加速卡需要专门的运行时把设备暴露进容器,多容器共享同一张卡时要防止显存与算力互相抢占,通常要限制每个容器可见的设备或分配额度。生产上应固定镜像摘要而不是浮动标签,保证回滚时拿到的是同一份内容;日志要输出到标准输出由外部收集,不要留在容器文件系统里。

常见坑

  • 把模型权重烤进镜像:镜像体积膨胀、改一次权重就要重推所有层,权重应放数据卷或对象存储。
  • 用容器存状态:容器重建即丢数据,需要持久化的目录必须显式挂载。
  • 忽略信号处理:主进程不转发终止信号,停止容器时会直接杀掉进程,在途请求被切断。
  • 以 root 运行:默认用户权限过大,挂载宿主目录时风险被放大。
  • 依赖 latest 标签:上下游镜像悄悄更新会导致同一份代码今天能构建明天构建失败。

需要区分镜像与容器:镜像是构建产物、只读且可分发,容器是它的运行实例、有生命周期。和虚拟机的区别在于容器共享内核、启动快、开销小,但隔离与内核版本自由度不如虚拟机。做训练环境时,镜像通常只装依赖与代码,数据与权重运行时挂载,这样同一镜像可以复用到不同实验。

查看全部 70 条 →
共 9 条