Docker 初学笔记

简介

因与同事公用GPU服务器,采用docker来实现环境的相互隔离。这里记录一下。
比如我们有两个人AB要开发同一torch版本下的deeplearning项目,还有两人CD要用同一个tensorflow版本的项目。大家希望彼此的环境,文件,操作等互不影响。

解决方案是,用两个镜像,一个torch一个tf;四个容器,ABCD各一个。

docker中有两个重要概念,镜像(Image)和容器(Container)。镜像就像一个装系统用的光盘,是只读的;容器就像用这个光盘装好的系统(虚拟机),可以修改,对容器的修改不会改变镜像。

操作步骤是:

  1. 在服务器上安装docker。
  2. 拉取所需的torch和tf对应版本的镜像。
  3. 从这两个镜像里分别创建容器,各两个,一共四个。
  4. ABCD四人工作时,分别进入这四个容器工作。

因为我们服务器上docker已经安装好了,这里就不介绍安装了,直接记录使用笔记。

使用笔记

主要参考的是菜鸟教程

权限问题

https://blog.csdn.net/u011337602/article/details/104541261

查看本地镜像

docker images

首先需要拉取所需的镜像,比如我们的项目是tf>=1.3的。我就尝试了如下命令:
docker pull tensorflow/tensorflow:1.13.1-gpu-py3。

然而他速度很慢,我就想会不会本地已经有同事pull好了的呢。
随用docker images命令查看本地镜像
(随便打了下码)
在这里插入图片描述
一看有个tf1.14的,这也不够啊,还得自己拉。

拉取镜像(下载到本地)

docker有一个官网,里面有一些镜像。我们可以把它下载到本地。
步骤如下:
去官网看找到要下载的镜像,比如找到tensorflow的docker镜像官网:https://hub.docker.com/r/tensorflow/tensorflow

仔细研读他对tags的说明,因为gpu版的要看显卡驱动,CUDA,CUDNN等。
然后去这个full list of tags里找到自己要的
在这里插入图片描述
比如说,我们们是python3.6,tf1.3,gpu版的,在这里输一下
在这里插入图片描述
找到一个这个
在这里插入图片描述
感觉可以的。

https://www.tensorflow.org/install

新建容器

基础

docker run命令新建容器,最基本的命令格式是:

docker run image_name command

例子:
例子:

docker run tensorflow/tensorflow /bin/bash

这样不指定版本的话默认使用最新版的(updagted)镜像。command 一般我就写/bin/bash。

指定镜像的版本

格式:

docker run image_name:TAG command

例子:

docker run tensorflow/tensorflow:1.13.0-gpu-py3 /bin/bash

这里的image_name就是刚才docker images得到的表格里面,repository这一列的内容,比如我们的tensorflow/tensorflow。 TAG是tag那一列的内容,比如1.13.0-gpu-py3.

在这里插入图片描述

端口映射/共享文件夹设置

为了以后远程编辑代码,可以需要做端口映射或设置共享文件夹:

指定端口映射

docker run -p 6009:6006 -p 23:22  -it -d --name qiaoTF tensorflow/tensorflow:1.3.0-gpu-py3  /bin/bash

指定工作路径映射(-v 宿主机目录:容器目录)

docker run -it -v /home/yuqiao/tfDocker:/home/yuqiao -w /home/yuqiao -d --name qiaoTF tensorflow/tensorflow:1.3.0-gpu-py3  /bin/bash

一些参数解释:

  • -i是interaction,交互
  • -t是terminal,分配一个伪终端
  • -d是后台运行
  • –name是指定容器的名称(这里显示的有点奇怪,应该是两个短横线)
  • -w是指定容器的工作路径(working directory),一进入容器就会进到该路径
  • -p是指定端口映射,容器端口:宿主端口
  • -v是指定工作路径映射(-v 宿主机目录:容器目录)

进入容器

通过
docker ps -a 查看这个容器的id。
然后
docker exec -it containerID /bin/bash

删除容器

如果这个容器不用了就把它删了:

通过
docker ps -a 查看这个容器的id。
然后
docker rm -f containerID

保存和重载镜像

保存:commit 和 export 二选一
重载:commit的可以直接run,export的需要import

docker commit dockerid
qiao_rfd_conda_commit # 可回滚,最后的参数是镜像的名字,可以直接run它,不需要import
docker export -o /qiaodisk/qiaoRfdConda.tar dockerid # 完全clean的新镜像,需要import之后才能run # 7.6G
scp -P 22  qiaoRfDConda_old.tar yuqiao@XXX.XX.XX.XX:/home/yuqiao/ # 移动到另一台设备

docker import /qiaodisk/qiaoRfdConda.tar qiao_rfd_conda2:xxx
#docker run --privileged -it -p 50003:22 -v /qiaodisk/tfDocker:/home/yuqiao -w /home/yuqiao -d --name qiao_conda qiaorfd /bin/bash
#docker run --privileged -p 10108:6006 -p 10109:22 -it -d -v /qiaodisk/tfDocker:/home/yuqiao -w /home/yuqiao -e DISPLAY=:10.0 -e GDK_SCALE -e GDK_DPI_SCALE --name qiao_rfd_conda qiao_rfd_conda /bin/bash   
docker run --privileged --gpus all --shm-size 8G -p XXXXX:6006 -p XXXXX:22 -it -d -v ~/docker_home:/home/yuqiao -w /home/yuqiao --name qiao_rfd_conda qiao_rfd_conda /bin/bash  #dockerid

# 如果报错: docker: Error response from daemon: No command specified.
# 用下面这个命令查看command:
docker ps  --no-trunc
# 然后把查看到的command放到docker run的最后(代替/bin/bash)



docker exec -it dockerid /bin/bash
passwd
service ssh status
service ssh start
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值