目录
Docker架构:
Docker 包括三个基本概念:
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
容器与镜像的关系类似于面向对象编程中的对象与类。
Docker安装:
参照官网:
Installation Guide — container-toolkit 1.13.5 documentation
或者菜鸟教程:
Docker镜像获取:
TensorRT镜像获取:
(镜像内封装了TensortRT、CUDA、CudaNN等)
TensorRT Container Release Notes
Release Notes :: NVIDIA Deep Learning TensorRT Documentation
Docker私有库
参考以下文章,使用内网仓库的会用到:
Docker入门:私有库(Docker Registry)简介及使用方法(防踩坑)-CSDN博客
Docker指令:
*查看已有镜像:
docker images
*列出容器:
docker ps -a
*删除已有的容器和镜像:
docker rm 容器ID
docker image rm 镜像ID
*查看容器路径:
docker inspect --format='{{.GraphDriver.Data.MergedDir}}' <container_name_or_id>
*开启Docker容器:
docker start <容器ID/容器名称>
*停止Docker容器:
docker stop <容器ID/容器名称>
*进入Docker容器:
docker exec -it <容器ID> /bin/bash
*打包容器为镜像:
#使用命令前确保需要打包的容器处于停止状态
sudo docker commit <容器ID或名称> <新镜像名称>:<标签>
*将镜像保存为tar文件:
#使用sudo nautilus命令修改一下生成的tar文件权限
sudo docker save -o <镜像名称>.tar <镜像ID/镜像名称>
*加载tar镜像
docker load -i container.tar
*指定镜像创建容器
如果没有此镜像,将会自动下载。
docker run:创建一个新的容器并运行一个命令
--rm 表示创建完容器之后会自动删除。
--name 表示为容器指定一个名称。
--runtime=nvidia
: 这个选项告诉Docker使用NVIDIA Container Runtime来管理GPU资源。
--gpus all
: 这个选项告诉Docker将所有可用的GPU都分配给容器
nvidia/cuda:11.6.2-base-ubuntu20.04
: 这是要运行的Docker映像的名称和标签。在这种情况下,它是一个基于Ubuntu 20.04的CUDA映像,版本为11.6.2。
nvidia-smi
: 这是在容器中运行的命令,它会显示NVIDIA GPU的状态和使用情况。
sudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
*从镜像仓库中拉取或者更新指定镜像
镜像名称是ubuntu,标签是18.04。
docker pull ubuntu:18.04
然后可以使用以下命令使用上面拉取的镜像创建一个容器。
-t: 用于为构建的镜像指定标签。
-it
: 这两个选项结合在一起,表示在容器内启动一个交互式会话。这将允许您与容器进行交互,类似于在终端中运行一个命令行界面。
/bin/bash
: 这是在容器内执行的命令。在这种情况下,它是/bin/bash,它将启动一个Bash Shell会话,允许您在容器内执行命令和操作。
docker run -it --name wzq --gpus all 镜像ID /bin/bash
*利用dockerfile搭建docker镜像并用此镜像创建容器
1.需要创建一个dockerfile文件,里面添加自己的内容。运行以下命令来构建docker镜像:
docker build -t trt_starter:cuda11.4-cudnn8-tensorrt8.2_${1} .
-
docker build
: 这是 Docker 命令的一部分,用于构建 Docker 镜像。 -
-t trt_starter:cuda11.4-cudnn8-tensorrt8.2_${1}
:-t
选项用于为构建的镜像指定标签。在这种情况下,镜像的名称是 "trt_starter",标签是 "cuda11.4-cudnn8-tensorrt8.2_${1}"。${1}
是一个占位符,表示在构建命令中传递的参数。 -
.
: 这是构建上下文路径。Docker 将在当前目录中查找 Dockerfile 和相关的文件来构建镜像。
创建容器:
docker run -it --name trt_starter_${1} --gpus all -v /home/jiqiang/Code:/home/jiqiang/Code -p 8090:22 -e DISPLAY=:1 trt_starter:cuda11.4-cudnn8-tensorrt8.2_${1} bash
-
/home/jiqiang/Code:/home/jiqiang/Code: 这个选项用于将宿主机的 X11 UNIX 套接字目录 (
/tmp/.X11-unix
) 挂载到容器的相同路径,以实现图形界面的显示。相当于一个卷轴。 -
-p 8090:22
: 这个选项将容器的 SSH 服务端口 (22) 映射到宿主机的端口 8090,以便可以通过 SSH 连接到容器。 -
-e DISPLAY=:1
: 这个选项用于设置容器内的DISPLAY
环境变量,以指定 X11 服务器的地址和显示号码。 -
fish
: 这是在容器内执行的命令。在这种情况下,它是 bash,它会在容器内启动 bash Shell。