当前位置: 首页 > 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至关重要。
http://www.xdnf.cn/news/980947.html

相关文章:

  • Spring详解【2】
  • 数据定义以及数据类型
  • 盒模型小全
  • MySQL查看连接情况
  • 解锁Flink CDC:实时数据同步秘籍
  • windows电脑解决笔记本搜索不到wifi问题
  • 通过flv.js在网页中拉流进行视频播放
  • C# TextBox 控件限制输入字符为十六进制字符串
  • Java@Data 与 @NotNull 注解冲突问题
  • 火山引擎大模型系列都有什么内容
  • 从认识AI开始-----生成对抗网络(GAN):通过博弈机制,引导生成
  • 博客:基本框架设计(下)
  • 牛市与熊市:市场周期的双面镜
  • 力扣上C语言编程题:最大子数组和(涉及数组)
  • TikTok数据采集软件避坑指南:代理/IP轮换/账号封禁问题一站解决
  • CAMEL中涉及获取 GOOGLE_API_KEY 和 SEARCH_ENGINE_ID 这两个值
  • 【时时三省】(C语言基础)寄存器变量( register变量)和全局变量的存储类别
  • 曼昆《经济学原理》第九版 第十七章寡头垄断
  • (简单介绍)反事实场景counterfactual scenarios
  • 树莓派超全系列教程文档--(63)rpicam-apps可用选项介绍之常用选项
  • 绝缘胶垫怎么选择,耐压、防滑、厚度、质量参数如何选择?
  • [学习] C语言结构体与联合体的对比分析
  • 网络层 IP协议(第一部分)
  • Web前端基础之HTML
  • 通过Docker和内网穿透技术在Linux上搭建远程Logseq笔记系统
  • 对比学习(Contrastive Learning)方法详解
  • Docker Swarm overlay 和 docker_gwbridge
  • 我们来学mysql -- keepalive主从高可用
  • 线 性 数 据 结 构 双 雄:栈 与 队 列 的 原 理、实 现 与 应 用
  • K8S多维度问题排查