Docker概述
Docker容器概述
Docker是什么
是一种轻量级的“虚拟机”,Docker是一个用于开发,交付和运行应用程序的开放平台。
在Linux容器里运行应用的开源工具(容器引擎),让开发者可以打包大门的应用及依赖包到一个可移植的镜像中,然后发布到任何流行的linux或者window机器中。
Docker的设计宗旨:Build,Ship and Run Any App,Anywhere
即通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”的目的。
这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。
使用docker有什么意义
把容器化技术做成了标准化平台
docker引擎统一了基础设施环境——docker环境
docker引擎统一了程序打包(装箱)方式——docker镜像(把引擎放在镜像中,带着镜像到处跑)
docker引擎统一了程序部署(运行)方式——docke容器(利用引擎把这个镜像再去运行为之前的相同的一模一样的容器了)
Docker的使用场景
①打包应用程序部署简单
②可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦)例如:需要把服务器从腾讯云迁移到阿里云,如果采用的是 Docker 容器技术,整个迁移的过程只需要在新的服务器上启动我们需要的容器就可以了。
③适合做微服务的部署
④适合持续集成和持续交付(CI/CD):开发到测试发布
Docker引擎(Docker Engine)
Docker Engine是具有以下主要组件的客户端-服务器(C/S架构)应用程序:
server端:服务器是一种长期运行的程序,称为守护程序进程( dockerd命令)。
client端:REST API,它指定程序可以用来与守护程序进行通信并指示其操作的接口。
命令行界面(cLI)客户端((docker命令)。
docker run
docker start
docker rm
- 更快速的交付和部署
- 高效的部署和扩容
- 更高的资源利用率
- 更简单的管理
- 镜像(image)
- 容器(container)
- 仓库(repository)
Docker 三要素(核心组件)
Docker images:镜像:统一的封装方式 (模板)
Docker container:容器:统一的运行时环境 (基于镜像,运行状态/运行时状态)
Docker registry:镜像仓库:放置镜像的仓库 (存放镜像模板)
存储镜像的地方,默认在公共的 Docker Hub上查找,可以搞个人仓库。
仓库大类:
①公共仓库docker hub
②私有仓库registry harbor
客户端发起各种各样的命令,给与主机
主机会调用镜像,如果有镜像直接用,运行为容器
如果镜像里没有会到registry公共仓库去拉去镜像,拉到本地后再运行为容器
六大名称空间
namespace资源隔离——用容器技术封装
mount 文件系统,挂载点——>一个文件系统内,不能重复挂载一个指定目录
user 操作进程的用户和用户组
pid 进程编号
uts 主机名和主机域 (同一个环境里不能又叫node1又叫node2)
ipc 信号量、消息队列、共享内存(不同的应用调用内存资源的时候应该使用不同的内存空间)
net(网络资源) 网络设备、网络协议栈(在同一个网络名称空间中的网络规则)、端口等
资源控制——cgroups
六种名称空间是由cgroups管理的
容器特性
特性 运行性能损耗10-20%
灵活:即使是最复杂的应用也可以集装箱化。
轻量级:容器利用并共享主机内核。
可互换:可以即时部署更新和升级。
便携式:可以在本地构建,部署到云,并在任何地方运行。
可扩展:可以增加并自动分发容器副本。
可堆叠:可以垂直和即时堆叠服务。
三、Docker和虚拟化的区别
特性 Docker容器(一个进程控制) 虚拟机虚拟化(完整的操作系统)
启动速度 秒级 分钟级
运行性能 接近原生(直接在内核中运行) 10%-20%左右的损失 50%左右损失(全虚拟化类型)
磁盘占用 50-100MB 3-5G
数量 成百上千,每个进程可控制一个容器 几十个
隔离性 进程级别 操作系统(更彻底,安全级别高)
操作系统 主要支持Linux 几乎所有
封装程度 只封装目标代码和依赖关系,共享宿主机内核 完整的操作系统,与宿主机隔离
四、总结
1、什么是docker?docker原理?
docker是一种封装和运行的开源平台,他统一了封装方式,统一了运行方式,开源平台指的是docker引擎,统一的封装方式指的是镜像,统一的运行方式指的是容器。
cgroup资源控制与namespaces两者构成了docker底层原理
docker是一种容器技术,**把linux中的cgroups(资源管理)和namespace(名称空间)等**容器底层技术进行完美封装,并抽象为用户创建和管理容器的便捷界面(命令行cli、api等),这种C/S架构
2、简述Docker主要使用的技术?
Cgroups:资源控制,管理一些系统资源
Namespace:资源隔离(名称空间)
rootfs:文件系统隔离(使用内核提供的rootfs)
容器引擎(用户态工具) :生命周期控制
docker本质就是宿主机的一个进程, docker是通过namespace(命名空间)实现资源隔离,通过cgroup,实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘50og)
Namespace:资源隔离(名称空间)
mount 文件系统,挂载点——>一个文件系统内,不能重复挂载一个指定目录
user 操作进程的用户和用户组
pid 进程编号
uts 主机名和主机域 (同一个环境里不能又叫node1又叫node2)
ipc 信号量、消息队列、共享内存(不同的应用调用内存资源的时候应该使用不同的内存空间)
net(网络资源) 网络设备、网络协议栈(在同一个网络名称空间中的网络规则)、端口等
3、简述Docker体系架构?
Docker客户端 - Docker
docker客户端则扮演着docker服务端的远程控制器,可以用来控制docker的服务端进程。
Docker服务端-Docker Daemon资源限制
docker服务端是一个服务进程,管理着所有的容器。
Docker镜像一Imagefont>
Docker的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向Docker容器引擎的只读模板。通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码。运行时间,库,环境变量,和配置文件
Docker容器-Docker Container
Docker的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证平台的安全性。
Docker镜像仓库-- Registryfont>
Docker仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到公有仓库(Public)或者私有仓库(Private、常用)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取。
Docker的镜像、容器、日志等内容全部都默认存储在**/var/lib/docker**目录下。
4、Docker有哪些优势?和虚拟化比有什么优势?
docker把容器化技术做成了标准化平台,只要安装了docker引擎,就能使用docker。
使用docker有什么意义(实现了3个统一)
docker引擎统一了基础设施环境-docker环境
docker引擎统一了 程序打包(装箱/封装-类比于集装箱)方式
docker引擎统—了程序部署(运行)方式
实现了一次构建,多次、多处使用。
5.如何把多个目录挂载到同一个目录下?
(存储引擎)overlay2(现在使用) 和 (存储引擎) aufs(早期使用)叠加式文件系统
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~