Docker--Docker是什么和对Docker的了解

Docker 的本质

Docker的本质是LXC(Linux容器)之类的增强版,它本身不是容器,而是容器的易用工具。

Docker通过虚拟化技术,将代码、依赖项和运行环境打包成一个容器,并利用隔离机制来使得容器之间互相独立、互不影响。

Docker是基于Go语言实现的一个开源项目,其源代码是公开的,社区中的开发者可以共同维护和贡献代码。

Docker的主要组件包括Docker客户端、Docker服务端(也称为Docker daemon或守护进程)、Docker镜像和Docker容器等。

Docker提供了一种轻量级、可移植和自包含的容器化环境,使开发人员能够在不同的计算机上以一致的方式构建、打包和分发应用程序。

Docker和虚拟机的区别

关键Docker虚拟机
资源利用率占用的资源较少,启动时间也更短资源开销较大,启动时间也相对较长
隔离性相对较弱,但它们仍然能够确保应用程序在独立的环境中运行每个虚拟机都有自己独立的操作系统和内核,因此相互之间的影响更小
部署和扩展可移植的,易于部署和扩展拟机的部署和扩展相对复杂
管理和监控可以通过Dockerfile来定义应用程序的构建过程,通过Docker Compose来管理多个容器的部署,以及通过Docker Swarm或Kubernetes等集群管理工具来实现容器集群的管理和监控通过Hypervisor提供的管理工具(如VMware vSphere、Microsoft Hyper-V、KVM等)进行管理;相对于Docker来说,虚拟机的管理和监控更加复杂
应用场景适合用于现代化应用场景,如微服务架构、持续集成和持续部署(CI/CD)流水线以及轻量级应用的部署等合用于传统企业应用、需要高隔离性和多操作系统支持的场景

在这里插入图片描述
docker 有比虚拟机更少的抽象层。
Hypervisor是一种软件或硬件,它能够在物理服务器上创建和管理多个虚拟机(VirtualMachine)。Hypervisor提供了一个抽象层,将物理服务器的资源(如CPU、内存、存储和网络)划分为多个独立的虚拟机。相比之下,docker容器上的程序是直接使用实际物理机的硬件资源,这样就大大加快了容器的启动和运行部署。

Guest OS是指在虚拟机(VM)中运行的操作系统。每个虚拟机都可以独立运行一个Guest OS。
一个操作系统,启动时就必须加载,就跟我们手机开机一样,相比之下,容器像打开一个应用程序一样,能够快速的打开;

Docker 官网

Docker的官方网站提供了丰富的资源和文档,以帮助用户更好地了解和使用Docker技术。
http://www.docker.com

Docker 架构

在这里插入图片描述
Docker架构主要由几个关键组件构成,包括Docker引擎(Docker Engine)、Docker镜像(Docker Image)、Docker容器(Docker Container)、Docker网络(Docker Networking)、Docker存储以及Docker注册表(Docker Registry)。这些组件共同协作,为用户提供了创建、部署和管理容器化应用的能力。

Docker引擎 (Docker Engine)

Docker引擎是Docker架构的核心,它是一个客户端-服务器(C/S)架构的应用程序.
Docker引擎主要由以下三部分组成:

  • Docker守护进程(Docker Daemon):这是Docker引擎的核心部分,负责在后台运行并管理Docker容器的生命周期,包括创建、运行、停止和删除容器。此外,Docker守护进程还负责管理镜像和网络等资源。
  • REST API:Docker通过REST API与外部进行交互。这个API提供了一套标准化的接口,使得其他应用程序能够通过HTTP请求与Docker守护进程进行通信,从而管理容器和相关资源。
  • Docker命令行界面(CLI):这是用户与Docker引擎进行交互的工具。用户可以通过命令行执行各种Docker命令,如docker run、docker build、docker stop等,来控制容器的生命周期。

Docker镜像 (Docker Image)

Docker镜像是用于创建Docker容器的模板,它包含了运行某个应用程序所需的所有依赖项、库和配置文件。镜像采用分层文件系统(UnionFS),这意味着每个镜像都是由多个只读层组成的。这些层代表了镜像在不同时间点的状态,新的改动会被添加到新的层上,而不是修改现有层。

Docker容器 (Docker Container)

Docker容器是基于Docker镜像创建的可运行实例。容器包含了应用程序的代码及其运行时所需的所有依赖项,可以在不同的环境中确保应用的行为一致。与虚拟机相比,Docker容器更加轻量级,占用的资源更少,启动速度更快。此外,Docker容器提供了进程级别的隔离,使得容器内的进程不会直接影响主机系统或其他容器。

Docker网络 (Docker Networking)

Docker网络是容器之间以及容器与外部世界进行通信的基础。Docker支持多种网络模式,包括桥接网络(Bridge)、主机网络(Host)、覆盖网络(Overlay)以及自定义网络等。这些网络模式提供了灵活的通信方式,满足了不同场景下的需求。

Docker存储

Docker容器的数据存储分为两种:容器存储和持久化存储。默认情况下,容器内的数据是临时的,容器删除后数据也随之消失。为了保持数据的持久性,Docker引入了数据卷(Volumes)和绑定挂载(Bind Mounts)两种机制。数据卷是由Docker管理的一种数据存储机制,独立于容器的生命周期;而绑定挂载则允许将主机系统的目录或文件挂载到容器中。

Docker注册表(Docker Registry)

Docker注册表是存储和分发Docker镜像的地方。官方的Docker Hub是最常用的公共注册表,用户可以在上面发布和下载镜像。此外,企业或组织还可以搭建自己的私有Docker注册表,用于存储内部开发的镜像,保障数据的安全性和访问控制。

Docker生态

新时代软件的诉求

软件应能够自动化处理重复性的任务和流程,提高工作效率,减少人为错误。例如,自动化测试、…自动化部署等工具已经成为软件开发和运维的标配。
新时代软件需要具备跨平台运行的能力,能够在不同的操作系统、设备和浏览器上无缝运行,提供一致的用户体验。

  • 业务效率提升:软件应能够帮助企业优化业务流程,提高工作效率,降低运营成本。
  • 数据驱动决策:通过数据分析和挖掘,为企业提供有价值的洞察和决策支持。
  • 客户体验优化:通过软件技术改善客户的互动体验,提供个性化服务,增强客户满意度和忠诚度。

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

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

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

Docker的解决

通过构建Docker镜像,可以确保开发、测试和生产环境的一致性,从而避免因环境差异导致的问题。
Docker镜像包含了应用程序及其所有依赖项,这些依赖项在镜像构建时就被打包在一起。这样,在部署时就不需要再手动安装和配置依赖项,减少了因依赖问题导致的错误。

Docker镜像是一个独立的可执行单元,包含了运行应用程序所需的所有内容。这使得部署变得非常简单,只需将镜像上传到目标主机,并使用Docker命令启动容器即可。
Docker镜像可以在不同的操作系统和硬件平台上运行,只需确保目标主机上安装了Docker引擎。这使得应用程序的部署更加灵活和广泛。

通过版本控制工具(如Git)管理Dockerfile,可以方便地管理应用程序的不同版本。这样,用户可以轻松地回滚到之前的版本,或者在多个版本之间进行切换。
Docker镜像采用分层存储的方式,相同的基础镜像可以被多个容器共享。这不仅节省了磁盘空间和下载时间,还使得镜像的更新和升级更加高效。

Docker的发展趋势

  • 容器云
    随着云计算技术的发展,越来越多的企业开始将容器部署到云端,形成了容器云的概念。
    容器云提供了更加灵活、高效和可扩展的应用部署和管理方式。
  • 服务网格
    服务网格是一种微服务架构下的网络通信技术,它提供了服务间的通信管理、负载均衡、熔断和故障恢复等功能。
    Docker生态中的服务网格解决方案(如Istio)正在逐渐成为微服务架构下的标准配置。
  • 安全增强
    随着容器技术的广泛应用,安全问题也日益凸显。
    Docker生态正在不断加强安全方面的投入,提供了更加完善的身份验证、授权和审计机制,以及安全扫描和漏洞修复功能。
  • 边缘计算和物联网
    Docker生态正在向边缘计算和物联网领域扩展,提供了轻量级、高效和可靠的容器化解决方案。
    这些解决方案能够满足边缘设备和物联网设备对资源限制和实时性的要求。

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

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

相关文章

前端请求后端php接口跨域 cors问题

只需要后端在网站的入口文件 一般都是 index.php 加上 这几行代码就可以了 具体的参数可以根据需要去修改 header("Access-Control-Allow-Origin: *"); header(Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS); header(Access-Control-Allow-Heade…

Wi-Fi背后的工作原理与技术发展历程介绍【无线通信小百科】

1个视频说清楚WIFI:频段/历程/技术参数/常用模块 智能手机拥有率越来越高的今天,大家已经习惯了通过无线网络上网的方式。除了在外面需要用手机流量,我们通常在家里或者机场,商场都可以通过Wi-Fi连接上网。本期文章将为大家介绍Wi…

HTMLCSS: 日落卡片

效果演示 这段代码创建了一个包含日落图像和文本的美观卡片&#xff0c;使用了现代CSS背景模糊和渐变&#xff0c;以及SVG图形来增强视觉效果。 HTML <div class"card"><div class"card__content"><div class"card-details">…

sealos部署K8s,安装docker时master节点突然NotReady

1、集群正常运行中&#xff0c;在集群master-1上安装了dockerharbor&#xff0c;却发现master-1节点NotReady&#xff0c;使用的网络插件为 Cilium #安装docker和harbor&#xff08;docker运行正常&#xff09; rootmaster-1:/etc/apt# apt install docker-ce5:19.03.15~3-0~u…

latex快速入门(附计算机学报latex模板链接

对于一些概念的解释&#xff0c;最后附计算机学报模板 LaTeX入门 什么是latex&#xff08;不标准的理解&#xff0c;但可以快速入门&#xff09;最开始的工作流LaTeX的扩展版本PdfLaTeXXeLaTeX LaTeX编辑器 计算机学报模板 什么是latex&#xff08;不标准的理解&#xff0c;但…

【stablediffusion】ComfyUI | 恐怖如斯的放大模型DifFBIR,超分辨率放大、人脸修复、图像去噪 | 效果炸裂 | 强烈推荐

今天&#xff0c;我们将向您介绍一款令人兴奋的更新——Stable Diffusion的ComfyUI放大模型DifFBIR。这是一款基于Stable Diffusion技术的AI绘画工具&#xff0c;旨在为您提供一键式图像放大的便捷体验。无论您是AI绘画的新手还是专业人士&#xff0c;这个工具都能为您带来极大…

向量数据库PGVECTOR安装

文章目录 前提向量数据库介绍PGVECTOR安装1、pgvector下载2、编译安装3、创建vector扩展 前提 已经安装好了pg14版本。 其他版本也可以。 pg安装教程&#xff1a;https://blog.csdn.net/yushaoyyds/article/details/138855306?spm1001.2014.3001.5502 向量数据库介绍 向量数…

Elasticsearch集群和Kibana部署流程

搭建Elasticsearch集群 1. 进入Elasticsearch官网下载页面&#xff0c;下载Elasticsearch 在如下页面选择Elasticsearch版本&#xff0c;点击download按钮&#xff0c;进入下载页面 右键选择自己操作系统对应的版本&#xff0c;复制下载链接 然后通过wget命令下载Elastics…

Vue3 之 provide 和 inject:组件间通信的神奇利器

provide和inject 1.概述 在 Vue 3 中&#xff0c;provide和inject是用于组件之间进行深层次数据传递的一对组合。它们可以跨越多个组件层级来共享数据&#xff0c;而不需要通过层层传递props的方式。 2.provide 的使用 基本语法&#xff1a;在组件的setup函数或者Compositi…

Spring——容器:IoC

容器&#xff1a;IoC IoC 是 Inversion of Control 的简写&#xff0c;译为“控制反转”&#xff0c;它不是一门技术&#xff0c;而是一种设计思想&#xff0c;是一个重要的面向对象编程法则&#xff0c;能够指导我们如何设计出松耦合、更优良的程序。 Spring 通过 IoC 容器来…

uniapp—android原生插件开发(4uniapp引用aar插件)

本篇文章从实战角度出发&#xff0c;将UniApp集成新大陆PDA设备RFID的全过程分为四部曲&#xff0c;涵盖环境搭建、插件开发、AAR打包、项目引入和功能调试。通过这份教程&#xff0c;轻松应对安卓原生插件开发与打包需求&#xff01; 一、将android程序打包成aar插件包 直接使…

RedisTemplate序列化设置

前言 在使用 Redis 作为缓存数据库时&#xff0c;我们通常会使用 RedisTemplate 来简化与 Redis 进行交互的操作。而其中一个重要的配置项就是序列化设置&#xff0c;它决定了数据在存储到 Redis 中时的格式。本文将介绍如何进行 RedisTemplate 的序列化设置&#xff0c;以及一…

如何优化Elasticsearch的查询性能?

优化Elasticsearch查询性能可以从以下几个方面进行&#xff1a; 合理设计索引和分片&#xff1a; 确保设置合理的分片和副本数&#xff0c;考虑数据量、节点数和集群大小。根据数据量和节点数量调整分片数量&#xff0c;避免使用过多分片&#xff0c;因为每个分片都需要额外的…

ORU——ORAN 无线电单元参考架构

ORU ORU-开放无线电单元ORU 类型O-RU“A类”O-RU“B类” 参考相关文章 ORU-开放无线电单元 ORU&#xff08;开放无线电单元&#xff09;的目的是将天线发送和接收的无线电信号转换为数字信号&#xff0c;该数字信号可通过前传传输到分布式单元&#xff08;DU&#xff09;。考虑…

FFMPEG录屏(22)--- Linux 下基于X11枚举所有显示屏,并获取大小和截图等信息

众人拾柴火焰高&#xff0c;github给个star行不行&#xff1f; open-traa/traa traa is a versatile project aimed at recording anything, anywhere. The primary focus is to provide robust solutions for various recording scenarios, making it a highly adaptable tool…

多线程和线程同步复习

多线程和线程同步复习 进程线程区别创建线程线程退出线程回收全局写法传参写法 线程分离线程同步同步方式 互斥锁互斥锁进行线程同步 死锁读写锁api细说读写锁进行线程同步 条件变量生产者消费者案例问题解答加强版生产者消费者 总结信号量信号量实现生产者消费者同步-->一个…

FlinkPipelineComposer 详解

FlinkPipelineComposer 详解 原文 背景 在flink-cdc 3.0中引入了pipeline机制&#xff0c;提供了除Datastream api/flink sql以外的一种方式定义flink 任务 通过提供一个yaml文件&#xff0c;描述source sink transform等主要信息 由FlinkPipelineComposer解析&#xff0c…

Zustand浅学习

道阻且长&#xff0c;行而不辍&#xff0c;未来可期 之前只是会使用zustand,也没仔细看过zustand的文档&#xff0c;前段时间一个合约朋友问我前端的zustand怎么用&#xff0c;啊&#xff0c;这&#xff0c;是那个笑起来明媚的不像话的帅哥问我问题诶&#xff0c;那我得认真一下…

海量数据迁移:Elasticsearch到OpenSearch的无缝迁移策略与实践

文章目录 一&#xff0e;迁移背景二&#xff0e;迁移分析三&#xff0e;方案制定3.1 使用工具迁移3.2 脚本迁移 四&#xff0e;方案建议 一&#xff0e;迁移背景 目前有两个es集群&#xff0c;版本为5.2.2和7.16.0&#xff0c;总数据量为700T。迁移过程需要不停服务迁移&#…

【贪心算法】贪心算法三

贪心算法三 1.买卖股票的最佳时机2.买卖股票的最佳时机 II3.K 次取反后最大化的数组和4.按身高排序5.优势洗牌&#xff08;田忌赛马&#xff09; 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#…