网站首页 > 技术文章 正文
Docker是云原生非常核心的组件,也是大厂经常考察的内容,下面我就全面来详解Docker架构@mikechen
本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。
Docker
Docker 是一个开源的容器化平台,允许开发者打包、发布、和运行应用程序、及其依赖的轻量级容器。
如下图所示:
与集装箱相似,Docker 容器提供了一种标准化的封装方式,使得应用程序和其依赖项可以以一种统一的格式打包、和分发。
与集装箱类似, Docker 容器都提供了隔离性,使得它们可以独立运行,互不干扰。
并且,集装箱和 Docker 容器都具有高度的可移植性,可以在不同的环境中轻松地部署和运行。
Docker架构
Docker的架构,如下图所示:
Docker中有两个最重要的设计,分布式是:镜像(Images)、和容器(Containers)。
Docker镜像
Docker 镜像是一个只读的模板,包含了运行应用程序所需的一切:代码、运行时环境、系统工具、库以及依赖项。
而容器,则是在镜像的基础上创建的运行实例,提供了一个独立、可移植的运行环境。
如下图所示:
用户可以使用 docker pull 命令,从 Docker Hub 上拉取镜像到本地主机,也可以使用 docker build 命令根据 Dockerfile 构建自定义镜像。
当拉取到Docker镜像后,用户可以使用 docker run 命令,来创建多个容器实例。
Docker容器
容器则是在镜像的基础上创建的运行实例,提供了一个独立、可移植的运行环境,使得应用程序可以在任何支持 Docker 的平台上运行。
Docker 容器的实现原理,涉及到 Linux 内核的一些特性和容器化技术,主要包括: Linux 命名空间(Namespaces)、Linux 控制组(Cgroups)和联合文件系统(UnionFS)等。
1. Linux 命名空间(Namespaces)
Linux 命名空间是 Linux 内核提供的一种机制,用于隔离系统资源的视图,如:进程、网络、文件系统等。
常见的 Linux 命名空间:PID 命名空间(PID Namespace)、网络命名空间(Network Namespace)、挂载命名空间(Mount Namespace)等。
2、Linux 控制组(Cgroups)
Linux 控制组是 Linux 内核提供的一种机制,用于限制和管理系统资源的使用,如 CPU、内存、磁盘 I/O 等。
常见的包括:
- CPU 控制组:限制容器可以使用的 CPU 时间片、和核心数量;
- 内存控制组:限制容器可以使用的内存量;
- 块 I/O 控制组:限制容器的磁盘 I/O 速度;
- 网络控制组:限制容器的网络带宽和优先级。
3、联合文件系统(UnionFS)
联合文件系统是一种将多个文件系统层叠加在一起的文件系统,使得它们看起来像一个单独的文件系统。
联合文件系统的底层通常是一个只读的基础层,可以是一个操作系统的基础镜像、或者其他的文件系统。
在基础层之上,每个容器都有一个可读写的容器层,这个容器层包含了容器的运行时配置信息、应用程序的变更以及其他临时文件。
当容器对文件系统进行写操作时,这些修改会被记录在容器层中,而不会影响到基础层。
总之,Linux 命名空间、Linux 控制组、和联合文件系统是 Docker 容器化技术的核心组件。
它们共同实现了容器的隔离、资源限制和文件系统管理,使得容器可以实现轻量化、隔离化和可移植化。
本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。
猜你喜欢
- 2024-09-29 Docker实战007:docker仓库使用详解
- 2024-09-29 Docker 简介(docker-it)
- 2024-09-29 Docker Hub 遭入侵,19 万帐号被泄露
- 2024-09-29 K8S系列学习之DockerHub自有镜像库搭建和使用
- 2024-09-29 终于有人把Docker讲清楚了,Docker入门教程,原来这么简单...
- 2024-09-29 Docker镜像管理(docker镜像管理PPT)
- 2024-09-29 Docker从入门到精通:Docker pull命令学习
- 2024-09-29 DockerDockerfile深度解析(dockerfile sh)
- 2024-09-29 docker的镜像和仓库(常用docker镜像仓库)
- 2024-09-29 DockerHub 镜像仓库的使用(docker hub 镜像站点)
- 1509℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 530℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 495℃MySQL service启动脚本浅析(r12笔记第59天)
- 474℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 471℃启用MySQL查询缓存(mysql8.0查询缓存)
- 452℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 431℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 428℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)