写在前面
开工咯~新年第一个打工日探索一下docker开发目标检测,今天探索了关于windows docker、nvidia-docker、ssh docker容器、docker容器端口转发,至此完成了docker的入门操作,很惊叹其轻量化打包环境的作用,但目前还不清除其用武之地,后续会继续探索。
windows docker
Docker Desktop是适用于Windows的Docker桌面,是Docker设计用于在Windows 10上运行。它是一个本地 Windows 应用程序,为构建、交付和运行dockerized应用程序提供易于使用的开发环境。Docker Desktop for Windows 使用 Windows 原生 Hyper-V 虚拟化和网络,是在 Windows 上开发 Docker 应用程序的最快、最可靠的方式。Windows 版 Docker 桌面支持运行 Linux 和 Windows Docker 容器。
安装windows docker destop参考链接【全面详细】Windows10 Docker安装详细教程
nvidia-docker
NVIDIA于2016年开始设计NVIDIA-Docker已便于容器使用NVIDIA GPUs。 第一代nvidia-docker1.0实现了对docker client的封装,并在容器启动时,将必要的GPU device和libraries挂载到容器中。但是这种设计的方式高度的与docker运行时耦合,缺乏灵活性。存在的缺陷具体如下:
- 设计高度与docker耦合,不支持其它的容器运行时。如: LXC, CRI-O及未来可能会增加的容器运行时。
- 不能更好的利用docker生态的其它工具。如: docker compose。
- 不能将GPU作为调度系统的一种资源来进行灵活的调度。
- 完善容器运行时对GPU的支持。如: 自动的获取用户层面的NVIDIA Driver libraries, NVIDIA kernel modules, device ordering等。
- 基于上面描述的这些弊端,NVIDIA开始了对下一代容器运行时的设计: nvidia-docker2.0。
详细nvidia-docker 2.0参考链接NVidia Docker介绍
在docker运行mmdetection时需要安装nvidia-docker,具体安装可搜索安装,并将容器的daemon configuration file修改runtimes方式为nvidia,详细参考nvidia-docker部署并配置GPU机器学习环境
部署好一切后就可以在docker容器中开始运行mmdetection,具体操作参考全网最细 | 教你如何在 docker 容器下使用 mmdetection 训练自己的数据集
ssh docker container & docker port transfer
如果想远程连接docker容器那就需要再容器里装好openssh,并开启相关端口,这时我通过docer容器里ifconfig看ip为172.17.0.2,但是我的宿主机并不能ping通,不过在创建docker容器时可以采用端口映射,这样就可以用宿主机的ip和端口来ssh远程连接容器了(这是一个笨方法,不过也算走通了远程控制docker容器)。
docker run --runtime=nvidia --name mmdet -p 8828:22 -i -t apulistech/mmdetection /bin/bash
这里将宿主机的8828端口映射到容器的22端口,从而就可以用宿主机的ip和8828端口。以下是示例,本机在之前已经和宿主机采用zerotier进行内网组网。本机ip:192.168.192.98,宿主机是192.168.192.67。