【Docker基础】Docker容器生命周期管理:从创建到删除的完整指南

目录

1 容器生命周期概述

2 容器创建(docker create)

2.1 docker create命令详解

2.2 创建流程解析

2.3 创建与运行的区别

3 容器启动(docker start)

3.1 docker start命令详解

3.2 启动流程解析

3.3 启动与运行的区别

4 容器运行管理

4.1 查看运行状态

4.2 暂停与恢复(docker pause/unpause)

4.3 停止与重启(docker stop/restart)

5 容器删除(docker rm)

5.1 删除命令详解

5.2 删除流程解析

5.3 数据持久化策略

6 容器生命周期实践示例

7 常见问题与解决方案

7.1 容器启动后立即退出

7.2 端口冲突

7.3 容器无法删除

8 总结


1 容器生命周期概述

Docker容器的生命周期包含多个关键状态和转换过程,理解这些状态及其转换对于有效管理容器至关重要,容器生命周期主要包括以下状态和操作:

2 容器创建(docker create)

2.1 docker create命令详解

  • docker create命令用于创建一个新的容器但不立即启动它:
docker create [选项] 镜像 [命令] [参数...]
常用选项:
  • --name:为容器指定名称
  • -p/--publish:发布容器端口到主机
  • -v/--volume:挂载数据卷
  • -e/--env:设置环境变量
  • --restart:配置重启策略
  • -it:分配交互式终端
  • 示例:
docker create --name myweb -p 8080:80 nginx:latest

2.2 创建流程解析

  • 用户执行docker create命令
  • Docker客户端将请求发送给Docker守护进程
  • 守护进程检查镜像是否存在(不存在则尝试拉取)
  • 创建容器文件系统(基于镜像层+可写层)
  • 应用所有配置选项(网络、卷、环境变量等)
  • 返回创建的容器ID
  • 客户端显示创建结果

2.3 创建与运行的区别

特性

docker create

docker run

容器状态

仅创建,不启动

创建并立即启动

执行速度

较快

较慢(包含启动过程)

使用场景

需要预先配置后启动

需要立即运行的容器

后续操作

需要手动start

已自动启动

日志输出

立即开始产生日志

3 容器启动(docker start)

3.1 docker start命令详解

  • docker start命令用于启动一个或多个已停止的容器:
docker start [选项] 容器 [容器...]
常用选项:
  • -a/--attach:附加STDOUT/STDERR并转发信号
  • -i/--interactive:附加容器的STDIN
  • --checkpoint:从检查点恢复
  • 示例:
docker start -ai myweb

3.2 启动流程解析

  • 用户执行docker start命令
  • Docker客户端将请求发送给守护进程
  • 守护进程准备容器运行时环境
  • 初始化网络栈(如果未初始化)
  • 挂载所有配置的卷
  • 执行容器入口点命令
  • 返回启动结果给客户端

3.3 启动与运行的区别

  • docker run实际上是docker create和docker start的组合:
# 以下两条命令效果相似
docker run -d --name myweb nginx
docker create --name myweb nginx && docker start myweb
关键区别:
  • docker run无法设置某些只能在create阶段设置的参数
  • docker create + start可以更精确控制创建和启动过程
  • docker run会自动附加终端(除非使用-d)

4 容器运行管理

4.1 查看运行状态

# 查看容器列表
docker ps           # 仅运行中的容器
docker ps -a        # 所有容器(包括已停止的)# 查看容器详情
docker inspect 容器# 查看容器日志
docker logs 容器# 查看容器资源使用
docker stats 容器

4.2 暂停与恢复(docker pause/unpause)

  • 暂停容器会冻结容器内的所有进程:
# 暂停容器
docker pause 容器# 恢复容器
docker unpause 容器
使用场景:
  • 临时释放CPU资源
  • 调试容器状态
  • 保持容器状态的同时暂停服务
注意事项:
  • 暂停的容器仍然占用内存
  • 网络连接会被保持但不会处理
  • 文件系统保持打开状态

4.3 停止与重启(docker stop/restart)

  • 优雅停止容器:
# 停止容器(发送SIGTERM,然后SIGKILL)
docker stop [-t 超时时间] 容器# 强制停止(立即发送SIGKILL)
docker kill 容器# 重启容器
docker restart 容器
停止流程:
  • 发送SIGTERM信号
  • 等待默认10秒(可通过-t调整)
  • 如果仍未停止,发送SIGKILL
  • 容器状态变为"Exited"

5 容器删除(docker rm)

5.1 删除命令详解

# 删除已停止的容器
docker rm 容器# 强制删除运行中的容器
docker rm -f 容器# 删除所有已停止的容器
docker container prune# 删除容器时同时删除关联的卷
docker rm -v 容器

5.2 删除流程解析

5.3 数据持久化策略

删除容器时,默认会丢失容器内的所有数据,要实现数据持久化:
  • 使用数据卷
docker run -v /data/host:/data/container nginx
  • 使用命名卷
docker volume create myvol docker run -v myvol:/data/container nginx
  • 绑定挂载主机目录
docker run -v $(pwd):/app nginx

6 容器生命周期实践示例

  • 命名容器:总是使用--name指定有意义的名称
docker run --name web-server nginx
  • 自动清理:运行一次性容器时使用--rm选项
docker run --rm alpine echo "hello"
  • 重启策略:根据需求配置适当的重启策略
docker run --restart unless-stopped redis
  • 资源限制:为容器设置适当的资源限制
docker run -m 512m --cpus 1.5 nginx
  • 日志管理:配置适当的日志驱动和大小限制
docker run --log-driver json-file --log-opt max-size=10m nginx

7 常见问题与解决方案

7.1 容器启动后立即退出

问题现象:容器状态显示"Exited (0)"
可能原因
  • 容器内主进程结束
  • 没有前台进程保持运行
  • 配置错误导致快速失败
解决方案
  • 检查容器日志:
docker logs 容器
  • 确保有前台进程运行
  • 使用交互模式调试:
docker run -it --entrypoint sh 镜像

7.2 端口冲突

问题现象:Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use
解决方案
  • 更改主机端口:
docker run -p 8080:80 nginx
  • 停止占用端口的服务
  • 使用不同网络模式:
docker run --network host nginx

7.3 容器无法删除

问题现象:Error response from daemon: You cannot remove a running container
解决方案
  • 先停止容器:
docker stop 容器 && docker rm 容器
  • 强制删除:
docker rm -f 容器
  • 删除所有停止的容器:
docker container prune

8 总结

Docker容器的生命周期管理是容器化技术的核心技能,通过合理运用容器生命周期的各个阶段:创建、启动、运行、暂停、停止和删除等命令和技巧,可以高效地管理Docker容器,确保应用程序的稳定运行和资源的有效利用。记住,理解容器生命周期有助于调试问题、优化性能并构建可靠的容器化应用。

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

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

相关文章

Docker、Docker composer与Docker desktop

文章目录 Docker、Docker composer与Docker desktop一、docker、docker composer、docker desktop1.1 Docker1.2 Docker Compose1.3 Docker Desktop1.4 三者之间的区别 二、docker desktop的安装和换源2.1 前期准备WSL2 2.1 Docker Desktop 安装下载 Docker Desktop安装 Docker…

H5录音、图文视频IndexDB储存最佳实践:用AI生成语音备忘录

引言 早在大学的时候,我就期望做一款属于自己的 APP,可惜那时不懂技术。现在有了技术,但却没有时间。好在 AI 的快速发展终于让我完成了这个愿望。于是,我用半天的时间,用 AI 生成了一个纯前端的 H5 程序:…

简述C++ nlohmann/json 库

目录 JSON概述 nlohmann/json 库的使用 创建json数组/对象 字符串解析(parse反序列化) 数据访问 序列化 文件读写 JSON概述 JSON(JavaScrip Object Notation)是一种轻量级、跨语言的数据交换格式。它基于 ECMAScript 子集,以独立于编程…

定制开发开源AI智能名片与S2B2C商城小程序的内容分发体系构建:基于“1+N“素材复用模型的创新实践

摘要:在数字内容爆炸式增长的当下,本文针对内容分发效率低下的行业痛点,提出基于"定制开发开源AI智能名片S2B2C商城小程序"的一体化解决方案。通过构建"1篇长文10条长视频20条短视频10个平台"的素材复用公式,…

c++26新功能—hive容器

一、容器的演进 科学进步的过程一般来说都是从先解决常用的、迫切的问题开始,然后再逐步解决一些少见不迫切的问题,直到最终解决到认知程度内的诸多问题。举一个网上的例子,以前说咱们无法生产水笔的尖头上的钢球,其实这对于国内…

Kafka 源码剖析:消息存储与协议实现(二)

四、协议实现机制探秘 4.1 生产者协议 4.1.1 消息发送流程 Producer 在向 Kafka 集群发送消息时,首先会根据分区策略选择目标分区 。常见的分区策略有轮询、按消息键的哈希值分区以及自定义分区策略 。如果生产者在发送消息时指定了分区号,那么消息就…

Vue.js 与 TypeScript:最佳实践

1. 引言 Vue.js 是一个渐进式、灵活的 JavaScript 框架,广泛用于构建用户界面和单页应用(SPA)。而 TypeScript 是 JavaScript 的一个超集,添加了静态类型和其他高级特性。将两者结合使用,可以帮助开发者构建更具可维护…

webpack5 css-loader:从基础到原理

webpack 处理样式 webpack本身是不能识别样式资源的,需要借助Loader来帮助webpack解析样式资源,样式资源包括但不限于css/less/sass/scss/styl 未使用样式处理加载器前 运行webpack打包命令 bash npx webpack报错信息如图,提示无法识别css…

【GESP】C++三级练习 luogu-B2096 直方图

GESP C三级练习,一维数组练习,难度★★☆☆☆。 题目题解详见:【GESP】C三级练习 luogu-B2096 直方图 | https://www.coderli.com/gesp-3-luogu-b2096/ 【GESP】C三级练习 luogu-B2096 直方图 | OneCoderGESP C三级练习,一维数组…

【网站内容安全检测】之2:从网站所有URL页面中提取所有外部及内部域名信息

还没写成Go的,用Python吧,稍微慢一点 依赖内容(安装命令pip install -r requirements.txt) requirements.txt aiohttp beautifulsoup44.12.2 tqdm4.66.1 redis5.2.1 motor3.3.1 pymongo4.6.0 chardet提取域名的程序 domain_extractor.py …

【LLaMA-Factory 实战系列】四、API 篇 - 部署推理服务与批量调用实战

【LLaMA-Factory 实战系列】四、API 篇 - 部署推理服务与批量调用实战 1. 引言2. 推理后端的选择与对比3. 部署 API 推理服务3.1 创建 API 配置文件3.2 启动 API 服务3.3 探索交互式 API 文档 4. 编写 Python 脚本进行批量调用4.1 准备工作4.2 批量调用脚本4.3 运行脚本并查看结…

C++工厂模式的作用(工厂方法、Factory Method、Factory Pattern)

文章目录 代码示例工厂的作用1. 对象创建的封装 🏭2. 解耦客户端和具体类 🔗3. 统一的创建入口 🚪4. 隐藏实现细节 🎭 在这个项目中的具体体现总结 代码示例 https://gitee.com/arnold_s/my-learning-test/tree/master/20250610_…

9-C#修改任务管理的名称

C#修改任务管理的名称

Fisco Bcos学习 - 搭建第一个区块链网络

文章目录 一、前言二、环境准备三、安装依赖在 macOS 上安装依赖在 Ubuntu 上安装依赖在 CentOS 上安装依赖 四、创建操作目录并下载安装脚本五、搭建单群组 4 节点联盟链六、启动 FISCO BCOS 链七、检查进程八、检查日志输出 在数字化时代,区块链技术正逐渐成为推动…

可视化图解算法53:表达式求值

牛客网 面试笔试 TOP 101 1. 题目 描述 请写一个整数计算器,支持加减乘三种运算和括号。 数据范围:0≤∣s∣≤100,保证计算结果始终在整型范围内 要求:空间复杂度: O(n),时间复杂度 O(n) 示例1 输入…

小白成长之路-Nginx配置(二)

文章目录 一、localtion配置1.匹配规则2.匹配优先级3.配置案例 二、rewrite1、 语法2、 可写入字段3 配置案例4 if 指令5.sutoindex6. nginx配置中的常用变量 三、配置Nginx状态统计1.下载vts模块2.编译nginx 提示:以下是本篇文章正文内容,下面案例可供参…

Qt的第一个程序

Qt的第一个程序 1.hello world2.使用图形化拖拽方式3.使用C代码的方式3.1.头文件3.2.setText3.3.对象树 4.设计MyLabel5.乱码问题 🌟🌟hello,各位读者大大们你们好呀🌟🌟 🚀🚀系列专栏&#xff…

图书数据接口

基本说明: 接口地址:http://data.isbn.work/openApi/getInfoByIsbn?isbn{isbn}&appKey{appkey}返回格式:json请求方式:get请求示例:http://data.isbn.work/openApi/getInfoByIsbn?isbn9787513159074&appKey…

MongoDB原理

目录 一、概念 二、架构 2.1 逻辑结构 2.2 数据模型 2.3 存储引擎:WiredTiger 三、事务 一、概念 MongoDB是文档数据库,基本存储单元是 文档(Document),以BSON格式(一种类json的二进制形式&#xff…

《解码音频:从基础到未来的听觉探索》

音频:开启声音世界的大门 在生活的每一个角落,音频如影随形,编织出丰富多彩的听觉体验。清晨,第一缕阳光尚未完全照进房间,手机里温柔的闹钟铃声,将我们从睡梦中轻轻唤醒,开启活力满满的一天。通…