上一篇我们学习了容器的启动和常用的进入容器的方式,今天我们来看看如何控制容器起停以及容器删除操作。

一、stop、kill、start和restart

stop、kill命令都可以停止运行的容器,二者不同之处在于,stop是先给容器中的进程发送SIGTERM信号,一段时间后在发送SIGKILL信号,这样可以让进程在退出前做一些善后工作,这样显得更加优雅,而kill命令则是直接杀掉容器中的进程。

$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82b049e20195 ubuntu:18.04 "top -b" 4 days ago Up 6 minutes quizzical_hermann
:~$ sudo docker stop 82b049e20195
82b049e20195
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82b049e20195 ubuntu:18.04 "top -b" 4 days ago Exited (0) 2 seconds ago quizzical_hermann

大家可以看到当执行stop命令时,容器状态变为Exited。start命令就是让处于Exited状态的进程重新启动,它能够保留容器第一次启动时执行的参数:

$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82b049e20195 ubuntu:18.04 "top -b" 4 days ago Exited (0) 2 seconds ago quizzical_hermann
$ sudo docker start 82b049e20195
82b049e20195
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82b049e20195 ubuntu:18.04 "top -b" 4 days ago Up 2 seconds quizzical_hermann

restart命令是重启容器,本质上就是限制性stop在执行start命令,我们除了手动重启之外,在启动容器时可以通过设置--restart参数,确保我们容器当出现错误而停止时能够自动重启容器。

restart参数配置说明如下:

  • no:默认策略,在容器退出时不重启容器

  • on-failure:在容器非正常退出时(退出状态非0),才会重启容器

  • on-failure:3:在容器非正常退出时重启容器,最多重启3次

  • always:在容器退出时总是重启容器

  • unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

$ sudo docker run -d --restart=always  ubuntu:18.04 pwd
fb149d6e2bc1f07dece3410bfc62f5bcaf08f69bfef0bb65eaa205c2c9408bd3
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fb149d6e2bc1 ubuntu:18.04 "pwd" 8 seconds ago Restarting (0) 1 second ago heuristic_robinson
82b049e20195 ubuntu:18.04 "top -b" 4 days ago Up 4 minutes quizzical_hermann
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fb149d6e2bc1 ubuntu:18.04 "pwd" 11 seconds ago Restarting (0) Less than a second ago heuristic_robinson
82b049e20195 ubuntu:18.04 "top -b" 4 days ago Up 4 minutes quizzical_hermann
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fb149d6e2bc1 ubuntu:18.04 "pwd" 12 seconds ago Restarting (0) 2 seconds ago heuristic_robinson
82b049e20195 ubuntu:18.04 "top -b" 4 days ago Up 4 minutes quizzical_hermann
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fb149d6e2bc1 ubuntu:18.04 "pwd" 14 seconds ago Restarting (0) 3 seconds ago heuristic_robinson
82b049e20195 ubuntu:18.04 "top -b" 4 days ago Up 4 minutes quizzical_hermann

大家可以看到,当设置--restart=always时,只要容器退出就会自动重启。

二、pause和unpause操作

有时候我们可能只想让容器暂停一会儿以便于做一些简单维护性操作,这时候如果直接使用stop和start操作成本就太高了,这时我们可以使用pause和unpause命令,pause命令会暂停容器,此时容器不再使用CPU,只有当执行unpause命令时,容器才恢复运行:

$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82b049e20195 ubuntu:18.04 "top -b" 4 days ago Up 5 minutes quizzical_hermann
$ sudo docker pause 82b049e20195
82b049e20195
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82b049e20195 ubuntu:18.04 "top -b" 4 days ago Up 6 minutes (Paused) quizzical_hermann
$ sudo docker unpause 82b049e20195
82b049e20195
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82b049e20195 ubuntu:18.04 "top -b" 4 days ago Up 6 minutes quizzical_hermann

三、容器删除

当我们想要删除一个或多个容器时,可以使用rm命令,此命令参数不仅可以直接传递一个或多个容器ID,也可以通过传递表达式删除指定的某一类容器。

$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
96c8a885dd0d ubuntu:18.04 "pwd" 7 seconds ago Exited (0) 6 seconds ago silly_bell
4f43afe0f4b9 ubuntu:18.04 "pwd" 8 seconds ago Exited (0) 7 seconds ago recursing_mirzakhani
c66c61850c2c ubuntu:18.04 "pwd" 9 seconds ago Exited (0) 8 seconds ago naughty_kapitsa
386d785528fd ubuntu:18.04 "pwd" 10 seconds ago Exited (0) 9 seconds ago elated_chandrasekhar
91aec302789d ubuntu:18.04 "pwd" 11 seconds ago Exited (0) 10 seconds ago modest_cori
038ac31cf1cf ubuntu:18.04 "pwd" 11 seconds ago Exited (0) 10 seconds ago recursing_northcutt
e3fbc064330e ubuntu:18.04 "pwd" 12 seconds ago Exited (0) 11 seconds ago compassionate_mccarthy
46f8b71c40e8 ubuntu:18.04 "pwd" 14 seconds ago Exited (0) 13 seconds ago vibrant_swartz
82b049e20195 ubuntu:18.04 "top -b" 4 days ago Up 10 minutes quizzical_hermann
$ sudo docker rm 96c8a885dd0d
96c8a885dd0d
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4f43afe0f4b9 ubuntu:18.04 "pwd" 29 seconds ago Exited (0) 28 seconds ago recursing_mirzakhani
c66c61850c2c ubuntu:18.04 "pwd" 30 seconds ago Exited (0) 29 seconds ago naughty_kapitsa
386d785528fd ubuntu:18.04 "pwd" 31 seconds ago Exited (0) 30 seconds ago elated_chandrasekhar
91aec302789d ubuntu:18.04 "pwd" 32 seconds ago Exited (0) 31 seconds ago modest_cori
038ac31cf1cf ubuntu:18.04 "pwd" 32 seconds ago Exited (0) 31 seconds ago recursing_northcutt
e3fbc064330e ubuntu:18.04 "pwd" 33 seconds ago Exited (0) 32 seconds ago compassionate_mccarthy
46f8b71c40e8 ubuntu:18.04 "pwd" 35 seconds ago Exited (0) 34 seconds ago vibrant_swartz
82b049e20195 ubuntu:18.04 "top -b" 4 days ago Up 11 minutes quizzical_hermann
$ sudo docker rm 4f43afe0f4b9 c66c61850c2c
4f43afe0f4b9
c66c61850c2c
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
386d785528fd ubuntu:18.04 "pwd" 53 seconds ago Exited (0) 52 seconds ago elated_chandrasekhar
91aec302789d ubuntu:18.04 "pwd" 54 seconds ago Exited (0) 53 seconds ago modest_cori
038ac31cf1cf ubuntu:18.04 "pwd" 54 seconds ago Exited (0) 54 seconds ago recursing_northcutt
e3fbc064330e ubuntu:18.04 "pwd" 55 seconds ago Exited (0) 54 seconds ago compassionate_mccarthy
46f8b71c40e8 ubuntu:18.04 "pwd" 57 seconds ago Exited (0) 56 seconds ago vibrant_swartz
82b049e20195 ubuntu:18.04 "top -b" 4 days ago Up 11 minutes quizzical_hermann
$ sudo docker rm -v $(sudo docker ps -aq -f status=exited)
386d785528fd
91aec302789d
038ac31cf1cf
e3fbc064330e
46f8b71c40e8
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82b049e20195 ubuntu:18.04 "top -b" 4 days ago Up 13 minutes quizzical_hermann

当然如果要删除所有退出的容器,也可以直接使用sudo docker rm $(sudo docker ps -a -q),虽然这个命令是要删除所有容器,但是运行中的容器一般是无法直接删除的,所以就可以确保只删除Exited的容器。

Docker 与 K8S学习笔记(五)—— 容器的操作(下篇)的更多相关文章

  1. ES6学习笔记<五> Module的操作——import、export、as

    import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...

  2. Docker 与 K8S学习笔记(七)—— 容器的网络

    本节我们来看看Docker网络,我们这里主要讨论单机docker上的网络.当docker安装后,会自动在服务器中创建三种网络:none.host和bridge,接下来我们分别了解下这三种网络: $ s ...

  3. Docker 与 K8S学习笔记(三)—— 镜像的使用

    前面的文章介绍过镜像的三种获取方式: 下载并使用别人创建好的镜像: 在现有镜像上创建新的镜像: 从无到有创建镜像. 本文主要介绍前两种. 一.下载镜像 在Docker Hub上有大量优质镜像可以使用, ...

  4. Docker 与 K8S学习笔记(五)—— 容器的操作(上篇)

    上一篇我们介绍了Dockerfile的基本编写方法,这一节我们来看看Docker容器的常用操作. 一.容器的运行方式 容器有两种运行方式,即daemon形式运行与非daemon形式运行,通俗地讲就是长 ...

  5. Docker 与 K8S学习笔记(九)—— 容器间通信

    容器之间可通过IP.Docker DNS Server或joined三种方式进行通信,今天我们来详细学习一下. 一.IP通信 IP通信很简单,前一篇中已经有所涉及了,只要容器使用相同网络,那么就可以使 ...

  6. Docker 与 K8S学习笔记(二)—— 容器核心知识梳理

    本篇主要对容器相关核心知识进行梳理,通过本篇的学习,我们可以对容器相关的概念有一个全面的了解,这样有利于后面的学习. 一.什么是容器? 容器是一种轻量级.可移植.自包含的软件打包技术,使应用程序可以在 ...

  7. Docker 与 K8S学习笔记(十)—— 容器的端口映射

    我们一般将应用部署在容器里面,而一个服务器上会有许许多多的容器,那么外界该如何访问我们的应用呢?答案是:端口映射. Docker可以将容器对外提供服务的端口映射到host的某个端口上,外网通过此端口访 ...

  8. Docker 与 K8S学习笔记(八)—— 自定义容器网络

    我们在上一篇中介绍了Docker中三种网络,none.host和bridge,除了这三种网络,Docker还允许我们创建自定义网络,当我们要创建自定义网络时,Docker提供了三种网络驱动供我们选择: ...

  9. Docker 与 K8S学习笔记(六)—— 容器的资源限制

    我们在启动Docker容器时,默认情况下容器所使用的资源是没有限制的,这样就会存在部分特别耗资源的容器会占用大量系统资源,从而导致其他容器甚至整个服务器性能降低,为此,Docker提供了一系列参数方便 ...

随机推荐

  1. MySQL:事务常用语句

    Mysql(版本是8)的事务隔离级别 默认是RR:REPEATABLE-READ:可重复读 查看 当前隔离级别 全局隔离级别  修改 -- 当前修改 -- 设置成可重复读 SET transactio ...

  2. linux 实用指令搜索查找类

    linux 实用指令搜索查找类 目录 linux 实用指令搜索查找类 find指令 locate指令 grep指令和管道符号 | find指令 说明 从指定目录向下递归地遍历其各个子目录,将满足条件的 ...

  3. 日常Java 2021/10/14

    Java数据结构 Java BitSet类 BitSet类创建一种特殊类型的数组来保存位值,数组大小随需要增加,BitSet(),BitSet(int size) 其中的方法 void and(Bit ...

  4. 『学了就忘』Linux启动引导与修复 — 69、启动引导程序(grub)

    目录 1.启动引导程序(Boot Loader)简介 2.启动引导程序grub的作用 3.启动引导程序grub的位置 4./grub目录中其他的文件简单介绍 提示: 简单地说,Boot Loader就 ...

  5. [Windows编程]模块遍历

    模块遍历 整体思路 1.创建进程快照 2.遍历首次模块 3.继续下次遍历 4.模块信息结构体 相关API的调用 创建进程快照API HANDLE WINAPI CreateToolhelp32Snap ...

  6. redis入门到精通系列(七):redis高级数据类型详解(BitMaps,HyperLogLog,GEO)

    高级数据类型和五种基本数据类型不同,并非新的数据结构.高级数据类型往往是用来解决一些业务场景. (一)BitMaps (1.1) BitMaps概述 在应用场景中,有一些数据只有两个属性,比如是否是学 ...

  7. 【C/C++】金币

    做了一下去年的题目,今年看起来就没这么难了 从上到下的可以从下到上考虑,会简单很多,dp入门 题目 金币 小招在玩一款游戏,在一个N层高的金字塔上,以金字塔顶为第一层,第i层有i个落点,每个落点有若干 ...

  8. 关于finally中的语句和try中的return之间的执行顺序

    首先是第一种情况: 我们这里由于程序只是单一的,所以后面的代码只有主题部分: Public class test{ Public static void main(String[] args){ Sy ...

  9. myfs 操作系统课内实验 文件管理系统 Ext2

    To 学弟学妹们: 写这个随笔原意是记录一下这个很有趣的实验 ,记录一下写的时候的细节和思路. 要是光是抄这个代码,反而使得这个实验失去了意义. 加油,这个实验收获真的很大. 任务描述: 用一个空白文 ...

  10. CPU状态信息us,sy等含义

    目录 一.概述概述 二.详解 us和sy ni id wa hi和si st 三.总结 一.概述概述 比如一秒内有100个cpu时间片,这个cpu时间片就是cpu工作的最小单位.那么这100个cpu时 ...