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 |
|