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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 上一篇我们学习了容器的启动和常用的进入容器的方式,今天我们来看看如何控制容器起停以及容器删除操作。 一、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的容器。


分类: 容器技术

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
9天前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
9天前
|
应用服务中间件 nginx Docker
Docker同一台宿主机容器通信-通过容器名称互联
本文详细介绍了如何通过容器名称实现同一宿主机上容器间的互联,并提供了实战案例。首先,文章解释了容器间通过自定义名称访问的原理,随后演示了创建并连接Tomcat与Nginx容器的具体步骤。此外,还讨论了配置中可能出现的问题及解决方案,包括避免硬编码IP地址和使用自定义容器别名来增强系统的灵活性与可维护性。通过这些实践,展示了如何高效地配置容器间通信,确保服务稳定可靠。
16 1
Docker同一台宿主机容器通信-通过容器名称互联
|
6天前
|
Cloud Native 持续交付 Docker
云原生技术实践:Docker容器化部署教程
【9月更文挑战第4天】本文将引导你了解如何利用Docker这一云原生技术的核心工具,实现应用的容器化部署。文章不仅提供了详细的步骤和代码示例,还深入探讨了云原生技术背后的哲学,帮助你理解为何容器化在现代软件开发中变得如此重要,并指导你如何在实际操作中运用这些知识。
|
9天前
|
存储 Unix 虚拟化
Docker容器简介
Docker是一种轻量级的虚拟化技术,它通过容器化应用,提高了硬件资源利用率,简化了应用的部署、运输和运行,且与虚拟机相比,具有更快的交付速度和更低的资源消耗。
24 2
|
11天前
|
容器 C# Docker
WPF与容器技术的碰撞:手把手教你Docker化WPF应用,实现跨环境一致性的开发与部署
【8月更文挑战第31天】容器技术简化了软件开发、测试和部署流程,尤其对Windows Presentation Foundation(WPF)应用程序而言,利用Docker能显著提升其可移植性和可维护性。本文通过具体示例代码,详细介绍了如何将WPF应用Docker化的过程,包括创建Dockerfile及构建和运行Docker镜像的步骤。借助容器技术,WPF应用能在任何支持Docker的环境下一致运行,极大地提升了开发效率和部署灵活性。
25 0
|
11天前
|
应用服务中间件 Java Maven
掌控视图的力量!深入解析 JSF 视图管理,揭秘视图生命周期的秘密,让你的应用更高效!
【8月更文挑战第31天】JavaServer Faces (JSF) 是一种强大的框架,用于管理 Web 应用程序的视图。本文通过具体案例介绍 JSF 视图管理的基础知识,包括创建、管理和销毁视图的过程。首先,在 Eclipse 中创建一个新 JSF 项目,并配置 Maven 依赖。接着,在 `WEB-INF` 目录下配置 `web.xml` 文件,设置 JSF servlet。
26 0
|
11天前
|
开发者 容器 Docker
JSF与Docker,引领容器化浪潮!让你的Web应用如虎添翼,轻松应对高并发!
【8月更文挑战第31天】在现代Web应用开发中,JSF框架因其实用性和灵活性被广泛应用。随着云计算及微服务架构的兴起,容器化技术变得日益重要,Docker作为该领域的佼佼者,为JSF应用提供了便捷的部署和管理方案。本文通过基础概念讲解及示例代码展示了如何利用Docker容器化JSF应用,帮助开发者实现高效、便携的应用部署。同时也提醒开发者注意JSF与Docker结合使用时可能遇到的限制,并根据实际情况做出合理选择。
22 0
|
11天前
|
Cloud Native 云计算 Docker
云原生之旅:Docker容器化实践
【8月更文挑战第31天】本文深入浅出地介绍了云原生技术中的一个重要组成部分—Docker容器。通过实际案例,我们将一起探索如何将应用容器化,并部署到云端。文章不仅涵盖了Docker的基本操作和概念,还提供了详细的代码示例,帮助初学者快速上手。让我们一起开启云原生技术的奇妙旅程吧!
|
11天前
|
Cloud Native 云计算 开发者
云原生技术实践:Docker容器化部署示例
【8月更文挑战第31天】本文通过深入浅出的方式,介绍了如何在云计算时代利用Docker容器技术实现应用的快速部署和高效管理。文章不仅解释了Docker的基本概念和优势,还提供了详细的操作步骤和代码示例,帮助初学者轻松入门。让我们一起探索云原生的世界,解锁应用部署的新姿势!
|
12天前
|
Kubernetes Cloud Native Docker
云原生入门:Docker容器化部署实战
【8月更文挑战第31天】在数字化浪潮中,云原生技术成为企业转型的助推器。本文通过Docker容器化部署的实践案例,引导读者从零基础到掌握基础的云原生应用部署技能。我们将一起探索Docker的魅力,学习如何将一个应用容器化,并在云平台上运行起来,为深入云原生世界打下坚实基础。

相关产品

  • 容器服务Kubernetes版