docker的优势在于:docker 一次构建,到处运行。隔离机制,与运行环境无关。因为这些特点,就不会出现我们平时说的:“在我的电脑上运行没问题的呀”,由于隔离机制,所以不用担心CPU多少核,系统是Linux或者windows,你只要有docker其他的都没有影响。
本次将在docker容器中搭建、调试、运行画面投影过程及相关问题解决记录如下:
1 Nvidia-docker的安装
2 在vscode通过ssh连接docker创建好的容器进行调试
3 容器在运行过程中使用容器外的系统文件
由于深度学习相关的环境都需要用到英伟达显卡驱动的算子,因此不同于直接安装docker,需要安装类似于特别版本的nvidia-docker
具体安装参考链接:Ubuntu18.04安装nvidia-docker(亲测有效,步骤详尽)_那记忆微凉的博客-CSDN博客Ubuntu 18.04安装NVIDIA-docker0.前提: (1)首先安装docker;具体步骤:https://blog.csdn.net/BigData_Mining/article/details/87868711 (2)安装Nvidia驱动,CUDA和CUDNN;具体步骤:https://blog.csdn.net/BigData_Mining/article/detai...https://blog.csdn.net/BigData_Mining/article/details/99681168注意 安装过程中:
该行命令使用到的 curl… | sudo apt-key add - 下载命令有时会因为网络问题无法下载添加钥匙完成添加密钥的操作,可通过手动点击链接下载至本地,再在下载下的文件夹下运行
sudo apt-key add [下载文件名]
完成添加密钥的操作。
Nvidia-docker与docker的运行区别在于创建容器时的运行命令为:
docker run ……
nvidia-docker run ……
在docker创建好容器后进行代码运行有时会需要进行代码调试,而前面又说过它本身就类似于一个ubuntu的系统,因此自然而然就会想到可以使用ssh连接上该容器,并通过vscode进行代码调试,在此处涉及到一个问题,就是ssh连接时候的端口问题,正常ssh连接需要几个信息:
连接在同一个局域网下、用户名、ip地址、端口。
在docker容器中设置好映射的端口及ssh-server部件安装设置具体安装步骤可参考:
https://blog.csdn.net/qq_43914736/article/details/90608587https://blog.csdn.net/qq_43914736/article/details/90608587
重点在于:在创建docker的容器前就需要将本机的端口映射给容器端口:
docker run –name [容器名] -p 22:6006 [镜像名]:[镜像标签]
此处的-p设置,指的是将本机的22号端口映射到容器的6006端口。
后续ssh docker容器的端口就是此时写入的6006端口;
用户名为:root;
Ip地址:本机的ip地址
此处有几个使用注意事项:
a. 本机可能没有开启22端口
在终端查看ubuntu关于22端口相关信息:
Netstat -ntlp | grep 22
此时若无发现该命令有任何输出,在终端执行以下命令开启端口:
sudo apt-get install ufw sudo ufw enable sudo ufw allow 22
b. 在重启开机重新运行容器(此时容器在后台已成功运行)后,ssh无法连接上容器
在容器终端重启ssh:
service ssh restart
在使用容器的过程中,发现容器需要使用到容器外部的文件,可通过把容器内外的文件夹进行关联,实现数据同步,在容器被删除后仍可在外部文件夹中保留数据,在不进入容器的情况下像容器传输数据
在创建容器时,通过:-v 命令将需要的在容器内使用到的系统文件夹挂载
具体命令如:
docker run -it -v /home/test:/home:ro centos /bin/bash
参数讲解:
冒号前/开始,一般为指定宿主机路径,所以为指定路径挂载)
设置容器内文件权限:
:ro #只读,只能通过宿主机来操作文件,容器内部无法操作!
:rw #可读可写, 默认