当前位置: 首页 > news >正文

【Docker基础】Docker核心概念:容器(Container)详解

目录

1 容器技术概述

2 容器与虚拟机的区别

3 Docker容器的核心组成

4 容器生命周期管理

5 容器核心技术详解

5.1 命名空间(Namespaces)

5.2 控制组(cgroups)

5.3 联合文件系统(UnionFS)

6 容器网络模型

7 容器数据管理

7.1 数据卷(Volume)

7.2 绑定挂载(Bind Mount)

7.3 临时文件系统(tmpfs)

8 Docker容器操作实践

8.1 容器基本操作

8.2 容器交互操作

8.3 容器资源限制

9 总结


1 容器技术概述

容器(Container)是Docker技术的核心概念之一,它是一种轻量级、可移植的软件打包技术,将应用程序及其所有依赖项(包括库、环境变量和配置文件)打包到一个标准化的单元中。
容器与虚拟机不同,它不需要包含完整的操作系统,而是共享主机系统的内核,这使得容器更加轻量和高效。
容器技术的出现解决了软件开发中著名的"在我机器上能运行"的问题,通过提供一致的运行环境,确保了应用程序在开发、测试和生产环境中的一致性。

2 容器与虚拟机的区别

传统虚拟机架构
  • 在物理服务器上安装主机操作系统
  • 在主机OS上安装Hypervisor(虚拟机监控程序)
  • 每个虚拟机运行完整的Guest OS
  • 应用程序运行在Guest OS中
容器架构
  • 在物理服务器上安装主机操作系统
  • 在主机OS上安装Docker引擎
  • 容器直接共享主机OS内核
  • 应用程序运行在隔离的容器环境中
关键区别:
  • 资源占用:虚拟机需要为每个实例分配完整的OS资源,而容器共享主机OS内核,资源占用更少
  • 启动速度:虚拟机启动需要启动整个OS,而容器几乎是即时启动
  • 性能:容器几乎没有性能开销,而虚拟机有Hypervisor的额外开销
  • 隔离性:虚拟机提供更强的隔离性,容器通过命名空间和cgroups实现轻量级隔离

3 Docker容器的核心组成

一个Docker容器由以下几个核心部分组成:
  • 镜像(Image):容器的静态模板,包含运行应用所需的所有文件和配置
  • 容器运行时(Container Runtime):负责容器的创建、运行和管理
  • 命名空间(Namespaces):提供隔离的视图,包括PID、网络、用户等
  • 控制组(cgroups):限制和监控资源使用
  • 联合文件系统(UnionFS):实现镜像的分层和容器的可写层

4 容器生命周期管理

  • Docker容器的生命周期包括以下几个关键阶段:
  • 创建(Created):使用docker create命令创建一个容器,此时容器文件系统已准备就绪,但尚未运行
  • 运行(Running):使用docker start启动容器,容器内的主进程开始执行
  • 暂停(Paused):使用docker pause暂停容器,此时容器进程被冻结,但保留在内存中
  • 停止(Stopped):使用docker stop停止容器,容器内的主进程被终止,但容器配置保留
  • 删除(Deleted):使用docker rm删除容器,释放所有资源

5 容器核心技术详解

5.1 命名空间(Namespaces)

命名空间是Linux内核提供的隔离机制,Docker利用以下命名空间实现容器隔离:
  • PID命名空间:隔离进程ID,每个容器有自己的PID 1进程
  • 网络命名空间:每个容器有独立的网络栈、接口和IP地址
  • 挂载命名空间:容器有独立的文件系统挂载点
  • UTS命名空间:隔离主机名和域名
  • IPC命名空间:隔离进程间通信资源
  • 用户命名空间:隔离用户和组ID

5.2 控制组(cgroups)

控制组是Linux内核功能,用于限制、记录和隔离进程组的资源使用:
  • 资源限制:限制内存、CPU、磁盘I/O等资源使用
  • 优先级控制:为不同进程组分配不同的资源使用优先级
  • 资源统计:监控系统资源使用情况
  • 进程控制:冻结、恢复进程组

5.3 联合文件系统(UnionFS)

联合文件系统是实现Docker镜像分层和容器可写层的基础技术:
  • 分层存储:镜像由多个只读层组成,容器添加一个可写层
  • 写时复制(Copy-on-Write):修改文件时,先复制到可写层再修改
  • 高效存储:多个容器可以共享基础镜像层,节省存储空间

6 容器网络模型

  • Docker提供了多种网络模式,满足不同场景需求:
  • 桥接模式(bridge):默认模式,容器通过docker0网桥通信
  • 主机模式(host):容器直接使用主机网络栈
  • 无网络(none):容器没有网络接口
  • 容器模式(container):共享另一个容器的网络命名空间
  • 覆盖网络(overlay):用于多主机通信的Swarm模式

7 容器数据管理

容器文件系统是临时的,为了持久化数据,Docker提供了多种数据管理方式:

7.1 数据卷(Volume)

  • Docker管理的持久化数据存储
  • 独立于容器生命周期
  • 可以通过docker volume命令管理

7.2 绑定挂载(Bind Mount)

  • 将主机任意目录挂载到容器
  • 主机和容器共享同一文件系统位置
  • 适合开发环境共享代码

7.3 临时文件系统(tmpfs)

  • 数据只存储在内存中
  • 容器停止后数据丢失
  • 适合敏感临时数据

8 Docker容器操作实践

8.1 容器基本操作

# 运行容器
docker run -d --name my_container nginx:latest# 查看运行中的容器
docker ps# 查看所有容器(包括停止的)
docker ps -a# 停止容器
docker stop my_container# 启动已停止的容器
docker start my_container# 删除容器
docker rm my_container

8.2 容器交互操作

# 以交互模式运行容器
docker run -it my_container /bin/bash# 在运行中的容器中执行命令
docker exec -it my_container /bin/bash# 查看容器日志
docker logs my_container# 查看容器详细信息
docker inspect my_container

8.3 容器资源限制

# 限制内存使用为512MB
docker run -d --name mem_limited --memory=512m nginx# 限制CPU使用(相对权重)
docker run -d --name cpu_limited --cpu-shares=512 nginx# 限制CPU核心数
docker run -d --name cpu_core --cpus=1.5 nginx

9 总结

Docker容器作为现代应用交付和部署的标准,通过轻量级的隔离机制和标准化的打包方式,彻底改变了软件开发和运维的方式。理解容器的核心概念、生命周期和技术原理,对于有效使用Docker至关重要。

相关文章:

  • 智能制造——解读86页敏捷制造业务模型设计方案【附全文阅读】
  • [未验证]abaqus2022 更改内置python
  • 2025年SYN洪水攻击防御实战全解析:从协议对抗到智能防护
  • whttpserver:一个命令极速搭建文件上传与下载服务器
  • GitOps 中的密钥管理 - 安全处理敏感信息
  • 滚珠导轨在汽车自动化装配线中的核心传动
  • Rust:在Windows上安装
  • 使用html写一个倒计时页面
  • Redis核心技术与实战指南
  • 【kafka】rebalance机制详解
  • ubuntu install vncserver
  • Altair:用Python玩转声明式可视化(新手友好向)
  • 《tqdm:让你的代码会“喘气”的神奇进度条!》
  • 在 Java 中实现一个标准 Service 接口,并通过配置动态选择具体实现类供 Controller 调用
  • 【计算几何】几何邻近
  • Ubuntu 24.04 上安装与 Docker 部署 Sentinel
  • vue封装移动端日历,可折叠展开,以及考勤
  • openeuler系统(CentOs)图形化桌面黑屏/丢失(开启VNC服务冲突)
  • 蚁群算法(Ant Colony Optimization)原理与应用解析
  • ABP vNext + Spark on Hadoop:实时流处理与微服务融合
  • 企业网站建设宣贯/5118数据分析平台
  • 开源的网站系统/聊城seo培训
  • 网站建设人员的工资分配/百度数据平台
  • 哪些网站做微课赚钱/互动营销案例分析
  • 上海专业网站建设方案/今日国内新闻10则
  • 电商网站建设需要多少钱/西安百度推广客服电话多少