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

一、stop、kill、start和restart

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

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

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

  1. $ sudo docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 82b049e20195 ubuntu:18.04 "top -b" 4 days ago Exited (0) 2 seconds ago quizzical_hermann
  4. $ sudo docker start 82b049e20195
  5. 82b049e20195
  6. $ sudo docker ps -a
  7. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  8. 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守护进程启动时就已经停止了的容器

  1. $ sudo docker run -d --restart=always ubuntu:18.04 pwd
  2. fb149d6e2bc1f07dece3410bfc62f5bcaf08f69bfef0bb65eaa205c2c9408bd3
  3. $ sudo docker ps -a
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. fb149d6e2bc1 ubuntu:18.04 "pwd" 8 seconds ago Restarting (0) 1 second ago heuristic_robinson
  6. 82b049e20195 ubuntu:18.04 "top -b" 4 days ago Up 4 minutes quizzical_hermann
  7. $ sudo docker ps -a
  8. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  9. fb149d6e2bc1 ubuntu:18.04 "pwd" 11 seconds ago Restarting (0) Less than a second ago heuristic_robinson
  10. 82b049e20195 ubuntu:18.04 "top -b" 4 days ago Up 4 minutes quizzical_hermann
  11. $ sudo docker ps -a
  12. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  13. fb149d6e2bc1 ubuntu:18.04 "pwd" 12 seconds ago Restarting (0) 2 seconds ago heuristic_robinson
  14. 82b049e20195 ubuntu:18.04 "top -b" 4 days ago Up 4 minutes quizzical_hermann
  15. $ sudo docker ps -a
  16. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  17. fb149d6e2bc1 ubuntu:18.04 "pwd" 14 seconds ago Restarting (0) 3 seconds ago heuristic_robinson
  18. 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命令时,容器才恢复运行:

  1. $ sudo docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 82b049e20195 ubuntu:18.04 "top -b" 4 days ago Up 5 minutes quizzical_hermann
  4. $ sudo docker pause 82b049e20195
  5. 82b049e20195
  6. $ sudo docker ps -a
  7. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  8. 82b049e20195 ubuntu:18.04 "top -b" 4 days ago Up 6 minutes (Paused) quizzical_hermann
  9. $ sudo docker unpause 82b049e20195
  10. 82b049e20195
  11. $ sudo docker ps -a
  12. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  13. 82b049e20195 ubuntu:18.04 "top -b" 4 days ago Up 6 minutes quizzical_hermann

三、容器删除

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

  1. $ sudo docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 96c8a885dd0d ubuntu:18.04 "pwd" 7 seconds ago Exited (0) 6 seconds ago silly_bell
  4. 4f43afe0f4b9 ubuntu:18.04 "pwd" 8 seconds ago Exited (0) 7 seconds ago recursing_mirzakhani
  5. c66c61850c2c ubuntu:18.04 "pwd" 9 seconds ago Exited (0) 8 seconds ago naughty_kapitsa
  6. 386d785528fd ubuntu:18.04 "pwd" 10 seconds ago Exited (0) 9 seconds ago elated_chandrasekhar
  7. 91aec302789d ubuntu:18.04 "pwd" 11 seconds ago Exited (0) 10 seconds ago modest_cori
  8. 038ac31cf1cf ubuntu:18.04 "pwd" 11 seconds ago Exited (0) 10 seconds ago recursing_northcutt
  9. e3fbc064330e ubuntu:18.04 "pwd" 12 seconds ago Exited (0) 11 seconds ago compassionate_mccarthy
  10. 46f8b71c40e8 ubuntu:18.04 "pwd" 14 seconds ago Exited (0) 13 seconds ago vibrant_swartz
  11. 82b049e20195 ubuntu:18.04 "top -b" 4 days ago Up 10 minutes quizzical_hermann
  12. $ sudo docker rm 96c8a885dd0d
  13. 96c8a885dd0d
  14. $ sudo docker ps -a
  15. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  16. 4f43afe0f4b9 ubuntu:18.04 "pwd" 29 seconds ago Exited (0) 28 seconds ago recursing_mirzakhani
  17. c66c61850c2c ubuntu:18.04 "pwd" 30 seconds ago Exited (0) 29 seconds ago naughty_kapitsa
  18. 386d785528fd ubuntu:18.04 "pwd" 31 seconds ago Exited (0) 30 seconds ago elated_chandrasekhar
  19. 91aec302789d ubuntu:18.04 "pwd" 32 seconds ago Exited (0) 31 seconds ago modest_cori
  20. 038ac31cf1cf ubuntu:18.04 "pwd" 32 seconds ago Exited (0) 31 seconds ago recursing_northcutt
  21. e3fbc064330e ubuntu:18.04 "pwd" 33 seconds ago Exited (0) 32 seconds ago compassionate_mccarthy
  22. 46f8b71c40e8 ubuntu:18.04 "pwd" 35 seconds ago Exited (0) 34 seconds ago vibrant_swartz
  23. 82b049e20195 ubuntu:18.04 "top -b" 4 days ago Up 11 minutes quizzical_hermann
  24. $ sudo docker rm 4f43afe0f4b9 c66c61850c2c
  25. 4f43afe0f4b9
  26. c66c61850c2c
  27. $ sudo docker ps -a
  28. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  29. 386d785528fd ubuntu:18.04 "pwd" 53 seconds ago Exited (0) 52 seconds ago elated_chandrasekhar
  30. 91aec302789d ubuntu:18.04 "pwd" 54 seconds ago Exited (0) 53 seconds ago modest_cori
  31. 038ac31cf1cf ubuntu:18.04 "pwd" 54 seconds ago Exited (0) 54 seconds ago recursing_northcutt
  32. e3fbc064330e ubuntu:18.04 "pwd" 55 seconds ago Exited (0) 54 seconds ago compassionate_mccarthy
  33. 46f8b71c40e8 ubuntu:18.04 "pwd" 57 seconds ago Exited (0) 56 seconds ago vibrant_swartz
  34. 82b049e20195 ubuntu:18.04 "top -b" 4 days ago Up 11 minutes quizzical_hermann
  35. $ sudo docker rm -v $(sudo docker ps -aq -f status=exited)
  36. 386d785528fd
  37. 91aec302789d
  38. 038ac31cf1cf
  39. e3fbc064330e
  40. 46f8b71c40e8
  41. $ sudo docker ps -a
  42. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  43. 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. Selenium的安装和使用

    一.Selenium的安装,Selenium是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击.下拉等操作.对于一些JavaScript渲染的页面来说,这种抓取方式非常有效.1.pi ...

  2. 省时省心DTM,广告转化无难题

    内容来源:华为开发者大会2021 HMS Core 6 App Services技术论坛,主题演讲<华为分析服务,助您打造数智化运营闭环方案>. 演讲嘉宾:华为消费者云服务 分析产品总监 ...

  3. 学习java 6.29

    今天是学习Java的第一天. 学习内容:了解了JDK的下载和安装: 学会了如何配置Path环境变量及安装eclipse: 执行了HelloWorld案例: 在Java中关键字需要小写,Java中最基本 ...

  4. acupuncture

    acute+puncture. [woninstitute.edu稻糠亩] To understand the basics of acupuncture, it is best to familia ...

  5. Spark(二十一)【SparkSQL读取Kudu,写入Kafka】

    目录 SparkSQL读取Kudu,写出到Kafka 1. pom.xml 依赖 2.将KafkaProducer利用lazy val的方式进行包装, 创建KafkaSink 3.利用广播变量,将Ka ...

  6. 容器之分类与各种测试(三)——forward_list的用法

    forward_list是C++11规定的新标准单项链表,slist是g++以前的规定的单项链表 例程 #include<stdexcept> #include<string> ...

  7. JAVA序列化浅析

    java.io.Serializable浅析 Java API中java.io.Serializable接口源码: 1 public interface Serializable { 2 } 类通过实 ...

  8. 通过 Ajax 发送 PUT、DELETE 请求的两种实现方式

    一.普通请求方法发送 PUT 请求 1. 如果不用 ajax 发送 PUT,我们可以通过设置一个隐藏域设置 _method 的值,如下: <form action="/emps&quo ...

  9. 『与善仁』Appium基础 — 24、等待activity出现

    目录 1.什么是等待activity出现 2.wait_activity()方法 3.获取当前页面的activity方法 4.综合练习 1.什么是等待activity出现 在启动APP的时候,要配置包 ...

  10. 如何查看电脑IP地址

    如何查看电脑的IP地址 win+r输入cmd回车,然后输入:ipconfig回车