【Docker】Docker的优势、与虚拟机技术的区别、三个重要概念和架构及工作原理的详细讲解

news2024/11/26 0:29:59

在这里插入图片描述

前言

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。


📕作者简介:热爱跑步的恒川,致力于C/C++、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。
📗本文收录于恒川的日常汇报系列,大家有兴趣的可以看一看
📘相关专栏C语言初阶、C语言进阶系列等,大家有兴趣的可以看一看
📙Python零基础入门系列,Java入门篇系列正在发展中,喜欢Python、Java的朋友们可以关注一下哦!

Docker的优势、与虚拟机技术的区别、三个重要概念和架构及工作原理详细讲解

  • Docker是什么
  • 1. Docker的优势有哪些
  • 2. Docker的作用
  • 3. Docker的脱颖而出
  • 4. Docker和虚拟机技术的区别
  • 5. Docker容器和虚拟机的区别总结
  • 6. Docker中的三个重要概念
    • 6.1 Image(镜像)一个特殊的文件系统
    • 6.2 Container(容器)镜像运行时的实体
    • 6.3 Repository(仓储)集中存放镜像文件的地方
  • 7. Docker 架构及工作原理
  • 8. 恒川本期书籍推荐

Docker是什么

在这里插入图片描述

Docker 是一个开源的应用容器引擎,基于 Golang 语言开发,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 服务器。容器是一个沙箱机制,相互之间不会有影响(类似于我们手机上运行的 app),并且容器开销是很低的。

Docker 是一个供开发人员和系统管理员构建、运行和与容器共享应用程序的平台。使用容器部署应用程序称为容器化。容器并不是新事物,但它们用于轻松部署应用程序却是新鲜的。
注意:Docker并非是一个通用的容器工具,它依赖于已存在并运行的Linux内核环境。

1. Docker的优势有哪些

  • 灵活性:即使是最复杂的应用程序也可以容器化。
  • 轻量级:容器利用并共享主机内核,使它们在系统资源方面比虚拟机更有效率。
  • 可移植:您可以在本地构建,部署到云上,并在任何地方运行。
  • 松耦合:容器是高度自给自足和封装的,允许您在不影响其他容器的情况下替换或升级其中一个。
  • 可扩展:您可以跨数据中心增加和自动分发容器副本。
  • 安全性:容器对进程应用主动约束和隔离,而不需要用户进行任何配置。

2. Docker的作用

Docker 是一个用于开发、传送和运行应用程序的开放平台。Docker 使您能够将应用程序与基础设施分开,以便您可以快速交付软件。使用 Docker,您可以像管理应用程序一样管理基础设施。通过利用 Docker 的快速交付、测试和部署代码的方法,您可以显着减少编写代码和在生产中运行代码之间的延迟。Docker(opens new window)是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的维护效率,降低了云计算应用开发的成本!使用 Docker,可以让应用的部署、测试和分发都变得前所未有的高效和轻松!无论是应用开发者、运维人员、还是其他信息技术从业人员,都有必要认识和掌握 Docker,节约有限的生命

Docker主要用来解决什么问题?
Docker的出现主要就是为了解决:在我的机器上运行时是正常的,但为什么到你的机器上就运行不正常了
  比如你写一个Web应用,并且本地调试没有任何问题。这时候你想发给你的朋友试试看或者发布部署到远程的云服务器上查看效果,那么首先你需要配置和你本地相同的软件环境,如数据库,Web服务器(IIS,Tomcat,Nginx),必要的插件,库等等。而这你还不能保证的你的软件一定能够运行起来,因为别人可能用完全不同的操作系统,即便是使用Linux每种发行版也会有微小的区别。

为了模拟完全相同的本地开发环境。
我们首先想到的就是虚拟机,但是虚拟机需要模拟硬件,运行整个操作系统不但体积臃肿内存占用高,程序的性能也会受到影响。

3. Docker的脱颖而出

在这里插入图片描述

这时候Dokcer就派上了用场,Docker在概念上与虚拟机非常类似。但是Docker更轻量,它不会去模拟底层的硬件 ,只会为每一个应用提供完全隔离的运行环境。你可以在容器中配置不同的应用环境,并且不用的环境之间互相不影响,这个“环境”在Docker中也被称作为Container(容器)。

4. Docker和虚拟机技术的区别

Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker技术比虚拟机技术更为轻便、快捷。
下面的图片比较了 Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

5. Docker容器和虚拟机的区别总结

在这里插入图片描述

特性docker容器虚拟机
启动秒级分钟级
硬盘使用一般为MB一般为GB
性能接近原生(宿主机)弱于原生
系统支持量单机支持上千个容器一般几十个

6. Docker中的三个重要概念

在这里插入图片描述

Docker中的三个重要概念分别是:Image(镜像),Container(容器),Repository(仓储)。

6.1 Image(镜像)一个特殊的文件系统

你可以把它理解成一个虚拟机的快照(Snapshot),里面包含了你要部署的应用程序以及它所关联的所有库。
  操作系统分为内核和用户空间。对于Linux而言,内核启动后,会挂载root文件系统为其提供用户空间支持。而Docker镜像(Image),就相当于是一个root文件系统。Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。 镜像不包含任何动态数据,其内容在构建之后也不会被改变。

6.2 Container(容器)镜像运行时的实体

这里的容器就像是一台台运行起来的虚拟机,里面运行了你的应用程序,每个容器是独立运行的他们相互之间不影响。通过一个镜像,我们可以创建许多个不同的Container容器。
  镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和类的实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等 。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。前面讲过镜像使用的是分层存储,容器也是如此。容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。

6.3 Repository(仓储)集中存放镜像文件的地方

镜像构建完成后,可以很容易的在当前宿主上运行,但是, 如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务(就像Git仓库一样),Docker Registry就是这样的服务。
  一个Docker Registry中可以包含多个仓库(Repository),每个仓库可以包含多个标签(Tag),每个标签对应一个镜像。所以说:镜像仓库是Docker用来集中存放镜像文件的地方类似于我们之前常用的代码仓库。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本 。我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以latest作为默认标签。

7. Docker 架构及工作原理

在这里插入图片描述

Docker使用客户端-服务器架构。Docker 客户端与 Docker 守护进程通信,后者负责构建、运行和分发Docker容器等繁重的工作。Docker 客户端和守护进程可以运行在同一个系统上,或者您可以将一个 Docker 客户端连接到一个远程 Docker 守护进程。Docker 客户端和守护进程通过 UNIX 套接字或网络接口使用 REST API 进行通信。

8. 恒川本期书籍推荐

恒川赠书活动第六期:

我们世界中的计算机——从大师视角诠释计算常识,做一个穿行于数字世界与现实世界的智者。
普林斯顿计算机公开课

在这里插入图片描述

本书作者布莱恩·W.柯尼汉(Brian W. Kernighan)教授是计算机领域的著名学者和先驱。关于布莱恩教授,人们耳熟能详的一个传奇是,他与C语言的发明者丹尼斯·里奇(Dennis Ritchie)合著的The C Programming Language一书被奉为C程序设计语言的经典之作。之后,许多编程语言教程中的第一个示例都是打印出一句“Hello,World!”,就像在用编程语言这一计算机语言向世界问好,这个示例就是布莱恩教授首创的。布莱恩教授在大名鼎鼎的贝尔实验室工作了30年左右,见证了UNIX这一伟大的操作系统的诞生,并做出了卓越贡献。他还与人合作完成了著名的图划分问题和旅行商问题的算法,也是AWK和AMLP两门编程语言的设计者之一。其中任何一项成就都足以让人倍感荣耀,但布莱恩教授的成就远不止这些。在这之后他任职于普林斯顿大学计算机科学系,并开设了一门名为“我们世界中的计算机”(Computers in Our World)的课程,介绍计算机、通信、互联网、数据等方面的核心知识和其中的隐私、安全等问题。这本书便是这门课程使用的教学材料。

在这里插入图片描述

本书篇幅不大,但对计算机和通信系统如何工作进行了详细和透彻的解释。本书展示了当今的计算和通信世界是如何运作的,从硬件到软件,再到互联网和Web。本书也讨论了新技术带来的社会、政治和法律问题(虽然主要是从美国的角度),由此你可以理解我们所面临的难题,并理解为了解决它们所必须做出的权衡。

参与送书方式

本次活动一共赠书3本,评论区抽取3位小伙伴免费送出!!
参与方式:关注博主、点赞、收藏、评论区评论 “ 计算机公开课我最行 ”(切记要点赞+收藏,否则抽奖无效,每个人最多评论三次!!!)
活动截止时间:2023-06-22 21:00:00
通知方式:私信通知


如果这份博客对大家有帮助,希望各位给恒川一个免费的点赞👍作为鼓励,并评论收藏一下,谢谢大家!!!
制作不易,如果大家有什么疑问或给恒川的意见,欢迎评论区留言。

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

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

相关文章

开利网络赋能祥兴事业集团推动乡村振兴数字化转型

近日&#xff0c;开利网络到访柳州祥兴实业集团&#xff0c;就即将举办的广西文旅大会数字化部署进行跟踪落地。以“祥兴百朋荷苑”为用户端&#xff0c;祥兴集团针对百朋景区实施了全流程的数字化系统构建&#xff0c;包含景区统一收银、景区导览导航讲解及扫码点餐、预约核销…

Winform模拟Visual Studio工具栏拖拉拽、停靠

背景 随着公司接的业务复杂度提高&#xff0c;软件界面设计需求也相应提升&#xff0c;老板不再满足于单面板的各种跳转&#xff0c;所以明白了吧&#xff0c;不提升自己就等于自愿失业或转行&#xff01;&#xff01;&#xff01; 方案 本来想着自学自写一套控件库来实现&a…

抽象类和接口—javaSE

这里写目录标题 1.抽象类1.1概念1.2语法1.3特性1.4使用 2.接口2.1概念2.2语法2.3特性2.4重要的接口2.4.1给数组对象排序&#xff08;Comparable、Comparator&#xff09;2.4.2 Cloneable&#xff08;浅拷贝&#xff09; 2.5抽象类和接口的区别 3.object类3.1定义3.2equals3.3获…

智慧文旅-VR全景展示助力开启景区数字化管理新方式

导语&#xff1a; 在数字化时代&#xff0c;旅游业面临着新的机遇和挑战。 为了吸引更多游客并提供独特的旅行体验&#xff0c;结合VR全景技术和智慧文旅的创新模式已经成为不可忽视的趋势。 一&#xff0e;提升旅游感官体验 VR全景技术正以惊人的速度在旅游业中崭露头角。通过…

【自监督论文阅读 2】MAE

文章目录 一、摘要二、引言2.1 引言部分2.2 本文架构 三、相关工作3.1 Masked language modeling3.2 Autoencoding3.3 Masked image encoding3.4 Self-supervised learning 四、方法4.1 Masking4.2 MAE encoder4.3 MAE decoder4.4 Reconstruction target 五、主要实验5.1 不同m…

【云原生】· 一文了解docker中的网络

目录 &#x1f352;查看docker网络 &#x1f352;bridge网络 &#x1f352;none网络 &#x1f352;host网络 &#x1f352;自定义容器网络 &#x1f990;博客主页&#xff1a;大虾好吃吗的博客 &#x1f990;专栏地址&#xff1a;云原生专栏 根据前面的学习&#xff0c;已经对d…

netty http3功能从零开始

1、windows安装jdk和mvn、gradle、gloovy 配置环境变量JAVA_HOME CLASSPATH MVN_HOME GRADLE_HOME GLOOVY_HOME mvn和gradle都是用来管理和编译java项目的&#xff0c;mvn比较老&#xff0c;现在一般用gradle 2、vscode环境 vscode安装extension&#xff1a;Extension Pack fo…

springboot 日志配置(logback)

概述 Java 中的日志框架主要分为两大类&#xff1a;日志门面和日志实现。 Java 中的日志体系&#xff1a; 日志门面 日志门面定义了一组日志的接口规范&#xff0c;它并不提供底层具体的实现逻辑。Apache Commons Logging 和 Slf4j&#xff08;Simple Logging Facade for Jav…

基于Python垃圾短信识别程序(KNN、逻辑回归、随机森林、决策树和多项式分布朴素贝叶斯、伯努利分布朴素贝叶斯等算法进行融合)—含python工程全源码

目录 前言总体设计系统整体结构图请求流程图系统流程图 运行环境Python 环境jieba分词库Scikit-learn 库nginxphp 模块实现1. 前端模块2. 后端模块 系统测试1. 测试结果2. 结果对比3. 可视化部分 工程源代码下载其它资料下载 前言 本项目以Python为基础&#xff0c;旨在开发一…

http 三次握手 四次挥手

网络参考模型 网络层是端点间的&#xff08;客户端、服务端&#xff09; 链路层是跳跃节点间的。 TCP/IP 下一跳模式&#xff08;网关&#xff09; 内存小&#xff0c;速度快&#xff0c;不可靠。&#xff08;网络号、主机号&#xff09; TCP协议是一种面向连接的、可靠的、基…

Docker部署(4)——运行时日志时间不对(时区设置)

当使用docker run 命令时&#xff0c;发现容器虽然成功运行&#xff0c;但是输出的时间却不对 。使用timedatectl命令后发现Linux系统的时间是正常的时间。 于是将问题缩小到是不是docker 在运行时没有使用宿主机的时区的原因&#xff0c;那么解决办法可以将宿主机的时区映射到…

Maven(二):Maven的使用入门

文章目录 使用入门项目骨架pom.xml构建过程编写测试打包和运行常用打包方式maven-shade-plugin使用filter与artifactSet - 过滤jar包Transformer 参考文献 使用入门 项目骨架 对于一个使用Maven来管理的项目&#xff0c;Maven提倡使用一个目录结构标准&#xff1a; ${basedi…

Selenium+Python+Pycharm自动化环境搭建具体步骤

一、python下载&#xff1a;建议选择3.4以上的版本 官网下载地址&#xff1a; Download Python | Python.org 下载后自行进行安装&#xff0c;安装python需要配置环境变量&#xff0c;安装时可勾选“add python to path”的选项。勾选之后会自动将python添加到系统环境变量Pa…

学习AD的一些记录

1.首先创建一个工程&#xff0c;然后在工程里面创建原理图&#xff0c;PCB&#xff0c;原理图库和PCB库。 并保存。 2.将外部的原理图库&#xff0c;pcb库复制到自己创建的原理图库和pcb库。放到这两个里面。 复制&#xff0c;并粘贴到自己创建的原理图库中。PCB库同理 3.然后…

vue2和vue3的渲染过程简述版

文章目录 vue2渲染过程vue3渲染过程优化和扩充 vue2和vue3对比 vue2渲染过程 在Vue 2的渲染过程中&#xff0c;包括以下几个关键步骤&#xff1a; 解析模板&#xff1a;Vue 2使用基于HTML语法的模板&#xff0c;首先会将模板解析成抽象语法树&#xff08;AST&#xff09;&…

高频前端面试题汇总之代码输出结果篇

前言&#xff1a; 代码输出结果是面试中常考的题目&#xff0c;一段代码中可能涉及到很多的知识点&#xff0c;这就考察到了应聘者的基础能力。在前端面试中&#xff0c;常考的代码输出问题主要涉及到以下知识点&#xff1a;异步编程、事件循环、this指向、作用域、变量提升、…

SolidWorks软件三维建模教程——莫比乌斯环建模案例

SolidWorks是达索系统&#xff08;Dassault Systemes &#xff09;下的子公司&#xff0c;专门负责研发与销售机械设计软件的视窗产品。SOLIDWORKS软件三维建模功能强大&#xff0c;为制造型企业提供SOLIDWORKS一体化解决方案和服务。 今天微辰三维就以莫比乌斯环的三维建模案例…

智慧灯杆云盒是什么?如何挑选智慧云盒?

慧路灯杆云盒&#xff0c;是一种专门用于智慧路灯杆远距通信、远程控制、数据分析、边缘计算的智能终端设备&#xff0c;智慧路灯杆云盒作为联通智慧路灯杆与物联网云平台的桥梁&#xff0c;可以有效提高智慧路灯杆的管理效率、降低维护成本、实现多样化设备联动协同功能&#…

【C++】的多态

目录 1. 多态的概念2. 多态的定义及实现虚函数虚函数的重写虚函数重写的两个例外&#xff1a;C11 override 和 final重载、覆盖(重写)、隐藏(重定义)的对比 3. 抽象类接口继承和实现继承 4. 多态的原理虚函数表 5. 单继承和多继承关系中的虚函数表单继承中的虚函数表多继承中的…