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)。
相关推荐
Elastic 中国社区官方博客6 小时前
使用 Jev 作为 search reranker:基准测试与实现方法
大数据·运维·elasticsearch·全文检索
workflower6 小时前
世界模型向产业上游发掘的热点
人工智能·机器学习·机器人·云计算·无人机
shjita6 小时前
centos中安装docker
linux·docker·centos
红红谈说6 小时前
浏览器自动化环境老是起不来?依赖治理与启动自检的一次复盘
运维·自动化·浏览器自动化·进程残留·环境依赖·启动自检·版本比较
ysu_03146 小时前
Docker-Desktop-WSL2实战指南-Windows从安装配置到项目容器化
windows·python·docker·容器·composer·dockerfile·wsl2
赵民勇7 小时前
glib-compile-schemas命令详解
linux·运维
天衍四九-7 小时前
Docker Compose企业实战系列(三):Vue/React前端项目容器化完整部署
前端·vue.js·docker
小小、码农7 小时前
〖Linux进程间通信〗IPC全家桶:匿名管道、FIFO、共享内存、消息队列与信号量一篇打通
linux·运维·服务器
阳光九叶草LXGZXJ7 小时前
达梦数据库-学习-67-SSL加密认证
linux·运维·数据库·sql·学习·ssl
掉进电商坑三年没爬出来的东叔7 小时前
2026最新:青龙面板搭建全自动薅羊毛脚本,云服务器24小时挂机教程
运维·服务器·pygame