文章目录
前言
简单易懂的教程,手把手教你安装和使用Docker。
一、安装
1.卸载原有的Docker
sudo apt-get remove docker
sudo apt-get remove docker.io
sudo apt-get remove docker-ce
2.安装Docker
首先更新一下apt索引:
sudo apt-get update
然后安装curl:
sudo apt install apt-transport-https ca-certificates software-properties-common curl
安装密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
再次更新apt:
sudo apt-get update
安装最新版Docker:
sudo apt-get install docker-ce
查看Docker版本,以检查是否安装成功
docker --version
创建一个简单的容器,已检查Docker是否可以正确运行(注意在使用docker命令时都要加上sudo,否则权限不够会报错。在之后的配置环节中我们会解决这个问题。)
sudo docker run hello-world
二、配置
1.配置docker镜像源
首先创建并打开配置文件:
sudo touch /etc/docker/daemon.json
sudo chmod +w /etc/docker/daemon.json
sudo gedit /etc/docker/daemon.json
然后将下列内容添加到打开的配置文件中,保存并退出:
{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://registry.aliyuncs.com",
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
重启docker服务:
sudo service docker restart
查看刚才所添加的配置信息:
sudo docker info
2.配置用户组
添加用户组,这样在使用sudo命令时就不需要每次都加sudo了:
sudo groupadd docker
sudo gpasswd -a ${USER} docker
sudo service docker restart
newgrp - docker
3.在docker中调用GPU
在docker的19.0.3版本之后,在docker-ce中就可以直接调用GPU了,因此也就无需再安装nvidia-docker,这里也就不再赘述。不过要在docker中调用GPU,还需要安装 nvidia-container-runtime。首先创建一个shell脚本:
sudo vim runtime-script.sh
然后将下列内容添加到脚本中,保存并退出:
sudo curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
sudo curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list
sudo apt-get update
执行脚本:
sh runtime-script.sh
安装 nvidia-container-runtime:
sudo apt-get install nvidia-container-runtime
另外,如果要在容器中调用GPU,则在创建容器时,还要加上 --GPUS 参数,具体在下面第三节的使用中会讲到。
三、使用
1.一些概念
在学习使用docker之前,我们先来通俗的介绍一下docker里的几个概念,首先声明,这里并不保证下述解释的准确性,只是帮助刚接触docker的新手(比如我)有一个大概的理解:
- 镜像(image)、容器(container):通俗的理解,镜像是一个安装了各种包的模板,用于生成容器;而容器就是根据镜像这个模板复刻下来的一个实体(可以把镜像与容器的关系对应于类和实例之间的关系来理解),把它当做虚拟环境来用即可,你可以在其中安装其他的包、运行你的代码。
- 挂载:当你进入docker容器内后,是无法直接访问到原本主机上的目录和文件的,可以认为它们现在处于两个不同的文件系统中。这时如果要在容器内用到原本主机上的某些文件,就需要把主机中的目录A映射到容器中的目录B,这样就可以在容器中的B目录下访问到原主机A目录下的文件,这样就可以这就是挂载。
- 仓库(Repository):就是集中存放镜像(image)的地方,分为公有仓库和私有仓库。公有仓库中有非常多的现成的镜像可供下载和使用,例如DockerHub就是docker官方维护的一个公有仓库。
2.一个例子
2.1 概述
假如我们现在要用pytorch跑一些深度学习的代码,我们希望环境中有python、pytorch、cuda、cudnn等组件。这时就可以到上述提到的 DockerHub 上搜索相关的镜像。注意,要确保电脑上已经装好了nvidia显卡驱动,并根据驱动版本来确定可用的cuda版本,这里就不展开讲了。我的驱动是460.73,可以选择cuda11.1,因此可以再DockerHub上搜索 cuda11.1,然后选择合适的镜像。
2.1 从公有仓库中拉取镜像
例如我所用的这个 镜像 ,只要按照页面上所给的命令,即可将该镜像下载到本地进行使用:
docker pull dzw001/cuda11.1-cudnn8-python3.6-pytorch1.8.1-ubuntu18.04
此时使用下面这条命令就能看到我们刚刚拉取到的镜像:
docker images
你会看到这个镜像的名字是长长的一串,如果不喜欢的话可以给他换个简洁的名字(这里将其重命名为deep_learning):
docker tag dzw001/cuda11.1-cudnn8-python3.6-pytorch1.8.1-ubuntu18.04:latest deep_learning
此时在用 docker images 查看镜像列表,就会发现多了一个名为 deep_learning 的镜像,但原本的镜像也还在列表中,我们可以通过如下命令将其删除:
docker rmi dzw001/cuda11.1-cudnn8-python3.6-pytorch1.8.1-ubuntu18.04:latest
2.2 创建容器
有了镜像之后,就相当于有了种子,我们可以用这个镜像创建出一个个容器,创建容器的命令如下:
docker run -itd --name my_container --gpus all deep_learning /bin/bash
大概来说明一下参数的含义:
- –name my_container: 将这个新容器命名为 my_container。
- –gpus all :这个参数使得我们可以在该容器中调用到GPU。
- deep_learning: 是我们创建容器所用到的镜像的名字。
- 其余的部分:一般不会有什么变化,记住就好,想深入了解的话可以自行百度。
创建容器之后我们就可以通过如下命令来查看到它:
docker ps -a
然后我们就可以进入容器了:
docker exec -it my_container /bin/bash
到此为止,我们就基本上大功告成了。此时容器中所包含的包是和镜像中的一模一样的,你可以容器中随意安装新的包或者卸载已有的包,尽情折腾吧,反正搞出了问题可以删掉再创建一个容器。
最后,当你想退出容器时,只需要按 Ctrl + D 或者输入 exit 回车即可。如果想要删掉这个容器,就在退出之后使用如下命令:
docker rm -f my_container
2.3 挂载目录
之前提到过,在容器内是访问不到原主机上所存储的文件的,如果想要在容器内访问,我们就需要对所欲访问的目录进行挂载操作。挂载一般有两种方式可以选择,都很简单,可以参考这篇文章进行尝试。
总结
整篇文章并没有特别深入的讲解相关的知识和命令背后的意义,因为我认为对于新手而言,没必要过于深究这些,docker只是一个工具,我来一步一步教你怎么使用它,让你不需要为这些琐事分心,专注于自己的目标。等到之后用得多了,自然也就慢慢理解了。