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

简介: 上一篇我们学习了容器的启动和常用的进入容器的方式,今天我们来看看如何控制容器起停以及容器删除操作。 一、stop、kill、start和restart stop、kill命令都可以停止运行的容器,二者不同之处在于,stop是先给容器中的进程发送SIGTERM信号,一段时间后在发送SIGKILL信号,

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


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


一、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容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
8月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
1169 108
|
9月前
|
存储 监控 测试技术
如何将现有的应用程序迁移到Docker容器中?
如何将现有的应用程序迁移到Docker容器中?
683 57
|
6月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
726 51
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
6月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
746 6
|
6月前
|
监控 Linux 调度
【赵渝强老师】Docker容器的资源管理机制
本文介绍了Linux CGroup技术及其在Docker资源管理中的应用。通过实例演示了如何利用CGroup限制应用程序的CPU、内存和I/O带宽使用,实现系统资源的精细化控制,帮助理解Docker底层资源限制机制。
650 6
|
9月前
|
存储 监控 Java
如何对迁移到Docker容器中的应用进行性能优化?
如何对迁移到Docker容器中的应用进行性能优化?
573 59
|
8月前
|
缓存 Ubuntu Docker
Ubuntu环境下删除Docker镜像与容器、配置静态IP地址教程。
如果遇见问题或者想回滚改动, 可以重启系统.
529 16

相关产品

  • 容器服务Kubernetes版
  • 下一篇
    开通oss服务