ITPub博客

首页 > 云计算 > > 【docker】Ubuntu服务器docker搭建与使用

【docker】Ubuntu服务器docker搭建与使用

作者:浪花小雨滴 时间:2020-05-09 11:37:45 0 删除 编辑

0. 写在前面

约莫两周前,实验室的GPU服务器突然宕机。最初体现在SSH无法连接,经过简单随意的排查,发现网口灯闪烁频率不对,遂认为实验室网络不稳定,等网络恢复正常就好了。期间几个同学问我服务器是不是坏了,等了大约一周,就带着显示屏一探究竟。结果呢,服务器都开不了机,甚至....BIOS都进不去.....本着不接锅的原则,联系了售后.....售后检查后说只是系统坏了,重装即可。

系统重装后让我想起了原本服务器混乱的环境,每个用户都会安装自己的python,环境也都会自己配置,这就导致服务器的空间利用率很低;此外,每个用户都拥有sudo权限,也导致大家在服务器上存放的资料是很不安全的。基于上述问题,决定为服务器部署docker环境,新建用户全都改为普通用户,不再拥有sudo权限,各用户的工作目录添加适当的权限,确保隐私安全。

1. docker简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。(源自百度百科)

按照我个人的理解,docker是一个大的虚拟机环境,其中包含很多的虚拟机镜像,而这些镜像会包含已经配置好的环境;容器则是基于这些镜像,实例化得到的虚拟机,在某一个容器内可以随机修改环境配置,而不会噪声环境之间的相互干扰。

2. docker及nvidia-docker环境搭建

由于要使用本机的GPU资源,因此,安装docker之后还需要安装nvidia-docker;而且,在本地也要预先安装GPU驱动、cuda、cuDNN等。这些安装教程非常多且详细,在此给出链接不在赘述。

2.1 cuda安装

https://blog.csdn.net/tanmx219/article/details/86210023​blog.csdn.net
https://blog.csdn.net/dihuanlai9093/article/details/79253963/​blog.csdn.net

2.2 docker及nvidia-docker安装

Ubuntu 18.04 (测试可用)

[笔记] Ubuntu 18.04安装Docker CE及nvidia-docker2流程​www.cnblogs.com图标

Ubuntu 16.04 (未测试)

https://blog.csdn.net/qq_41493990/article/details/81624419​blog.csdn.net

3. docker镜像

新建docker镜像主要有两种方式,一种是通过Dockerfile的方式来构建,由于笔者也是docker新手,并没有掌握这种镜像构建方式;第二是基于DockerHub上的开源镜像进行修改,构建适用于自己的镜像。以下仅介绍第二种方式。

以pytorch为例,使用docker search pytorch在DockerHub上搜索公开的镜像;

docker search pytorch

在此,选用STAR最多的pytorch/pytorch,可通过docker pull pytorch/pytorch来拉取镜像。其中,还可以通过TAG标签来细化要拉取的镜像,默认拉取latest镜像,可在hub.docker.com/网站中具体查询,经过查询,pytorch/pytorch镜像有如下TAG:

TAG

考虑本地cuda版本等情况,我最终使用了1.2-cuda10.0-cudnn7-runtime.

镜像拉取后,可在本地使用docker images 查看所有的镜像

docker images (截屏较晚,已经作出了很多的修改)

4. 新建容器

初次使用docker时,要新建属于自己的容器,之后所有的训练任务可在该容器内完成,新建容器的常用指令为:

nvidia-docker run -it -v DIR_LOCAL:DIR_CON -p PORT_LOCAL:PORT_CON --name NAME IMAGE

其中,-it表示使用交互式界面新建容器,即工作在/bash/bin;-v表示将本地路径映射至容器中的相应路径,DIR_LOCAL表示本地路径,DIR_CON表示容器内的路径;-p表示将本地端口与容器端口建立映射,深度学习中,在使用tensorboard时会用到;--name表示为自己的容器取名字,方便下次使用该容器时使用NAME来调回,而不需要使用ID;IMAGE表示镜像名字,同样可以使用TAG来具体化。(由于需要使用GPU资源,因此使用nvidia-docker新建容器,而不是docker)

若现查看已经存在的容器,可使用命令

docker ps -a

可列出所有的容器(包含已停止工作的),去掉-a仅仅显示正处于工作状态的容器。

5. 退出容器

退出容器有两种方式,其一是退出后容器也停止工作(docker ps查看不到),通过键入exit或者使用快捷键Ctrl+D实现;其二是退出后容器会在后台继续工作(docker ps可以看得到),通过快捷键Ctrl+P+Q实现。

6. 返回容器

对于已经停止工作的容器,首先要恢复其工作状态

docker restart (NAME or ID)

正在工作的容器则无需此步骤。接下来,返回容器

docker attach (NAME or ID)

7. 其他一些命令

使容器停止工作

docker stop (NAME or ID)

删除容器

docker rm (NAME or ID)

删除镜像

docker rmi (IMAGE or IMAGE_ID)

8. 授予普通用户docker权限

上述的命令,很多都需要授予sudo权限才可以使用。但是,普通用户不具备sudo权限的话,就无法使用,可以通过新建用户组的方式来解决。

sudo groupadd docker #添加docker用户组

sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中

newgrp docker #更新用户组

docker ps #测试docker命令是否可以使用sudo正常使用


以上,就是docker的基本搭建和使用方式~

Reference

  1. blog.csdn.net/h36365948

2. baike.baidu.com/item/Do

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3137509/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    40010