01 容器技术概述

文章目录

  • [01 容器技术概述](#01 容器技术概述)
    • 一、容器技术发展
      • [1. 应用上云的痛点](#1. 应用上云的痛点)
      • [2. 传统 PaaS(Cloud Foundry)](#2. 传统 PaaS(Cloud Foundry))
      • [3. Docker 的核心创新](#3. Docker 的核心创新)
      • [4. 容器是什么](#4. 容器是什么)
    • [二、容器 vs 虚拟机](#二、容器 vs 虚拟机)
    • 三、容器编排与基金会
    • [四、Docker 架构](#四、Docker 架构)
    • 五、容器基础操作
      • [1. 运行第一个容器](#1. 运行第一个容器)
      • [2. docker run 常用选项](#2. docker run 常用选项)
      • [3. 查看命令](#3. 查看命令)
      • [4. 容器生命周期管理命令](#4. 容器生命周期管理命令)
      • [5. stop / kill / pause 区别](#5. stop / kill / pause 区别)
      • [6. 进入容器的两种方式](#6. 进入容器的两种方式)
    • 六、其他常考点
    • 七、速记口诀

01 容器技术概述

常考主线:容器解决什么问题 → 容器 vs 虚拟机 → OCI/Docker 架构 → 容器生命周期命令。

一、容器技术发展

1. 应用上云的痛点

上云方式 问题
重新部署(脚本/手工) 本地与云端环境不一致;历史数据难处理
系统镜像迁移(P2V/V2V) 镜像体积大、重;虚拟化有额外资源开销

2. 传统 PaaS(Cloud Foundry)

  • 作用:解决大规模应用"上云",提供应用托管 + 打包分发机制。
  • 已经用 Namespace + Cgroup 给每个应用做隔离沙盒(和 Docker 容器实现类似)。
  • 痛点:打包困难------本地与云端环境不一致,要为每种语言/框架/版本分别打包适配,"一键部署很痛快,打包过程很痛苦"。

3. Docker 的核心创新

  • Docker 镜像:把应用 + 完整运行依赖(整个操作系统的文件目录 rootfs)一起打包,格式统一。
  • 效果:本地与云端环境高度一致,一次打包,到处运行(Build, Ship and Run),无需再修改配置。
  • 2013 年 dotCloud 公司开源 Docker;Go 语言编写;遵循 Apache 2.0;分 CE 社区版 / EE 企业版。

4. 容器是什么

  • 定义:容器是镜像(image)运行时的实例。
  • 通俗理解:软件界的"集装箱"------隔离、封装、标准化运输,不关心里面装什么。

二、容器 vs 虚拟机

对比项 容器 Container 虚拟机 VM
启动速度 秒级甚至毫秒级 数秒~数十秒
系统内核 共享宿主机内核 各自独立内核(不共享)
实现技术 Linux 内核 Namespace/Cgroup Hypervisor 虚拟化
隔离级别 进程级隔离 系统资源级隔离
资源消耗 本质只是宿主机上的一个普通进程,几乎无额外开销 Hypervisor 层带来额外开销
资源调用 进程直接由宿主机 OS 管理 需经 Hypervisor 拦截处理
单机数量 1000+ 容器 一般不超过 100 台 VM
镜像 分层镜像 非分层镜像
典型应用 DevOps、微服务 硬件资源划分

记忆点:容器优势 = 快(启动)、少(开销)、多(密度);代价是隔离性不如虚拟机。

三、容器编排与基金会

  • 编排引擎:Docker Swarm(原生 API)、Mesos(两层调度,管上万节点)、Kubernetes(Google 2014 发布,事实标准)。
  • CNCF(Cloud Native Computing Foundation,2015 成立,隶属 Linux 基金会):明星项目 Kubernetes、Prometheus、Fluentd、CNI、gRPC。
  • OCI (Open Container Initiative,2015):制定容器格式 + 运行时 runtime 的开放行业标准;Docker 把 Libcontainer 捐出改名为 runC 交给 OCI。
    • runC:符合 OCI 规范的底层 runtime 工具,由 Libcontainer 演变而来;其他还有 LXC、rkt。
    • 意义:把 runtime 和镜像格式从 Docker 项目中剥离出来。

四、Docker 架构

Docker Engine 是 Client/Server 程序,三部分:

组件 作用
Docker Client(CLI) 用户输入 docker 命令,通过 REST API 发请求
Docker Daemon(守护进程) 长期运行的服务器进程,接收并响应客户端 API 请求的就是它;负责创建管理镜像、容器、网络、卷
REST API Client 与 Daemon 之间的通信接口

其他对象:

  • Image 镜像:运行环境的静态模板。
  • Container 容器:镜像运行起来的隔离运行实例。
  • Registry 仓库:存放镜像,可搭私有仓库。

常考:Docker 中响应用户 API 的组件 = Docker Daemon。

注意:Docker 不直接与内核交互,而是通过更底层的 runC/Libcontainer 与内核交互。

五、容器基础操作

1. 运行第一个容器

bash 复制代码
docker run -d -p 8080:80 httpd
# -d 后台运行;-p 宿主机端口:容器端口 做端口映射

本地没有镜像会自动先 pull,再创建并启动容器,输出容器 full-id(64 位)。

2. docker run 常用选项

选项 作用
-d 后台运行容器
-p 主机端口:容器端口 端口映射
-it 交互式终端(-i 保持输入,-t 分配终端)
-h 指定容器 hostname
--name 指定容器名称

3. 查看命令

bash 复制代码
docker images        # 查看本地镜像
docker ps            # 查看运行中的容器
docker ps -a         # 查看所有状态容器(含已停止)
  • CONTAINER ID 默认显示 full-id 的前 12 位(short-id)。
  • NAMES:不指定 --name 时 Docker 随机分配。

4. 容器生命周期管理命令

命令 作用
docker create 创建容器(不启动)
docker start 启动容器
docker run 创建 + 启动(= create + start)
docker pause / unpause 暂停 / 恢复容器(挂起进程,不释放)
docker restart 重启容器
docker stop 优雅停止,发 SIGTERM 信号(超时再 SIGKILL)
docker kill 强制杀死,发 SIGKILL 信号
docker rm 删除已终止的容器

容器四种状态:created、running(Up)、paused、exited。

5. stop / kill / pause 区别

命令 信号/动作 结果状态
docker stop 先发 SIGTERM,给时间优雅退出 exited(可再 start)
docker kill 直接发 SIGKILL,立即强杀 exited
docker pause 利用 cgroup freezer 挂起进程,进程还在 paused(unpause 恢复)

6. 进入容器的两种方式

方式 是否开新进程 特点
docker attach 容器 不启动新进程,直接接到容器主进程终端 多窗口 attach 会同步显示;主进程退出容器就停
docker exec -it 容器 bash 打开新终端/新进程 调试首选,退出不影响容器运行

六、其他常考点

  • exited 状态的容器:不再占 CPU/内存,但仍占用宿主机文件系统资源(可写层还在)。
  • 一次性删除所有终止状态容器:docker container prune (也可 docker rm $(docker ps -aq))。
  • 查看 docker 服务/引擎状态:systemctl status docker、docker info。

七、速记口诀

  1. 镜像 = 模板(静态),容器 = 实例(运行)。
  2. 容器共享内核、进程级隔离;VM 独立内核、资源级隔离。
  3. OCI 定标准,runC 是实现;CNCF 管云原生,K8s 是编排核心。
  4. 响应 API 找 Daemon;run = create + start。
  5. stop 发 SIGTERM 温柔,kill 发 SIGKILL 强杀,pause 是冻结。
  6. attach 不开新进程,exec 开新进程(调试用 exec)。
相关推荐
桌面运维家6 小时前
旧电脑跑不动课程软件,VDI云桌面怎样接着用?
运维·服务器·虚拟化·pve·vdi·云桌面
zhang133830890757 小时前
传统机械三杯式风速传感器易磨损冻堵?CG-88金属超声波风速风向传感器给出免运维方案
运维·服务器·网络·人工智能·自动化
知已难寻7 小时前
第 2 篇 · 云的地基:服务器、存储、网络三大基础设施
运维·服务器·网络·云原生·云计算·负载均衡·1024程序员节
2601_949847759 小时前
bcrypt.js 跨端三方库仓颉适配全流程
linux·运维·ubuntu
m0_639906949 小时前
Linux 操作系统入门:目录结构、服务排查常用命令、Shell 脚本基础
linux·运维·后端
今天重构了吗10 小时前
Linux 上 rm -rf 删错了能找回吗
运维·服务器
KaiwuDB10 小时前
KaiwuDB 分布式集群扩缩容,从原理到完整操作踩坑总结
运维·数据库·分布式
codezzzsleep10 小时前
学术汇报 PPT 自动化生成实战指南
运维·自动化·powerpoint
古法老登瞎折腾10 小时前
大数据智能运维实战(九):让 AI 查日志——找到异常,也保留上下文
java·大数据·运维·人工智能·spring ai·mcp
讯捷蓝达11 小时前
IBM V3500存储 双控故障、数据怎么恢复?
运维