1. 引言
上学的时候就常常听到大神在讨论Docker,当时觉得这是个很高级的工具,但工作后才真正意义上认真进行了研究,使用后一直有相见恨晚的感觉。 本篇希望可以将Docker的好处以及实用的指令整理下来,让有听过没用过但有兴趣想了解的朋友,有机会使用到这个好工具。
2. 镜像与容器
我个人一直将镜像档和容器的关系比喻为PPT中的模板以及一份具体的PPT材料。如下所示:
镜像(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]
举例如下:
4. 列出所有镜像
我们可以使用sudo docker images
指令,来查看所有的镜像。执行结果如下图所示,
可以看到字段包含:
-
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
结果如下:
8. 退出容器
在容器内我们可以直接输入exit
来离开容器,并回到原本的系统。
9. 进入容器
我们可以退出容器当然就可以再次进入容器,主有有两种方法可以进入容器,分别是exec
和attach
,两条指令中的[Container]
为需要输入的容器的名称或是容器的ID。
sudo docker exec -it [Container] bash
sudo docker attach [Container]
而以上这两个指令有什么差别呢?差别就是如果我们使用exit
离开容器时,当初用exec
进入的容器并不会中止,但是用attach
进入的容器,当我们离开容器后,这个容器就会被中止。示例如下:
10. 删除容器
我们也可以通过以下指令来删除不要的容器,[Container]
同样是需要输入容器的名称或是容器的ID。
sudo docker rm [Container]
如下所示:
11. 启用与停止容器
启用与停止的指令也相当简单,分别是:
sudo docker start [Container]
sudo docker stop [Container]
12. 总结
本文对docker最基础的概念镜像和容器进行了详细的阐述,并对二者最常用的语法命令进行了归纳总结,并给出了相应的示例。 您学废了嘛?