对于计算机科研,需要使用服务器进行必要的实验。由于使用同一服务器的同学很多,因此为了保证每位同学在使用时能够在服务器上拥有自己的环境,于是使用docker进行管理。其原理就是为每位同学建立属于自己的容器,与宿主机隔离,形成独立的沙箱,这样每个人就可以在自己的docker中乱搞,而且不会影响到其他同学的使用了。
下面将以Ubuntu 18.04.4 LTS为例说明配置属于自己的docker的流程。
本实验服务器环境及配置如下:
- Ubuntu 18.04
- RTX2080Ti $\times$ 4
- cuda 10.1
步骤
我们将物理服务器上操作系统称之为宿主机,保证在宿主机上安装有docker,如没有安装,请自行安装docker。
1.查看是否安装成功:docker -v
2.然后从Docker Hub上寻找并拉取所需要的镜像,这里拉取了nvidia/cuda
:docker pull nvidia/cuda:10.0-base
3.通过docker run
命令创建一个新的容器,其命令格式为:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
其中OPTIONS
有如下配置:
参数名 | 含义 |
---|---|
-d, --detach=false | 指定容器是否运行于前台,默认为false,当设置为true容器会在后台运行并返回容器id |
-i, --interactive=false | 打开STDIN,用于控制台交互 |
-t, --tty=false | 分配tty设备,该可以支持终端登录,默认为false |
-u, --user="" | 指定容器的用户 |
-a, --attach=[] | 登录容器(必须是以docker run -d启动的容器) |
-w, --workdir="" | 指定容器的工作目录 |
-c, --cpu-shares=0 | 设置容器CPU权重,在CPU共享场景使用 |
-e, --env=[] | 指定环境变量,容器中可以使用该环境变量 |
--name="" | 为容器指定一个名称 |
-m, --memory="" | 指定容器的内存上限 |
-P, --publish-all=false | 随机指定容器暴露的端口 |
-p, --publish=[] | 指定容器暴露的端口 |
-h, --hostname="" | 指定容器的主机名 |
-v, --volume=[] | 给容器挂载存储卷,挂载到容器的某个目录 |
--volumes-from=[] | 给容器挂载其他容器上的卷,挂载到容器的某个目录 |
--cap-add=[] | 添加权限,权限清单详见:http://linux.die.net/man/7/capabilities |
--cap-drop=[] | 删除权限,权限清单详见:http://linux.die.net/man/7/capabilities |
--cidfile="" | 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法 |
--cpuset="" | 设置容器可以使用哪些CPU,此参数可以用来容器独占CPU |
--device=[] | 添加主机设备给容器,相当于设备直通 |
--dns=[] | 指定容器的dns服务器 |
--shm-size= | 设置共享内存大小,默认是64M |
--gpus gpu-request | 要添加到容器的GPU设备(all 用于传递所有GPU) |
本例中使用docker run --gpus all -itd --name=xxx --shm-size 8G -p 9099:22 -v /media/work/xxx:/data nvidia/cuda:10.0-base
创建容器,其中选项可查阅上表自行配置。
4.运行起容器后,会返回容器的id,可通过docker ps
查看该容器的运行情况。同样在宿主机中,使用docker exec -it xxx /bin/bash
进入容器内部进行交互,xxx
可以是容器的name也可以是容器id。
5.通常新机器是没有安装ssh
的,可以通过service ssh start
或/etc/init.d/ssh
来启动ssh服务,如果报错为bash: /etc/init.d/ssh: No such file or directory
类似的信息,则需要重新安装ssh
。对于Ubuntu系统,具体方法如下:
sudo apt-get remove openssh-server openssh-client --purge -y
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get update
sudo apt-get install openssh-server openssh-client
安装完成后即可启动ssh。
6.依然在宿主机中,还是进入容器内部,使用passwd
命令更改登录密码,此密码用于ssh
登录。
7.使用exit
退出容器,再使用一次exit
登出宿主机。现在通过ssh root@ip -p 9099
发现并不能直接连上,即使是给容器设置了密码。
8.回到步骤6,进入容器后,vi /etc/ssh/sshd_config
,将PermitRootLogin
的选项设置为yes
。保存后使用service ssh restart
重启ssh服务。
9.回到步骤7,这时就可以成功通过ssh
命令连接到属于自己的docker了。
大功告成!
本文地址:https://alphalrx.cn/index.php/archives/137/
版权说明:若无注明,本文皆为“LRX's Blog”原创,转载请保留文章出处。
这篇写得还行,可是问题我的友联怎么不见了...
因为403了
白名单了,你刷新下试试从你的站上访问
403,cdn的吗?是的话那就是我忘了给你开权限→_→
OK