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 dockerdocker 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)。
相关推荐
海宇大数据1 小时前
零信任架构实战:基于海宇单人婚姻状态查询构建自动化线上房产交易合规网关
运维·人工智能·架构·自动化
bloglin999991 小时前
windows中如何像linux的lsof一样查看端口
运维
网硕互联的小客服1 小时前
服务器如何检查Web端口(如80/443)是否正常监听?
运维·服务器
buhuizhiyuci1 小时前
线程的互斥
linux·运维·服务器·c++
大橙子plus1 小时前
linux搭建kafka
linux·运维·kafka
团子股股东峥哥1 小时前
day35-RHEL-管理SELinux的安全性
linux·运维·服务器
蓝速科技1 小时前
涉外酒店前台双屏翻译机落地应用指南
运维·人工智能·科技·语言模型·自然语言处理·语音识别
悟乙己1 小时前
逛逛阿里云 官方Skills 门户
阿里云·云计算
Databuff1 小时前
PuTTY 工具的开源平替来了,免费使用
运维·开源·ssh·开源软件