Docker容器的生命周期

在这里插入图片描述

引言

  Docker 容器作为一种轻量级虚拟化技术,在现代应用开发和部署中扮演着重要角色。理解容器的生命周期对于有效地管理和运维容器化应用至关重要。本文将深入探讨 Docker 容器的生命周期,从创建到销毁的各个阶段,帮助读者更好地掌握容器管理的核心概念。

一、Docker 简介和基本概念

1.1 Docker 容器

  Docker 是一个开源的容器化平台,旨在帮助开发人员更轻松地构建、部署和运行应用程序。它利用容器技术,将应用程序及其所有依赖项打包成一个独立的单元,使其在任何环境中都能一致运行。

  Docker 容器是 Docker 镜像的一个实例化运行,它是一个轻量级的、可执行的软件包,包含了运行应用程序所需的所有内容:代码、运行时、系统工具、系统库等。容器隔离了应用程序与其它容器及主机系统,使其能在一个独立的环境中运行。Docker 镜像是容器的模板,是一个只读的模板,包含了运行应用程序所需的所有内容。可以将镜像看作是容器的源代码,通过它可以创建多个相同的容器实例。

1.2 Docker 容器生命周期

  Docker 容器使用特定命令,将当前容器从一种状态转为另一种状态,使当前容器处于不同的状态。Docker 容器生命周期可分为已创建(Created)、运行中(Running)、停止(Stopped)、暂停中(Paused)以及删除(Deleted)等几种。 以下为生命周期状态转换图例:

image

  Docker 容器的生命周期涵盖了七个关键阶段、五种状态,每个阶段都有其特定的目标和操作。

序号生命周期说明
1创建(Create)在容器的生命周期中,创建是第一个关键阶段。
在这个阶段,我们选择适当的 Docker 镜像作为容器的基础,并使用 Docker 命令来创建容器实例。
容器的配置选项和环境变量设置也在这个阶段完成。
2启动(Start)一旦容器被成功创建,就可以进入启动阶段。启动已创建的容器,使其处于运行状态。
3运行(Run)容器的运行阶段是其生命周期的核心。在此阶段,在容器中运行应用程序,处理请求等。
4暂停在某些情况下,我们可能需要暂停容器的运行,而不是完全停止它。
暂停容器会冻结其状态,包括应用程序的进程。容器的资源消耗会暂时减少,但状态仍然保留在内存中。
5继续当需要时,我们可以将容器从暂停状态切换回运行状态,使应用程序继续处理请求。
6停止(Stop)停止正在运行的容器,但并不会删除它。
在停止阶段,容器会被正常关闭,应用程序会完成清理工作并释放资源。
7删除(Delete)当我们确定不再需要特定容器时,可以从系统中删除已停止的容器实例。

  综上所述,全面了解 Docker 容器的生命周期各个阶段对于有效地管理容器化应用至关重要。通过适当地执行每个阶段的操作,我们可以确保应用程序的可靠性和稳定性,并更好地应对容器化应用开发和运维的挑战。

二、Docker 容器生命周期状态

2.1 Created: 已创建

  创建容器是 Docker 容器生命周期的首要阶段。在这一阶段,我们需要明确选择一个合适的 Docker 镜像作为容器的基础,一个良好的镜像选择可以确保容器内应用的稳定和正确运行。

create
镜像
Created(已创建)
docker create [镜像名称|镜像ID]

使用 docker create nginx 会基于NGINX创建一个容器,结果状态为已创建状态(created)。

2.2 Running: 运行中

  启动容器是容器生命周期的关键步骤之一,使用 Docker 命令启动(或运行)容器

create
start
run
镜像
Created(已创建)
Running(运行中)
镜像
Created(已创建)
Running(运行中)
# 启动容器
docker start [容器名称|容器ID]docker run [容器名称|容器ID]
  • 使用 docker start |容器ID] 启动指定ID的容器,结果状态为已运行状态(running)。
  • 使用 docker run -d nginx 会基于NGINX创建并运行一个容器,结果状态也为已运行状态(running)。

2.3 Stopped: 停止

  在容器的生命周期中,停止和重启容器是两个重要的操作,用于管理容器的运行状态和应用程序的执行。在容器运行过程中,合理地使用停止和重启操作可以确保应用程序的正常关闭和重新启动,避免数据丢失和不稳定的状态。通过这些操作,我们可以更好地管理容器的生命周期。

stop
restart
运行中的容器
Stopped(停止)
停止的容器
Running(运行中)
# 优雅地停止容器
docker stop [容器名称|容器ID]# 立即强制停止容器
docker kill [容器名称|容器ID]# 重启容器
docker restart [容器名称|容器ID]

使用 docker stop [容器ID] 将停止指定ID的容器,结果状态为已运行状态(stopped)。

2.4 Paused: 暂停中

  在容器运行时,我们可以选择将容器暂停,以冻结容器的状态。暂停容器可以保留容器的当前状态,同时释放部分资源。当需要时,我们可以恢复容器的运行状态,使应用程序继续执行。

pause
unpause
运行中的容器
Paused(暂停中)
Running(运行中)
# 暂停容器
docker pause [容器名称|容器ID]# 继续容器
docker unpause [容器名称|容器ID]
  • 使用 docker pause [容器ID] 将暂停指定ID的容器,结果状态为已暂停状态(pause)。暂停状态容器可以使用unpause恢复运行状态。
  • 使用 docker unpause [容器ID] 将恢复指定ID的容器为运行状态,结果状态为运行状态(running)。

  通过暂停和继续容器,可以在一定程度上控制容器的资源使用,同时保留容器的状态。这在某些场景下可能会非常有用,例如需要暂时释放资源以应对其他任务的情况,或者在容器内发生故障时,冻结容器状态以便进行故障排查。

2.5 Deleted: 删除

  在容器的生命周期中,当我们确定某个容器不再需要时,可以选择将其删除,以释放资源并保持环境整洁。这将会彻底删除指定的容器,包括其状态、数据以及所有相关信息。需要注意的是,删除容器不会影响镜像本身,镜像将保留在系统中供其他容器使用。

stop
rm
运行中的容器
Stopped(已停止)
Deleted(删除)
docker rm [容器名称|容器ID]

  直接删除运行中容器,会弹出警告错误。返回信息告诉你,需先停止容器,才可以删除。或者使用-f参数进行强制删除。先使用 docker stop [容器ID] 停止指定ID容器,再使用 docker rm [容器ID] 删除指定ID的容器,结果状态为删除状态(deleted)。

三、结语

  以上就是 Docker 的生命周期的几种状态、状态间的转换说明,在本文中,我们探讨了容器生命周期的每个阶段,从创建、启动、运行,到暂停、继续、停止和删除。学习 Docker,掌握生命周期,对于学习 Docker,至关重要。通过对容器的各个生命周期阶段进行深入的了解,我们能够更好地构建稳定、可靠的容器化应用,从而提高开发和运维的效率。

把今天最好的表现当作明天最新的起点…….~

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/376005.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity最新第三方开源插件《Stateful Component》管理中大型项目MonoBehaviour各种序列化字段 ,的高级解决方案

上文提到了UIState, ObjectRefactor等,还提到了远古的NGUI, KBEngine-UI等 这个算是比较新的解决方法吧,但是抽象出来,问题还是这些个问题 所以你就说做游戏是不是先要解决这些问题? 而不是高大上的UiImage,DoozyUI等 Mono管理引用基本用法 ① 添加Stateful Component …

【正点原子i.MX93开发板试用连载体验】录音小程序采集语料

本文最早发表于电子发烧友论坛:【新提醒】【正点原子i.MX93开发板试用连载体验】基于深度学习的语音本地控制 - 正点原子学习小组 - 电子技术论坛 - 广受欢迎的专业电子论坛! (elecfans.com) 接下来就是要尝试训练中文提示词。首先要进行语料采集,这是一…

【2-1:RPC设计】

RPC 1. 基础1.1 定义&特点1.2 具体实现框架1.3 应用场景2. RPC的关键技术点&一次调用rpc流程2.1 RPC流程流程两个网络模块如何连接的呢?其它特性RPC优势2.2 序列化技术序列化方式PRC如何选择序列化框架考虑因素2.3 应用层的通信协议-http2.3.1 基础概念大多数RPC大多自…

STM32Cubemx配置生成 Keil AC6支持代码

文章目录 一、前言二、AC 6配置2.1 ARM ComPiler 选择AC62.2 AC6 UTF-8的编译命令会报错 三、STM32Cubemx 配置3.1 找到stm32cubemx的模板位置3.2 替换文件内核文件3.3 修改 cmsis_os.c文件3.4 修改本地 四、编译对比 一、前言 使用keil ARM compiler V5的时候,编译…

M J更改图像生成方式的参数选项

一个完整的/imagine命令可能包含几个内容,例如图像 URL、图像权重、算法版本和其他开关。 /imagine参数应遵循以下顺序: /imagine prompt: https://example/tulip.jpg a field of tulips in the style of Mary Blair --no farms --iw .5 --ar 3:2 在这种情况下,“开关”是指…

如何压缩pdf文件大小,怎么压缩pdf文件大小

在数字化时代,pdf文件因其稳定的格式和跨平台兼容性,成为了工作与学习中不可或缺的一部分。然而,随着pdf文件内容的丰富,pdf文件的体积也随之增大,给传输和存储带来了不少挑战。本文将深入探讨如何高效压缩pdf文件大小…

【保姆级教程】CenterNet的目标检测、3D检测、关键点检测使用教程

一、代码下载 仓库地址:https://github.com/xingyizhou/CenterNet?tab=readme-ov-file 二、目标检测 2.1 下载预训练权重 下载预训练权重ctdet_coco_dla_2x.pth放到models文件夹下 下载链接:https://drive.google.com/file/d/18Q3fzzAsha_3Qid6mn4jcIFPeOGUaj1d/edit …

《昇思25天学习打卡营第19天|生成式-Pix2Pix实现图像转换》

学习内容:Pix2Pix实现图像转换 1.模型简介 Pix2Pix是基于条件生成对抗网络(cGAN, Condition Generative Adversarial Networks )实现的一种深度学习图像转换模型,该模型是由Phillip Isola等作者在2017年CVPR上提出的&#xff0c…

热题系列9

剑指 Offer 39. 数组中出现次数超过一半的数字 给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半&am…

防火墙nat策略实验和多出口实验和智能选路实验

要求 7,办公区设备可以通过电信链路和移动链路上网(多对多的NAT,并且需要保留一个公网IP不能用来转换) 8,分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的http服务器 9,多出口环境基于带宽比例进行选路&#xff0c…

GuLi商城-商品服务-API-品牌管理-OSS获取服务端签名(续)

如何进行服务端签名直传_对象存储(OSS)-阿里云帮助中心 gulimall-third-party服务的代码: package com.nanjing.gulimall.thirdparty.controller;import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.common.utils.BinaryUtil; impor…

电脑如何快速删除相同的文件?分享5款重复文件删除工具

您有没有发现最近电脑运行速度变慢了?启动时间变得更长,甚至完成简单任务也难以如常?这可能是因为重复文件堆积所致。我们发现,清理或移动这些重复的文件和文件夹可以产生惊人的效果。通过删除不必要的重复文件和垃圾文件&#xf…

【C++】:继承[下篇](友元静态成员菱形继承菱形虚拟继承)

目录 一,继承与友元二,继承与静态成员三,复杂的菱形继承及菱形虚拟继承四,继承的总结和反思 点击跳转上一篇文章: 【C】:继承(定义&&赋值兼容转换&&作用域&&派生类的默认成员函数…

YOLOv5白皮书-第Y5周:yolo.py文件解读

本文为365天深度学习训练营 中的学习记录博客 原作者:K同学啊|接辅导、项目定制 本次训练是在前文《YOLOv5白皮书-第Y2周:训练自己的数据集》的基础上进行的。 前言 文件位置:./models/yolo.Py 这个文件是YOLOv5网络模型的搭建文件,如果你想改进YOLOv5&…

three.js官方案例webgpu_reflection.html学习记录

目录 ​1 判断浏览器是否支持 2 THREE.DirectionalLight 2.1DirectionalLightShadow 3 Texture 3.1 .wrapS 3.2 .wrapT 3.3 .colorSpace 4 创建地面 5 WebGPURenderer 6 OrbitControls 控制器 7 屏幕后处理 import * as THREE from three;import { MeshPhongNodeMa…

Ubuntu使用Nginx部署uniapp打包的项目

使用uniapp导出web项目: 安装: sudo apt install nginx解压web.zip unzip web.zip移动到/var/www/html目录下: sudo cp -r ~/web/h5/ /var/www/html/重启Nginx: sudo service nginx restart浏览器访问:http://19…

基于FPGA的千兆以太网设计(1)----大白话解释什么是以太网

1、什么是以太网? 还记得初学以太网的时候,我就被一大堆专业名词给整懵了:什么以太网,互联网,MAC,IP,局域网,万维网,网络分层模型等等等等。慢着!我学的不是以太网吗?怎么出来这么一大堆东西? 啊!以太网究竟是什么?别急,我接下来就尽量用通俗的大白话来给你解释…

AURORA仿真

AURORA 仿真验证 定义:AURORA是一种高速串行通信协议,通常用于在数字信号处理系统和其他电子设备之间传输数据。它提供了一种高效的方式来传输大量数据,通常用于需要高带宽和低延迟的应用中。AURORA协议通常由Xilinx公司的FPGA器件支持&#…

Linux C | 管道open打开方式

Linux C | 管道open打开方式 1.参考 1. 管道 2.现象 是的,这段代码在调用 open(AUDIOIN_FIFO, O_RDONLY) 时可能会被阻塞。原因是 FIFO(命名管道)在以只读模式打开时,如果没有其他进程以写模式打开该 FIFO,open 调用将…

Argo CD入门、实战指南

1. Argo CD概述 1.1 什么是 Argo CD Argo CD 是针对 Kubernetes 的声明式 GitOps 持续交付工具。 1.2 为什么选择 Argo CD 应用程序定义、配置和环境应具有声明性并受版本控制。应用程序部署和生命周期管理应自动化、可审计且易于理解。 2. Argo CD基础知识 在有效使用 Ar…