跳转至

在 Notebook 中使用 Docker 功能

在 Notebook 中使用 Docker 功能,可以将实验环境、依赖配置与计算过程进行统一封装,使 Notebook 不再依赖本地环境差异。

通过 Docker,Notebook 能够在不同节点、不同平台之间保持一致的运行行为,便于复现实验结果、共享分析过程,并与生产环境更好地对齐,尤其适用于数据分析、机器学习和模型验证等场景。

本文简要说明如何在 Notebook 实例中启用、验证和使用 Docker 功能,还列出了一些 Docker 高级功能和常见的故障排查案例。

启用 Docker

前提条件

参阅管理 Helm 应用安装所需插件。

启用 Docker 功能

  1. 登录 AI Lab 平台,进入 Notebook 界面,点击 创建 按钮。

    更新操作

    若要在已创建的实例中打开 docker ,则先点击对应实例右侧的 按钮,然后选择 更新.

  2. 在创建 Notebook 界面中填写基本信息后,点击 下一步

  3. 完成资源配置后,点击 下一步

  4. 在高级配置中,勾选 启用 Docker 选项,点击 确定

  5. 创建完成后,返回 Notebook 列表页面。

    baize-agent

  6. 当 Notebook 实例状态由 等待中 变为 运行中 时,表示实例已成功启动。如一直在 等待中 ,请刷新页面。

  7. 此时,实例右侧的 打开 列的图标处于黑色可点击状态。点击该图标,进入对应的 Notebook 实例。

验证 Docker 功能是否可用

在 Notebook 的终端环境中,可通过执行以下命令验证 Docker 环境是否已成功启用。

# 查看正在运行的容器
docker ps

# 查看所有容器(包括已停止的)
docker ps -a

# 查看指定容器的详细信息(将 <container_name> 替换为实际容器名或容器 ID)
docker inspect <container_name>

若命令可正常执行,并返回 Docker 容器列表信息(即使列表为空),则表示 Docker 服务已正常启动。

若提示 Docker 命令不存在或无法连接 Docker daemon,请确认 Docker 已被正确启用

基本容器管理

Docker 功能提供完整的容器生命周期管理能力,支持容器的创建、启动、停止、删除等基本操作。

创建和运行容器

使用 docker run 命令创建并启动容器:

# 基本语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

# 运行一个简单的 Ubuntu 容器
docker run -it ubuntu:20.04 /bin/bash

# 后台运行容器
docker run -d --name my-app nginx:latest

# 指定端口映射
docker run -d -p 8080:80 --name web-server nginx:latest
常用参数说明如下:

参数 说明
-d 后台运行容器
-it 交互式运行,分配伪终端
--name 指定容器名称
-p 端口映射,格式为 宿主机端口:容器端口
-v 挂载数据卷

管理容器

查看容器状态:

# 查看正在运行的容器
docker ps

# 查看所有容器(包括已停止的)
docker ps -a

# 查看容器详细信息
docker inspect <container_name>

启动和停止容器:

# 启动已停止的容器
docker start <container_name>

# 停止运行中的容器
docker stop <container_name>

# 重启容器
docker restart <container_name>

进入容器

进入正在运行的容器:

# 进入容器的交互式终端  
docker exec -it <container_name> /bin/bash

# 查看某个容器内的所有文件 
docker exec <container_name> ls -la /app

Tip

建议使用 docker exec 而不是 docker attach 来进入容器,因为 exec 会创建新的进程,退出时不会影响容器的运行状态。

挂载存储

Notebook 可以挂载 PVC 或通过数据空间实现数据的持久化存储,其挂载路径可以关联到 Docker,从而实现容器间的数据共享和数据的持久化存储。

# 挂载到指定目录
docker run -d -v /root/data:/workspace/data --name dev-env python:3.9

镜像制作

Docker 功能支持多种方式制作和保存自定义镜像,满足不同场景的需求。

docker build

使用 Dockerfile 构建镜像是最常用的方式:

# 基本构建命令
docker build -t my-app:latest .

# 指定 Dockerfile 路径
docker build -f /path/to/Dockerfile -t my-app:v1.0 .

docker save

将镜像导出为 tar 文件:

# 导出单个镜像
docker save -o my-image.tar my-app:latest

导出的镜像可以通过 docker load 命令导入:

# 导入镜像
docker load -i my-image.tar

使用 GPU

在 Notebook 中启用 Docker 功能后,可以将 GPU 资源挂载到容器中,为 AI 训练和推理提供硬件加速能力。

先挂载 GPU

使用 --gpus 参数将 GPU 挂载到容器:

# 挂载所有 GPU
docker run --gpus all -it pytorch/pytorch:latest python

# 挂载指定数量的 GPU
docker run --gpus 2 -it tensorflow/tensorflow:latest-gpu python

# 挂载指定的 GPU
docker run --gpus device=0 -it nvidia/cuda:11.8-devel-ubuntu20.04

支持哪些 GPU

Notebook 支持多种 GPU,详情见GPU 支持矩阵

网络配置

Docker 容器可以通过多种网络模式与宿主机和外部网络进行通信。

端口映射

将容器端口映射到宿主机端口,实现外部访问:

# 映射单个端口
docker run -d -p 8080:80 --name web-app nginx:latest

# 映射多个端口
docker run -d \  -p 8080:80 \  -p 8443:443 \  --name web-server nginx:latest

# 映射到指定 IP
docker run -d -p 127.0.0.1:8080:80 --name local-app nginx:latest

# 映射随机端口
docker run -d -P --name random-port nginx:latest

高级功能

Notebook 的 Docker 功能支持 buildx 和 Compose 等高级工具,满足复杂场景下的容器化开发需求。

Docker buildx

Docker buildx 是 Docker 的扩展构建功能,支持多平台构建和高级构建特性。

基本用法

# 查看 buildx 版本
docker buildx version

# 查看可用的构建器
docker buildx ls

# 创建新的构建器
docker buildx create --name mybuilder --use

# 启动构建器
docker buildx inspect --bootstrap

多平台构建

# 构建多平台镜像
docker buildx build --platform linux/amd64,linux/arm64 -t my-app:latest .

# 构建并推送到仓库
docker buildx build --platform linux/amd64,linux/arm64 -t my-app:latest --push .

# 构建特定平台
docker buildx build --platform linux/amd64 -t my-app:amd64 .

Docker Compose

Docker Compose 用于定义和运行多容器应用程序。

安装和基本用法

# 检查 Compose 版本
docker compose version

# 启动服务
docker compose up -d

# 查看服务状态
docker compose ps

# 停止服务
docker compose down

# 查看日志
docker compose logs

访问镜像仓库

Notebook 的 Docker 功能支持访问镜像仓库以及其他公有和私有镜像仓库。

镜像仓库

本平台提供内置的镜像仓库服务,用户可以存储和管理自定义镜像。

访问仓库

# 查看仓库地址(示例)
# 实际地址请参考平台提供的 _*我的镜像*_ 中仓库信息
REGISTRY_URL="harbor.io"

# 拉取镜像
docker pull ${REGISTRY_URL}/my-namespace/my-app:latest

# 推送镜像
docker push ${REGISTRY_URL}/my-namespace/my-app:latest

认证配置

Note

当前版本暂不支持自动注入用户名和密码,需要手动配置认证信息。

手动配置认证:

# 登录到 AI Lab 镜像仓库
docker login registry.io -u <your-username>

# 输入密码
Password: <your-password>

# 验证登录状态
docker info | grep -A 5 "Registry Mirrors"

故障排查

常见问题及解决方法:

  • 容器启动失败

    # 查看容器日志
    docker logs <container_name>
    
    # 查看容器详细信息
    docker inspect <container_name>
    
  • 端口访问问题

    # 检查端口映射
    docker port <container_name>
    
    # 检查防火墙设置
    netstat -tlnp | grep :8080
    
  • GPU 不可用

    # 检查 GPU 状态
    nvidia-smi
    
    # 验证容器内 GPU 访问
    docker exec <container_name> nvidia-smi
    

重要提醒

  • Notebook 关机时,运行中的 Docker 容器会被停止
  • 重启 Notebook 后,需要手动重启 Docker 容器
  • 删除 Notebook 会同时删除所有 Docker 容器和未持久化的数据

通过合理使用 Notebook 的 Docker 功能,开发者可以构建灵活、高效的容器化开发和部署环境, 充分利用 AI Lab 平台的计算资源和存储能力。

评论