docker的一些入门知识,边学边写

1、docker干嘛用的?什么时候需要用docker?

创建隔离环境,可以做到各种开发环境大家公用一个操作系统,而开发环境互不相同。比如Tensorflow1.2需要cuda8,而tensorflow1.15需要cuda10,就比较麻烦,另外可能顺便需要个ros~~~。

2、镜像、容器

镜像和容器是docker中最基本的概念,拿操作系统类比,镜像就类似于一个Ubuntu16.04.iso文件,或者是Ubuntu的一个镜像,而容器就相当于安装在电脑上的Ubuntu1604系统,容器是真正可以使用的,而镜像,只是个文件。

docker中的镜像是一套文件,你的电脑中可以存储多个镜像,比如tensorflow/tensorflow:1.2.1-gpu,learn/totural:latest等,一个镜像有多个层,可以简单理解为组件,比如tensorflow/tensorflow:1.2.1-gpu镜像有Ubuntu1604、Cuda8、python2.7、tensorflow(距举例,未考证)等部分构成,而tensorflow/tensorflow:lateset-gpu也有python2.7,那再下载tensorflow/tensorflow:lateset-gpu时,就可以不用下载python2.7,只下载其他的就行,初学初用可以不了解这些;

容器是镜像的展开,比如把tensorflow/tensorflow:1.2.1-gpu这个镜像,经过一系列命令,变成了一个可以运行的容器,那么你可以查到他的cuda版本,python版本等,你可以对其做许多改变,容器随便折腾,不会影响你的操作系统,不会影响镜像,不要了就删了,没什么代价,镜像展开成容器后,就可以正儿八经使用tensorflow做任务了,与安装在本地计算机上是一样的。

镜像里的操作系统,正常情况下都是极简的,很有可能少很多东西,后文再说。

3、启动镜像的一些零碎知识

从镜像启动一个容器:docker run -it --rm imagename bash,其他的参数还有-p 设置端口的,-v 设置数据卷的,比较常用。

需要用gpu:--gpus all

需要图形化显示:-v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY -e GDK_SCALE -e GDK_DPI_SCALE -v /etc/localtime:/etc/localtime:ro,同时需要设置本机的显示权限(Ubuntu):xhost +

有时第一次启动一个容器,并不能遇见后期需要什么端口什么文件,使用命令没戏,貌似没这个门路,可以改配置文件实现,首先需要关闭docker,否则所有的修改都不会被保存:systemctl stop docker,改完后再启动docker:systemctl start docker,需要修改的文件有hostconfig.json和config.v2.json,路径在:var/lib/docker/container/某containerID:下面是更改过程:

添加端口:hostconfig.json --> "PortBindings":{"6006/tcp":[{"HostIp":"","HostPort":"6006"}],"8888/tcp":[{"HostIp":"","HostPort":"8888"}]};config.v2.json --> "ExposedPorts":{"6006/tcp":{},"8888/tcp":{}}、"Ports":{"6006/tcp":[{"HostIp":"0.0.0.0","HostPort":"6006"}],"8888/tcp":[{"HostIp":"0.0.0.0","HostPort":"8888"}]};

拿出修改的内容:hostconfig.json -->"6006/tcp":[{"HostIp":"","HostPort":"6006"}],就把端口改了,其他复制;config.v2.json不写了,都看得懂,找到"ExposedPorts"和"Ports",对照着看;

添加数据卷:hostconfig.json --> "Binds":["/tmp/.X11-unix:/tmp/.X11-unix","/etc/localtime:/etc/localtime:ro","/media/shopping/Data/WORK/Achievements/DeepLearning/pointnet++/pointnet2-master/:/home"];config.v2.json --> "MountPoints":{"/etc/localtime":{"Source":"/etc/localtime","Destination":"/etc/localtime","RW":false,"Name":"","Driver":"","Type":"bind","Relabel":"ro","Propagation":"rprivate","Spec":{"Type":"bind","Source":"/etc/localtime","Target":"/etc/localtime","ReadOnly":true},"SkipMountpointCreation":false},"/home":{"Source":"/media/shopping/Data/WORK/Achievements/DeepLearning/pointnet++/pointnet2-master","Destination":"/home","RW":true,"Name":"","Driver":"","Type":"bind","Propagation":"rprivate","Spec":{"Type":"bind","Source":"/media/shopping/Data/WORK/Achievements/DeepLearning/pointnet++/pointnet2-master/","Target":"/home"},"SkipMountpointCreation":false},"/tmp/.X11-unix":{"Source":"/tmp/.X11-unix","Destination":"/tmp/.X11-unix","RW":true,"Name":"","Driver":"","Type":"bind","Propagation":"rprivate","Spec":{"Type":"bind","Source":"/tmp/.X11-unix","Target":"/tmp/.X11-unix"},"SkipMountpointCreation":false}}

修改的内容:hostconfig.json --> "/media/shopping/Data/WORK/Achievements/DeepLearning/pointnet++/pointnet2-master/:/home"],就是添加个映射;config.v2.json --> 找到"MountPoints",加一个"/home":{"Source":"/media/shopping/Data/WORK/Achievements/DeepLearning/pointnet++/pointnet2-master","Destination":"/home","RW":true,"Name":"","Driver":"","Type":"bind","Propagation":"rprivate","Spec":{"Type":"bind","Source":"/media/shopping/Data/WORK/Achievements/DeepLearning/pointnet++/pointnet2-master/","Target":"/home"},"SkipMountpointCreation":false},修改对应路径就行。

4、关于为镜像添加软件

有时候apt-get update 可以正常运行,有时候就不行,可能会0%[working]这用,原因是缺了https,需要用docker cp将文件拷贝到容器里,具体的,这个安装包是:apt-transport-https_1.2.32_amd64.deb,很小,26k。

5、关于保存容器,可以export,可以save(先commit),值得提到的是,用save保存后,对容器所做的所有更改都存在,并且可用,用export的不一定能够正确可用,save后就直接就是个镜像,可以保存镜像到本地,再次导入后ID就是导出前镜像的ID。

6、珍爱生命,我用docker!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值