Bootstrap

基于NVIDIA的dockerfile实操

dockerfile 说白了就是 生成镜像的文档。可以通过执行dockerfile很快速的生成镜像


零、前言

主要是以下几个步骤:

  1. 安装NVIDIA Container Toolkit。这个工具是nvidia官方提供,可以给docker提供一些接口,总之要在docker中使用GPU需要先装好这个工具;
  2. 执行dockerfile拉镜像以及封装
  3. 通过镜像启动docker

一、安装docker

$ sudo apt install docker.io

$ sudo systemctl start docker

参考:https://learnku.com/docs/ubuntustudy/getting-started-with-docker-section-2-installing-docker-in-ubuntu1804/8853

二、执行dockerfile

2.1 dockerfile书写示例

# 基础镜像i
FROM nvidia/cuda:11.4.1-cudnn8-runtime-ubuntu18.04

RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys XXXXXXX

# 安装所需的依赖和工具
RUN apt-get update
RUN apt-get update && \
    apt-get install -y software-properties-common && \
    add-apt-repository -y ppa:deadsnakes/ppa && \
    apt-get update && \
    apt-get install -y python3.7 python3.7-dev python3-pip && \
    apt-get install -y python3-distutils python3-setuptools && \
    update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 1 && \
    update-alternatives --set python3 /usr/bin/python3.7 && \
    ln -s /usr/bin/pip3 /usr/bin/pip 
RUN apt-get install -y wget vim openssh-server git libgl1-mesa-glx iputils-ping
RUN rm -rf /var/lib/apt/lists/*

# 设置工作目录
WORKDIR /workspace

# 安装Python依赖包
COPY ./requirements.txt requirements.txt
RUN pip3 install --upgrade pip
RUN pip3 --no-cache-dir install -r requirements.txt

# 暴露端口
EXPOSE 8080

# 启动应用
CMD ["python3"]

注意:

  1. 镜像名可以从这里获取:https://hub.docker.com/layers/nvidia/cuda/11.4.1-cudnn8-runtime-ubuntu18.04/images/sha256-258bc949d52cd6c4db94084e5180d1f0589ebfbea651c74486eaa06c2dcbf765?context=explore 或者 https://hub.docker.com/r/nvidia/cuda/tags
  2. 拉取镜像速度过慢,可以参考此链接修改镜像源:也可以看附录2。https://blog.csdn.net/wuqingshan2010/article/details/111662824
  3. 路径显示不存在:Dockerfile一般都是放在根目录下,COPY的文件使用相对路径
  4. 解决The following signatures couldn’t be verified because the public key is not available问题:RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 你的key

2.2 dockerfile执行命令

docker build -t 镜像名称 -f /path/to/Dockerfile .

其中,-t 参数指定构建的镜像名称,-f 参数指定使用的 Dockerfile 文件,. 表示使用当前目录作为构建上下文。

三、通过镜像启动docker

3.1 创建docker

  • 常用命令
docker run --gpus all -it -p 8930(主机端口):2892(容器端口) --name 容器名称  -v 主机目录:容器目录  镜像名:版本  /bin/bash 

详细说明:https://blog.csdn.net/zhong_jay/article/details/108668246

  • 快速启动镜像
docker run --rm -it --gpus all 镜像名:版本 bash

注意:
Q:docker内起服务,docker外访问不到服务的问题
A:
第一步:在启动docker的时候设置暴露ip,如

docker run --gpus all -it -p ip(外部访问的地址):5000(主机端口):5000(容器端口) --name 容器名称  -v 主机目录:容器目录  镜像名:版本  /bin/bash

第二步:发送请求代码中app.run(ip='0.0.0.0', port=8000)

3.2 启动docker

  • 启动docker
docker start 容器id

注意:其中容器id通过docker ps查询

  • 进入docker
docker exec -it 容器id /bin/bash
  • 关闭docker
docker stop 容器id
  • 删除docker
docker rm 容器id

四、对镜像的一些操作

4.1 保存镜像

docker commit -m="描述信息" -a="作者" 容器id 目标镜像名: [TAG]

例如:

docker commit -a “xxx” -m “xxx” 容器名称或id 打包的镜像名称:标签

4.2 删除镜像

docer rmi 镜像名

4.3 打包镜像

docker save -o /root/xxx.tar  <name>

4.4 导入镜像

docker load -i /root/xxx.tar

五、对docker的一些操作

4.3 打包docker

docker export -o /root/xx.tar  <name>

4.4 导入docker

docker import xx.tar <name>:latest

附录:小知识&问题记录

1. 如何查看ubuntu上cuda和cudnn的版本

要查看 Ubuntu 上的 CUDA 和 cuDNN 版本,可以按照以下步骤进行:

  1. 查看 CUDA 版本

可以使用以下命令来查看 CUDA 的版本:

cat /usr/local/cuda/version.txt

该命令将显示 CUDA Toolkit 的版本号。

也可以用nvidia-smi查看。

  1. 查看 cuDNN 版本

可以使用以下命令来查看 cuDNN 的版本:

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

新版本:

cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

该命令将显示 cuDNN 的版本号和其他相关信息。
如果你的 CUDA 和 cuDNN 都安装在不同的路径中,那么请相应地更改上述命令中的路径。希望以上信息可以帮助你。

2. 如果docker拉取镜像太慢,则更改源

更改源方式
sudo gedit /etc/docker/daemon.json

在文件末尾添加如下内容:

{
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
    	    }
	},
     "registry-mirrors" : ["https://pee6w651.mirror.aliyuncs.com"]
}
sudo systemctl daemon-reload
sudo systemctl restart docker

参考链接:

https://cloud.tencent.com/developer/article/1924792
https://blog.csdn.net/wuqingshan2010/article/details/111662824
https://cloud.tencent.com/developer/article/1751221

;