1. 引言

上学的时候就常常听到大神在讨论Docker,当时觉得这是个很高级的工具,但工作后才真正意义上认真进行了研究,使用后一直有相见恨晚的感觉。 本篇希望可以将Docker的好处以及实用的指令整理下来,让有听过没用过但有兴趣想了解的朋友,有机会使用到这个好工具。

2. 镜像与容器

我个人一直将镜像档和容器的关系比喻为PPT中的模板以及一份具体的PPT材料。如下所示:

Docker基础知识简介_docker

镜像(Image)可以视为一个只读的模板,基于这个模板我们可以建立不同的容器(Container)。在镜像中,可以包含一个完整的操作系统环境,可根据使用者的需求不同而带有不同的环境。在我们的本地的镜像可以当做我们拥有的开发环境模板,基于这些模板,我们可以根据任务的需求不同去开启适合的容器来执行相应的任务。 类比PPT中的例子,当某人做出了一个PPT模板时,希望可以分享出去让其他人使用,只需要将这个模板放到网络上,供其他人下载即可。拿到这个模板的人也可以大量的去制作投影片,去完成需要完成的任务。在docker中镜像与容器就像是这样的关系。

3. 下载镜像

在介绍完镜像和容器的关系后,我们使用以下命令来下载镜像到本地,如下:

sudo docker pull [Image Name]

例如:

sudo docker pull nvcr.io/nvidia/pytorch:22.04-py3

我们也可以使用以下的指令来知道目前比较热门的镜像,其中​​[Search Name]​​可以改成感兴趣的关键字。

sudo docker search [Search Name]

举例如下:

Docker基础知识简介_bash_02

4. 列出所有镜像

我们可以使用​​sudo docker images​​指令,来查看所有的镜像。执行结果如下图所示,

Docker基础知识简介_bash_03

可以看到字段包含:

  • ​REPOSITORY​​:代表这个镜像档来自哪个仓库
  • ​TAG​​:镜像的标记信息
  • ​IMAGE ID​​:镜像的唯一id值
  • ​CREATED​​:建立时间
  • ​VIRTUAL SIZE​​:镜像的大小

5. 删除镜像

可以使用以下指令来删除镜像,​​[Image Name]​​为需删除镜像的名字。

​sudo docker rmi [Image Name]​


6. 建立并执行容器

​run​​这个指令有很多参数可以设定。可参考​​此官方文件​​。

sudo docker run

7. 列出所有的容器

列出所有的容器的命令如下:

sudo docker ps -a

结果如下:

Docker基础知识简介_bash_04

8. 退出容器

在容器内我们可以直接输入​​exit​​来离开容器,并回到原本的系统。

9. 进入容器

我们可以退出容器当然就可以再次进入容器,主有有两种方法可以进入容器,分别是​​exec​​和​​attach​​,两条指令中的​​[Container]​​为需要输入的容器的名称或是容器的ID。

sudo docker exec -it [Container] bash
sudo docker attach [Container]

而以上这两个指令有什么差别呢?差别就是如果我们使用​​exit​​离开容器时,当初用​​exec​​进入的容器并不会中止,但是用​​attach​​进入的容器,当我们离开容器后,这个容器就会被中止。示例如下:

Docker基础知识简介_bash_05Docker基础知识简介_bash_06

10. 删除容器

我们也可以通过以下指令来删除不要的容器,​​[Container]​​同样是需要输入容器的名称或是容器的ID。

sudo docker rm [Container]

如下所示:

Docker基础知识简介_多参数_07

11. 启用与停止容器

启用与停止的指令也相当简单,分别是:

sudo docker start [Container]
sudo docker stop [Container]

12. 总结

本文对docker最基础的概念镜像和容器进行了详细的阐述,并对二者最常用的语法命令进行了归纳总结,并给出了相应的示例。 您学废了嘛?

Docker基础知识简介_docker_08