docker入门指南&从零配置一台ubuntu容器
本文记录了docker的一些基本操作以及如何一步一步配置一台ubuntu的容器,进行基础设置。
[toc]
docker基本操作
镜像操作
查看本地机器上有的镜像
1 | |
搜索网络上的镜像
1 | |
下载镜像到本地
1 | |
删除镜像
1 | |
容器操作
查看运行的容器
1 | |
删除容器
1 | |
启动容器
1 | |
停止容器
1 | |
启动历史容器
1 | |
重启容器
1 | |
进入正在运行的容器
1 | |
容器打包镜像
1 | |
docker 从零开始配置torch容器
创建容器
使用如下命令创建一个容器:
1 | |
由于主机可以创建多个容器,每个容器的SSH端口不可能都是22,因此需要将容器的SSH端口映射到主机的其它端口上。
其中,your_port以及ssh_port以及your_name和your_image_name分别需要设置为你想将映射到的主机端口(注意不要和别人的一样)、主机当前的SSH端口(默认是22)、你的容器名称、你要拉取的镜像名称。
例如,我用如下命令创建了我的pytorch容器:
1 | |
其中:
-e NVIDIA_DRIVER_CAPABILITIES=compute,utility和-e NVIDIA_VISIBLE_DEVICES=all是设置环境变量,分别表示驱动程序功能和可见设备,如此一来可以使得容器能够直接使用cuda以及gpu。你也可以使用nvidia-docker run命令来创建容器,这将会自动添加这些环境变量。-p 0.0.0.0:9595:22表示将容器内部的端口22映射到主机的端口9595。你可以多次使用-p参数来添加映射别的端口。-v /home/puao:/data表示将容器内部的目录/data挂载到主机的目录/home/puao。如此以来容器内部的/data目录将实现与/home/puao目录进行数据共享。
配置密码
当使用上述命令创建好容器后,由于该镜像是一个纯净的pytorch-cuda-cudnn的ubuntu镜像,因此我们需要先对该ubuntu进行一些配置。
我们使用passwd root命令来为root用户设置密码,如此以来使用ssh或者其他方式登录容器时,需要先输入该密码。
配置apt
在配置apt之前,需要先有一个编辑器(部分镜像没有自带编辑器)。
1 | |
由于apt默认是国外源,下载速度比较慢,此处我们更换为清华镜像源:
1 | |
打开该文件后,我们将其修改为清华镜像源:
请注意,根据ubuntu版本的不同,清华镜像源有略微的不同,具体可以查询ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror。下面展示的是ubuntu 20.04.1版本的。
1 | |
完成后,我们使用以下命令,更新apt源:
1 | |
此处若出现如下错误:
1 | |
则使用如下命令来导入软件包签名:
1 | |
此处若仍然出现错误,且提示The repository ... does not have a release file
那么大概率是由于源是https而没有安装https相关的包。
解决方法1:
1 | |
解决方法2:
1 | |
完成之后,安装常用软件包:
1 | |
配置SSH
首先安装OpenSSH服务器:
1 | |
完成后,查看SSH服务是否已经开启:
1 | |
若未开启,则使用命令开启:
1 | |
接下来,修改防火墙策略将ssh添加到白名单:
1 | |
修改SSH配置文件,设置可以使用root用户登录,以及登录需要验证。
1 | |
打开文件后,找到注释的内容,并修改为如下:
若你不知道/找不到对应的内容,也可以直接将下面内容添加到该文件。
1 | |
设置完成后,重启ssh即可连接到该容器:
1 | |
现在,你就可以在任意一台你自己的电脑上使用如下命令来通过SSH连接你的docker了:
1 | |
配置SSH环境变量
为什么要配置SSH的环境变量?先举一个例子:虽然我拉取的镜像是pytorch的,且我在容器内部直接调用python时,import torch是可以正常工作的,但我在ssh中调用python时,torch不但提示未安装,甚至python版本都不一样。
这只能说明一件事情:ssh的终端和我们自己在容器中使用的终端的环境变量不同。
为了在ssh中能够使用正常的命令,我们需要修改环境变量。
首先在容器中使用命令env,查看正常情况下的环境变量。找到其中一项:
1 | |
复制该内容,打开下面的文件:
1 | |
在# If not running interactively, don't do anything这段话前面,粘贴刚刚复制的内容。
再输入命令:
1 | |
现在我们就可以在SSH中使用正确的命令了。
至此,一台支持gpu和cuda的容器就已经配置完毕了。
额外配置
这些配置可以根据自己的需求来选择。
- 配置免密
ssh登录
实际上是使用公钥登录。假设主机A是Windows,要免密码连接主机B,即Linux主机,此时主机A在终端输入:
1 | |
输入后会提示生成文件的路径,选择,通过该路径(一般是C:/Users/用户名/.ssh下)找到刚刚生成的id_rsa.pub文件,复制里面的内容,并粘贴到目标主机的~/.ssh/authorized_keys文件内即可完成。
- 更换
pip镜像源
切换到用户目录:
1 | |
创建文件pip.conf,粘贴如下内容即可更换为豆瓣源:
1 | |