[容器]基础知识

容器是什么?

容器(Container) 是一种轻量化的 应用隔离技术 ,本质是通过 Linux 内核的 命名空间(Namespaces)控制组(cgroups) 实现的进程级虚拟化。

容器将应用程序及其依赖(库、配置文件、环境变量等)打包在一个独立环境中运行,具有以下特点:

特性 说明
轻量化 共享宿主机内核,无需虚拟化硬件,资源占用极低(秒级启动)
隔离性 通过 Namespaces 隔离进程、网络、文件系统等资源
资源限制 通过 cgroups 限制 CPU、内存、磁盘 I/O 等资源使用
一致性 镜像(Image)保证开发、测试、生产环境一致
可移植性 容器镜像可在任意支持容器运行时的平台(Linux/Windows)执行

容器 vs 虚拟机(VM)

容器 虚拟机
虚拟化层级 进程级(共享宿主机内核) 硬件级(通过 Hypervisor 虚拟化)
启动速度 秒级 分钟级
资源占用 低(仅应用所需资源) 高(需分配完整操作系统资源)
隔离性 进程级隔离(较弱) 完全隔离(更强)

容器和 Pod 的关系

1. Pod 是什么?

Pod 是 Kubernetes 中的最小调度单元,由 一个或多个容器 组成,这些容器:

  • 共享网络命名空间 :Pod 内所有容器使用相同的 IP 和端口范围,可通过 localhost 直接通信。
  • 共享存储卷(Volume) :容器可访问同一组持久化存储(如共享配置文件、日志目录)。
  • 生命周期一致:Pod 启动时,内部容器同时创建;Pod 终止时,容器同时销毁。

2. 为什么需要 Pod?

  • 协作场景:若多个容器需紧密协作(如主应用 + 日志收集器、主服务 + Sidecar 代理),通过 Pod 统一管理更方便。
  • 资源复用:共享网络和存储,避免重复配置。
  • Kubernetes 调度基础:Kubernetes 直接管理 Pod 而非单个容器。

3. 容器与 Pod 的关系

  • 层级关系:Pod 是容器的逻辑组合,一个 Pod 包含一个或多个容器。

  • 共享与隔离

    • 共享:网络、存储卷、部分内核命名空间。
    • 隔离:每个容器有独立的文件系统、进程空间(除非显式共享)。

示例场景

plaintext

复制

yaml 复制代码
Pod: "web-server"
├── Container 1: Nginx(主服务,监听 80 端口)
└── Container 2: Filebeat(日志收集器,读取 Nginx 的日志文件)
  • 两个容器共享 Pod 的 IP 和网络,Nginx 可通过 localhost:8080 访问同一 Pod 中的另一个服务。
  • 它们通过共享存储卷(Volume)访问同一日志目录。

Podman 中的 Pod 管理

Podman 支持直接创建和管理 Pod(无需 Kubernetes),命令示例:

bash

复制

perl 复制代码
# 创建一个 Pod(分配共享网络和存储)
podman pod create --name my-pod

# 向 Pod 中添加容器
podman run -d --pod my-pod nginx
podman run -d --pod my-pod filebeat

# 查看 Pod 状态
podman pod ls

总结

概念 容器 Pod
定位 单个应用进程的隔离环境 一组容器的逻辑组合
共享资源 无(默认独立) 网络、存储卷、部分命名空间
使用场景 运行单一服务 管理协作密切的多容器服务组
管理工具 Docker、Podman、containerd 等 Kubernetes、Podman

核心关系

  • Pod 是容器的"逻辑外壳",用于管理协作型容器组。
  • 容器是 Pod 的组成部分,负责实际运行业务逻辑。
相关推荐
HelloZheQ1 小时前
Go:简洁高效,构建现代应用的利器
开发语言·后端·golang
caihuayuan51 小时前
[数据库之十四] 数据库索引之位图索引
java·大数据·spring boot·后端·课程设计
风象南2 小时前
Redis中6种缓存更新策略
redis·后端
程序员Bears3 小时前
Django进阶:用户认证、REST API与Celery异步任务全解析
后端·python·django
非晓为骁3 小时前
【Go】优化文件下载处理:从多级复制到零拷贝流式处理
开发语言·后端·性能优化·golang·零拷贝
北极象3 小时前
Golang中集合相关的库
开发语言·后端·golang
喵手3 小时前
Spring Boot 中的事务管理是如何工作的?
数据库·spring boot·后端
玄武后端技术栈5 小时前
什么是延迟队列?RabbitMQ 如何实现延迟队列?
分布式·后端·rabbitmq
液态不合群6 小时前
rust程序静态编译的两种方法总结
开发语言·后端·rust
bingbingyihao6 小时前
SpringBoot教程(vuepress版)
java·spring boot·后端