什么年代了还不会用Docker吗?——手把手教你安装和使用Docker


前言

简单易懂的教程,手把手教你安装和使用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只是一个工具,我来一步一步教你怎么使用它,让你不需要为这些琐事分心,专注于自己的目标。等到之后用得多了,自然也就慢慢理解了。

猜你喜欢

转载自blog.csdn.net/FANFANHEBAOER/article/details/117673992