1. ubuntu安装docker

2. ubuntu安装NVIDIA-container-toolkit

3. 拉取镜像

4. 启动容器

启动命令,增加--gpus all命令
示例

docker run  --gpus all -p 10022:22 -it -d -v /home/app:/app --name test_cuda test_cuda:v1.0 /bin/bash

5. 测试是否能用cuda

将测试代码映射到容器中

import torch

# 检查是否有 GPU 可用
has_gpu = torch.cuda.is_available()
print("GPU 是否可用:", "是" if has_gpu else "否")

if has_gpu:
    # 获取 GPU 的数量
    gpu_count = torch.cuda.device_count()
    print("GPU 数量:", gpu_count)
    
    # 打印每个 GPU 的名称和设备属性
    for i in range(gpu_count):
        print(f"GPU {i} - 名称:", torch.cuda.get_device_name(i))
        print(f"GPU {i} - 设备能力:", torch.cuda.get_device_capability(i))
        print(f"GPU {i} - 已分配内存:", torch.cuda.memory_allocated(i), "字节")
        print(f"GPU {i} - 已缓存内存:", torch.cuda.memory_reserved(i), "字节")

    # 打印 CUDA 版本
    cuda_version = torch.version.cuda
    print("CUDA 版本:", cuda_version)

    # 检查当前设备
    current_device = torch.cuda.current_device()
    print("当前设备 ID:", current_device)
    print("当前设备名称:", torch.cuda.get_device_name(current_device))
else:
    print("该机器没有 GPU。")

常见问题

问题1:启动容器通过-v命令挂载方式同步宿主机的文件,使用docker commit打包镜像之后,新镜像不包含该文件

直接在容器内将文件拷贝到非挂载目录,再进行提交打包,确保提交时内容在容器文件系统中。以下是具体步骤:

1. 进入容器并复制文件

进入容器的交互终端,然后把 /app 下的文件复制到容器内的其他目录(如 /opt):

bash
复制代码
docker exec -it <容器ID或容器名称> /bin/bash
cp -r /app /opt/app_backup # 将 /app 目录内容复制到 /opt/app_backup

2. 验证文件是否已复制到新目录

在容器终端中检查文件是否已复制成功:

bash
复制代码
ls /opt/app_backup # 查看新目录是否包含文件

3. 提交容器为新镜像

退出容器终端后,通过 docker commit 将容器打包为新的镜像:

bash
复制代码
docker commit <容器ID或容器名称> 新镜像名称:标签

4. 使用新镜像启动容器

使用新的镜像启动容器,不添加挂载配置,然后查看 /opt/app_backup 是否包含之前的文件:

bash
复制代码
docker run -it 新镜像名称:标签 /bin/bash
ls /opt/app_backup # 确认文件存在
这样,文件就会保存在新镜像内,即使没有挂载宿主机目录,启动的新容器也会包含这些文件。

更多推荐