首页 > 云计算 > > 【NLP笔记】深度学习docker容器化部署
摆脱各种难搞的各种环境,你只需要一个docker。
强烈给大家安利docker, 不管你是要部署,还是多人同时使用一台服务器,或者时不时换电脑换机器所有的包又要重装一篇,十分钟上手,让docker来救你~~
【概念&&原理】
1. docker 的原意是装卸货的船工,难怪logo是个海豚... 在码农界docker被称为容器,在概念理解上我觉得可以直接理解为虚拟机,功能约等同于VMware,但是比VMware用起来快很多,更适用于Linux系统。

2. docker 镜像: 类似与操作系统的ISO 镜像文件,docker hub上有很多大家都封装好的镜像,例如可以直接pull 深度学习镜像,轻而易举的做一个伸手党。
3. docker-nvidia: docker-nvidia是介于镜像与容器的一层,在不需要用NVIDIA的GPU时这一层可以不要,但是在容器中使用GPU时这一层必须,docker 容器中无法直接使用主机的GPU,因为主机的GPU使用需要专有的NVIDIA驱动,所以容器要使用GPU硬件必须有个能用驱动的桥梁就是docker-nvidia, 安装方法也很简单参考7。记得使用docker-nvidia新建容器需要带runtime参数,具体参考最下面指令。

4. docker 容器:从镜像中新建一个容器,类似于用ISO系统镜像装了一台新机器, 一个ISO系统镜像文件可以装很多台新机器,从一个docker镜像里面也可以新建出很多的容器。容器是镜像的上一层。
5. docker容器的封装:当你自己在容器里面做一些定制化的s改动之后,为了方便一一移植可以把自己的容器再封装成一个镜像。打包成一个文件拷贝,或则建立一个私有仓库通过网络去pull都是OK的。
6. docker通讯:dockers与主机之间的通讯有几种方式,容器之间的通讯也有几种方式,但是我觉得最简单的就是端口映射(link 方式只能单向,compose有点复杂, 不过也有适用的场景看这篇,官方其实更推荐的是所有的链接全部bridge,参考这篇), 基本上可以通过端口访问建立任何连接,访问容器内的端口就映射出来,从容器内访问就直接访问主句IP(之前一直误以为访问宿主机IP也要映射其实不用)。
7. docker的安装和配置:文主收藏了一篇清爽简洁有效的笔记,点这里。
【十分钟上手指令】
总结一下常用指令,十分钟学会够了。
遍历镜像
sudo docker images
查询容器id
sudo docker ps # 当前运行容器
sudo docker ps -a # 所有容器
删除容器
sudo docker rm id(容器id)
sudo docker rm $(docker ps -aq)
删除镜像
sudo docker rmi image_id
查看容器网络和ip地址
sudo docker inspect id(容器id) 比如:878eb07daabc
启动docker 交互式 容器
sudo nvidia-docker run --name=flask_1 -it pytorch/pytorch:1.1.0-cuda10.0-cudnn7.5-devel /bin/bash
ctrl+P ctrl+Q crtl+D 退出交互界面
sudo docker attach name(容器名字) 再次进入交互界面
sudo docker start name/id 启动容器
sudo docker -i -t exec docker_name /bin/bash
copy 文件到docker 容器
sudo docker cp source_path dockerId:target_path
sudo docker cp alphapose_test/ ea0c826c554f:/workspace
docker 将容器打包成镜像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
sudo docker commit -p -a "payl_jp" -m "first commit" 878eb07daabc flask_server:7.18
-p 容器暂停
-a 作者名
-m 提交信息
容器名
要打包成的镜像名
将镜像压缩成文件/ 千万容器先commit成新镜像,新镜像再打包,不commit永远看不到自己做的改动
docker save hello -o hello.tar
从压缩的镜像载入
docker load -i intent.tar
docker搭建本地私有化仓库
sudo vim /etc/docker/daemon.json
加上: "insecure-registries":["192.168.1.11:5000"]
上传到仓库:
1.tag : sudo docker tag ac2782688f80 192.168.1.11:5000/flask_server:7.18
2.push : sudo docker push 192.168.1.11:5000/flask_server
从私有仓库下载:
sudo docker pull 192.168.1.11:5000/flask_server:7.18
指定端口启动容器
sudo docker run --runtime nvidia --name flask_docker_server_1 -p 8080:8080 -it 1f466f9d421c /bin/bash
文件的挂载/ 千万不要打包这种有挂载文件的容器,文件会超乎你想象的大
docker exec docker_name -i -p 8888:8888 --ipc=host -v /data:/data
文主用这个方式跟人合作,写不同的模块无缝配合连接起一个比较完整的深度学习项目。
入坑玩的开心~~
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3118389/ ,如需转载,请注明出处,否则将追究法律责任。