Docker命令操作

镜像操作命令格式

1 拉取镜像

1.1 拉取镜像基本操作

docker pull <镜像名字> :<标签名>
命令功能:从docker hub上拉取镜像至本地
<镜像名字>:想要拉取的镜像名字
<标签名>:若不指定标签名,通常会拉取标签名为“latest”的镜像,但有意思的是标签名为“latest”的镜像却不一定就是最新版本的镜像。

Q:为什么需要<标签名>?
A:因为一个镜像存在多个版本,例如一个ubuntu的镜像,或许存在3.1版本的ubuntu,也可能存在3.2版本的ubuntu。因此需要通过指定<标签名>来指定特定版本的镜像。

1.2拉取镜像进阶操作

假设存在一个bugDemon:1.5的镜像,这个镜像存在bug。在这个bug被暴露之前,已经使用这个bugDemon:1.5生成了许多容器。在随后的使用过程中,发现了这个bugDemon:1.5的bug,在本地对其进行修改后,使用相同的标签将更新后的镜像重新推送回仓库。在随后的任务中,若需要使用更新后的bugDemon:1.5再次生成容器,这将会引发一个问题:如何区分一个容器是否是由存在bug的bugDemon:1.5镜像所生成的还是由不存在bug的bugDemon:1.5所生成?因为这两个bugDemon共享同一个<标签名>,即1.5。为解决次问题,使用image digets准确地拉取镜像。

docker pull <镜像名字> @< image digets>
< image digets>:一长串十六进制位串用于来标记镜像,关于image id和image digets的区别,暂未知。

Exp: docker pull alpine@ sha256:72c42ed48c3a2db31b7dafe17d275b634664a708d901ec9fd57b1529280f01fb

ps:为@后面一长串十六进制序列取了一个名字,这个名字就是image digets。alpine是一个镜像名字。

Q:如何获得一个镜像的image digets?
A:使用命令docker image ls - -digests alpine。

1.3 总结

使用标签拉取镜像操作方便快捷,但容易出现指代不清的情况,若两个镜像公用一个标签名,将出现误操作。使用image digets拉取镜像,总能够准确的拉取到想要的镜像,但较复杂。本质就在于image digets能够唯一标识镜像,而镜像标签不能够唯一标识镜像。

2 使用镜像创建容器

2.1 创建容器基本操作

docker run <选项> < images> : < tag>:< app>
命令功能:使用< images>去创建一个容器,并在容器中运行
< app>。
<选项>:暂时已知-it,这使得容器与终端连接,容器的输入输出都会被重定向至终端中。
< images>:镜像名。
< tag>:镜像标签。
< app>:application,即容器中的进程。在前面几个博客中提到进程组的概念,也揭示了容器本质上是一个进程组。跟据进程组的生命周期可知道,创建容器时必须至少要指定一个进程使其运行在容器中,否则将无法启动容器。

Exp: docker run -it ubuntu /bin/bash
运行该条命令后,终端将会显示**root@22a185ea32a3:/#**这是ubuntu的/bin/bash程序。使用ctrl + p + q可以退回到终端中,且容器不会被终止运行,容器将在后台中继续运行。

Q:如何查看在系统后台中运行的容器?
A:使用命令 docker ps。

2.2 删除和停止容器

docker container stop <容器ID>
docker container rm <容器ID>

Q:为什么需要先停止容器再删除?
A:Linux系统下,stop命令会向容器中的进程发送SIGTERM信号,这个SIGTERM信号是可以通过signal函数修改其行为的,即是可以被捕获的。一旦当其被捕获之后,可以是进程跳转到handler程序,进行特定的处理。因此率先使用stop命令,让容器停下手中工作,转去做一些善后工作,例如保存当前任务进度,将数据写入磁盘等。

BTW:signal函数原型
sighandler_t siganal(int signum,sighandler_t handler)

若handler == SIG_IGN,则忽略signum的信号。

若handler == SIG_DFL,则保持signum信号的默认行为。

若handler == 函数地址,则捕获到signum的信号立即跳转至函数地址处执行程序。

Q:container rm命令是什么?
A:Linux系统下,rm命令就是向进程发送SIGKILL信号。懂得吧,所以为什么要先来一个stop命令。

3 删除镜像

3.1 删除镜像基本命令操作

docker image rm <镜像ID>
命令功能:删除指定的镜像。因为镜像层是可以被共享的,且镜像在被删除时,是按照一层一层镜像层顺序删除的,因此只有当全部依赖某一个镜像层的镜像都被删除后,该镜像才能被删除,即该条命令才能被执行成功。除此之外,该条命令生效之前,要求由该镜像层生成的容器必须全部被停止。

Q:如何查看镜像ID?
A:使用命令docker image ls。

Q:删除镜像和删除容器的区别是什么?
A:删除容器是指结束容器进程,让容器不再挂在后台上运行。删除镜像则是将镜像从本地磁盘上抹去,下次需要再次使用镜像创建容器,就不得不需要重新从docker hub上下载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值