Docker是什么, 为什么这么火

news2024/12/23 17:07:46

Docker本质

Docker 质其实是 LXC 类的增强版,它本身不是容器,而是容器的易用工具。容器是 linux 内核中的技术,Docker 只是把这种技术在使用上简易普及了。Docker 早期的版本其核心就是 LXC 二次封装发行版。

Docker 为容器技术的一个实现,或者说让容器技术普及开来的最成功的实现。 Docker 基于 Go 实现的一个开源项目,它的主要目标是“BuildShip and Run Any  APP,Anywhere”过对组件的封装、分发、部署、运行等生命周期的 管理,使得用户的应用及其运行环境能够做到封装,到处运行

早期 Docker LXC 容器管理引擎,但是在创建容器时,不再使用模板去安装生 成,而是通过镜像技术(把一个操作系统用户空间所需要使用到的组件事先编排好, 并整体打包成一个文件,image 文件),镜像文件集中放在一个仓库中。当需要创建容 器时,Docker LXC 工具 lxc-create,但不再通过 lxc 的模板去安装,而是连接 到镜像服务器上下载匹配的镜像文件,而后基于镜像启动容器。所以,Docker 极大的 简化了容器的使用难度。以后我们创建启动容器,只需要一个命令, docker-rundocker-stop 就可以启动停止一个容器了。

Docker 的引擎迭代

Docker 期是基于 LXC 器管理引擎实现,当后来成熟之后,Docker 建了一个容 器引擎叫 libcontainer后来 CNCF 的介入,Docker 研发了一个工业化标准的容器 引擎 runC前所使用的新版 Docker使用的容器引擎就是 RunC

Docker 和虚拟机的区别

传统虚拟机

Docker

磁盘

占用

几个 GB 到几十个 GB 左右

几十 MB 到几百 MB

CPU

内存

占用

虚拟操作系统非常占用 CPU 内存,需要通 过虚拟层调用占用率高

Docker 擎占用资源极低,直接作用于硬件资源 占用少

启动

速度

(从开机到运行项目) 几分钟

(从开启容器到运行项目)几秒

安装

管理

需要专门的运维技术

安装、管理方便

应用

部署

手动部署,速度慢

体系化部署,可以自动化,速度快

隔离

系统级别

进程级别

封装

程度

打包整个操作系统

打包项目代码和依赖信息

Docker 为什么比虚拟机资源利用率高,启动快

docker 有比虚拟机更少的抽象层。docker Hypervisor 硬件资源虚拟化,运 行在 docker 容器上的程序直接使用的是实际物理机的硬件资源。因此在 cpu、内存利 用率上 docker 在效率上有明显的优势。docker 利用的是宿主机的内核,而不需要 Guest OS,节省了 Guest OS 用的资源。

docker 不需要 Guest OS创建一个容器时,不需要和虚拟机一样重新加载一个操作 系统内核。从而避免引寻、加载操作系统内核返回时耗时耗资源的过程,当新建一个 虚拟机时,虚拟机软件需要加载 Guest OS,返回新建过程是分钟级别的。而新建一个 docker 容器只需要几秒钟。

Docker JVM 的区别?

JVM

Docker

性能

Jvm 需要占用一定的的 CPU 内存

基本没有损失

虚拟

层面

基于 JVM 机,更加上 层

基于操作系统,更加通用

代码

无关

一个特定代码的执行平台, 它是运行时才存在的,只能 支撑特定代码的执行,并且 必须是在 jvm

模拟了一整个操作系统,它是静态存在的, 可以支撑任何相同平台的应用程序

主机

隔离

jvm 隔离主机

通过命名空间实现隔离

Docker

Docker 展过程中衍生了以下版本,目前我们学习和使用提到的版本是 docker-celxc中提到,lxc 最早的 linux 器技术,早期版本的 docker 直接使用 lxc 来实

现容器的底层功能。虽然使用者相对较少,但 lxc 目仍在持续开发演进中。 libcontainerdocker 0.9 版本开始自行开发了 libcontainer 模块来作为 lxc 替代

品实现容器底层特性,并在 1.10 版本彻底去除了 lxc1.11 本拆分出 runc 后, libcontainer 也随之成为了 runc 的核心功能模块,runc 成了容器标准。

mobymoby docker 司发起的开源项目,其中最主要的部分就是同名组件 moby, 事实上这个 moby 就是 dockerd 前使用的开源项目名称,docker 项目中的 engine dockerd)仓库现在就是从 moby 仓库 fork ,使用 containerd 运行时标 准。Moby

docker-cedocker 的开源版本,CE Community Editiondocker-ce 的组件来 自于 mobycontainerd 等其他项目。Pricing | Docker

docker-eedocker 的收费版本,EE Enterprise Edition。其基础组件来源和 docker-ce 是一样的,但附加了一些其他的组件和功能。

Pricing | Docker

Docker

docker 官网

Docker: Accelerated Container Application Development

Docker架构

Docker 使用客户端- (C/S) 架构模式,使用远程 API 来管理和创建 Docker Docker 器通过 Docker 创建。

• Docker 仓库(Registry)

Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub 供了庞大的镜像集合供使用。

• Docker daemon

Docker daemon 是服务器组件,是 Docker 最核心的后台进程,我们也把它称为守护进程。

• Docker 客户端(Client)

Docker 客户端通过命令行或者其他工具使用 Docker API Docker 的守进程通信。

• Docker 主机(Host)

一个物理或者虚拟的机器用于执行 Docker 护进程和容器。

• Docker 镜像(Images)

Docker 镜像是用于创建 Docker 器的模板。

• Docker 容器(Container)

容器是独立运行的一个或一组应用。

上面概念比较难以理解,我们列举个生活中的案例,以一家人去旅游入住酒店为例。

 

我们一家人和朋友一块旅游去酒店,我们就是 Docker Client

到酒店办理入住,办理退房,缴费需要酒店前台提供各种服务,酒店前台就是我们的 Docker DaemonDocker 的核心服务端

酒店是建在美丽的海边,酒店的宅基地和大楼就是我们实际的物理服务器或者虚拟服 务器,也就是 Docker Host

 

酒店就 1000 多个房间,每个房间里面不一样,有标间、大床房、家庭房等,这就是 Docker 像仓库

酒店的标准的房间豪华大床房和双人标间,这个就是 Docker 镜像,我们客户是没有办 法修改的。

我们办理完入住了一个豪华大床房, 然后把行李 , 个人物品带到了一个具体的房间号, 比如 9527,那么这个房间我们可以使用了,朋友也开了一间豪华大床房,虽然豪华大 床房一样,当时我们携带的物品,我们的洗漱时间,睡觉时间都不一样,这个就是容器 Docker Container

容器的销毁,也就是我们一周后旅游结束了,搬出了酒店,酒店把我们的房间恢复了 镜像原来的样子。

Docker

 

我们来考虑 2 个问题,Docker 为什么要设计镜像,然后又搭建个 Docker Hub,搞个 镜像仓库呢?

我们来看下现在的时代发生了什么

数据量疯狂增长:

随 着 物联 网、 边缘 计算 等 智 能终 端设 备不 断普 及 , 受 到 来自 物联 网设 备 信 号 、 元数 据、 娱乐相关数据、云计算和边缘计算的数据增长的驱动,全球数据量呈现加速增长。根 据 IDC 布的《数据时代 2025预测,全球数据量将从 2018 年的 33ZB 增至 2025 年的 175ZB超过 5 中国平均增速快于全球 3%,预计到 2025 年将增至 48.6ZB占全球数据圈的比例由 23.4% 27.8%其中,中国企业级数据量将从 2015 年占中国数据量的 49%增长到 2025 年的 69

处理能力快速增加:

腾讯云全球服务器数量 100w+数据量 EB+2020 里云:在全国已建成 5 超 级数据中心,阿里云在全球 22 个地域部署了上百个数据中心,服务器的总规模数已经 接近 200 万台。

某省疾控中心疫苗预约系统、全员核酸检测系统、健康码系统共 300 务器,并 为核酸检测系统快速扩容计算和存储资源。

软件需求爆发式增长:

• 软件发布频繁

1研发模式从瀑布开发演变为敏捷开发,原来 3 月上一次新功能,现在两周一次, 而开发过程中我们也经常遇到需要修改需求,然后变更再发布的情况。

2软件上线有问题需要快速回滚,对软件有着极强的版本管理和回滚诉求。

• 软件需要共享

软件的研发人员、研发公司在设计、研发好一款软件的时候,如何方便的共享给他人,而又能快速的使用起来。

• 环境搭建复杂,技术种类繁多

每个项目组使用的语言不一样,需要不同的环境,每个都得搞一套。每次都要从 yum 开始一个个完成部署安装,每次都有各种奇怪的问题,运维成本很高。

Docker 解决方案

云时代需要我们针对这些诉求有一套针对的解决方案。

• 我们要处理海量的数据,如何处理呢?

购买大量的服务器,并研发对应软件

• 开发的需求需要频繁的变更上线,如何才能将修改的代码快速的分发到几百或者几千台服务器呢?如何共享软件呢?

搞一个中心仓库,让各个服务器去下载软件包,安装,所以 CentOS 搞了 yum 仓库, docker 设计了镜像仓库,docker hub 是公共的托管仓库。

• 软件设计好以后,怎么快速安装启动,有问题回滚呢?

将 docker 需要的所有信息设计一套软件格式,把所有的依赖搞进去,并打上版本标签, 这样不会换一个服务器各种问题,所以 Docker 设计了镜像。

• 不同的开发环境怎么搭建呢,一会 java,一会 c++?

docker 设计了镜像来应对,镜像里面存放了需要运行的环境,就像我们的 iPhone ios我们的华为 mate 50 内置鸿蒙一样,一条命令就可以完成某个环境的搭建。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/891532.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LLM 回答更加准确的秘密:为检索增强生成(RAG)添加引用源

如何让你的大模型变得更强?如何确定其获取信息来源的准确性? 想要回答这两个问题,就不得不提到今天文章的主角——RAG。RAG,也就是检索增强生成(Retrieval-augmented generation) ,可以弥补现有 LLM 应用能…

WPF CommunityToolkit.Mvvm

文章目录 前言ToolkitNuget安装简单使用SetProperty,通知更新RealyCommandCanExecute 新功能,代码生成器ObservablePropertyNotifyCanExecuteChangedForRelayCommand其他功能对应关系 NotifyPropertyChangedFor 前言 CommunityToolkit.Mvvm(…

“去哪儿旅行”Java工程师内推资格——直入笔试,圆你大厂梦,放心啦,来源可靠,给你的梦想提提速!

岗位信息 Java开发工程师(2024) 所在地:北京市海淀区 工作职责: 按照需求,负责技术平台或业务支持系统的设计、维护,以及代码开发工作; 根据开发规范编写各种开发文档及项目文档; 协助需求方进行技术调研; 不断提高产品的代码质量,参与…

详解C#-static void Main(string[] args)

目录 简介: 举例: 输出结果:​编辑 总结: 简介: 在C#中static void Main(string[] args)这个句话有什么作用,分别代表什么意思!! 这句话是入口函数的声明,指定了C#程序的入口点,并定义了一个名为”Mai…

虹科分享 | 温度边缘效应对冻干成品含水量的影响(上)——原理和现象

01 冻干流程简介 生物制药成品的冻干过程通常包括以下三个步骤: 预冻(Freezing) 在冻干过程中,首先需要将生物制药成品冷冻至非常低的温度,通常在-40℃至-80℃之间。这有助于将水分转变为冰晶,减少冻干过…

低成本高收益,五金店小程序的秘密武器

如今,随着移动互联网的快速发展,小程序成为了许多企业进行线上业务拓展的重要方式之一。对于那些不懂代码的人来说,制作一个小程序可能会让人觉得困难重重。但是,现在,借助乔拓云平台,不懂代码的人也能轻松…

BUUCTF [安洵杯 2019]easy_serialize_php 1 详细讲解

题目来自buuctf&#xff0c;这是一题关于php序列化逃逸的题 1. 题目 题目给出的代码 <?php$function $_GET[f];function filter($img){$filter_arr array(php,flag,php5,php4,fl1g);$filter /.implode(|,$filter_arr)./i;return preg_replace($filter,,$img); }if($_S…

JVM——类文件结构

文章目录 一 概述二 Class 文件结构总结2.1 魔数2.2 Class 文件版本2.3 常量池2.4 访问标志2.5 当前类索引,父类索引与接口索引集合2.6 字段表集合2.7 方法表集合2.8 属性表集合 一 概述 在 Java 中&#xff0c;JVM 可以理解的代码就叫做字节码&#xff08;即扩展名为 .class …

File 类的用法, InputStream和Reader, OutputStream和Writer 的用法

前言 普通的文件长这样&#xff1a; 其实目录也是一种特殊文件&#xff1a; 一、文件前缀知识 &#xff08;一&#xff09;绝对路径和相对路径 以盘符开头的的路径&#xff0c;叫做绝对路径&#xff0c;如&#xff1a;D:\360Downloads\cat.jpg 以.或..开头的路径&#xff0c…

iOS UIAlertController控件

ios 9 以后 UIAlertController取代UIAlertView和UIActionSheet UIAlertControllerStyleAlert和UIAlertControllerStyleActionSheet。 在UIAlertController中添加按钮和关联输入框 UIAlertAction共有三种类型&#xff0c;默认&#xff08;UIAlertActionStyleDefault&#xff0…

网络通信原理计算IP地址都网络号 主机范围 可用个数(第四十四课)

计算192.168.1.1的网络号ID IP 地址中计算=⇒网络ID计算:默认网络位不变 注解位全0 一 IP地址的网络ID 方法一 192.168.1.1 为例 IP地址的网络号ID 11000000.10101000.00000001.00000001 1111111.11111111.11111111.00000000 逻辑与运算 (二进制) = 192.168.1.0 (十进制) …

Crimson:高性能,高扩展的新一代 Ceph OSD

背景 随着物理硬件的不断发展&#xff0c;存储软件所使用的硬件的情况也一直在不断变化。 一方面&#xff0c;内存和 IO 技术一直在快速发展&#xff0c;硬件的性能在极速增加。在最初设计 Ceph 的时候&#xff0c;通常情况下&#xff0c;Ceph 都是被部署到机械硬盘上&#x…

React 全栈体系(二)

第二章 React面向组件编程 一、基本理解和使用 1. 使用React开发者工具调试 2. 效果 2.1 函数式组件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>1_函数式组件</title> </head> &l…

mac垃圾清理软件有哪些

随着使用时间的增加&#xff0c;mac系统会产生一些垃圾文件&#xff0c;影响系统的性能和稳定性。为了保持mac系统的高效&#xff0c;用户需要定期使用mac垃圾清理软件来清理系统缓存、日志、语言包等无用文件。CleanMyMac是一款功能强大的mac垃圾清理软件&#xff0c;它可以帮…

Allegro单位显示设置【mil/mm】

Allegro单位显示设置【mil/mm】 SetupUser PreferencesDisplayElementshowmeasure_altunits选择millimeters即可。 测量命令下就同时显示两个单位了

侯捷 八部曲 C++面向对象高级开发(上)+(下)【C++学习笔记】 超详细 万字笔记总结 笔记合集

文章目录 Ⅰ C part1 面向对象编程1 头文件与类的声明1.1 c vs cpp关于数据和函数1.2 头文件与类1.2.1 头文件1.2.2 class的声明1.2.3 模板初识 2 构造函数2.1 inline 函数2.2 访问级别2.3 ctor 构造函数2.3.1 ctor 的写法2.3.2 ctor/函数 重载2.3.3 ctor 放在 private 区 2.4 …

计算机竞赛 python图像检索系统设计与实现

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; python图像检索系统设计与实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 该项目较为新颖&#xff0c…

Hands on RL 之 Off-policy Maximum Entropy Actor-Critic (SAC)

Hands on RL 之 Off-policy Maximum Entropy Actor-Critic (SAC) 文章目录 Hands on RL 之 Off-policy Maximum Entropy Actor-Critic (SAC)1. 理论基础1.1 Maximum Entropy Reinforcement Learning, MERL1.2 Soft Policy Evaluation and Soft Policy Improvement in SAC1.3 Tw…

【Java高级开发高频面试题】面试者角度的口述版

文章目录 1.具备扎实的Java基础集合HashMap底层工作原理HashMap版本问题HashMap并发修改异常HashMap影响HashMap性能的因素HashMap使用优化 SynchronizedThreadLocalAQS线程池JVM内存模型类加载机制与双亲委派垃圾回收算法、垃圾回收器、空间分配担保策略引用计数器算法、可达性…

小白到运维工程师自学之路 第七十七集 (基于Prometheus监控Kubernetes集群)

一、Prometheus简介 Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)&#xff1b;Prometheus使用Go语言开发&#xff0c;是Google BorgMon监控系统的开源版本&#xff1b;2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Found…