【云原生】微服务学习笔记四:从系统层面认识Docker

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 【云原生】微服务学习笔记四:从系统层面认识Docker

一:🧸问题引入

  在进行项目部署时候,一般都会将项目部署在Linux上,但是我们项目中不同的应用会有不同的依赖,比如Node.js、RabbitMQ和MySql之间需要的依赖是不同的(见下图),就算有的依赖相同但是版本不同也会带来困扰,如此复杂的关系会使得项目部署十分困难,很容易产生兼容性问题,就算把这些问题解决了,还有测试环境、生产环境的差异也还需要进一步处理。而且还有可能这些环境的操作系统版本可能是不同的,比如一个是Ubuntu一个是Centos也会产生很多兼容性问题。

  既然每个应用所需要的依赖不同,那么我们在进行打包时候将每个应用所需要的依赖、函数库等也一并打包不就行了吗?Docker就是通过这样的方法来解决不同应用之间不同依赖的问题的的。

二:🧸如何解决不同操作系统间的问题

1.兼容性问题

  前面说了Dcker会将每个应用所需要的依赖、函数库等一起打包然后进行发送,并且将每个应用都单独放到一个隔离的容器中去运行,避免相互干扰。那么这仅仅是限于在同一个操作系统上面运行,因为我们打包时候是基于某个操作系统进行打包的,比如我们在Ubuntu上进行打包,将项目部署到Centos就不能运行了,不同的操作系统之间会带来兼容性问题。要想了解Docker是如何做到跨系统运行的,这就需要我们了解一下不同的操作系统之间有什么区别。

2.认识不同操作系统

这里以Ubuntu系统为例进行讲解(见下图)

  其实所有的Linux操作系统都可以分成两层,一层是大家共有的操作系统内核,一层是每个操作系统特有的系统应用,当然每个操作系统的底层都脱离不了硬件的支持。内核是负责与计算机硬件打交道的,其提供操作硬件的指令,但是这些指令一般比较简陋,如果要基于这些指令进行开发会很复杂。所以我们就需要系统应用来帮我们简化这些指令,系统应用负责将内核指令封装成函数,以便于程序员进行调用。因此完整的调用流程为程序员调用函数库里面的函数,函数调用内核中的指令,指令负责与计算机硬件打交道。

  因为每个操作系统的系统应用是不同的,因此就会有不同的函数库,把一个在Ubuntu系统上开发好的项目放到Centos系统上面进行运行,假如项目中用到了Ubuntu系统特有的函数库,那么这时候在Centos上面显然是运行不了的。

3.Docker如何解决这一问题

  既然不同的操作系统之间的函数库是不同的,那么我们在打包时候将程序与所需要调用的系统(比如Ubuntu)函数库一起打包不就行了吗?Docker就是这么干的,当Docker运行到不同的操作系统时,直接基于打包的库函数,借助于操作系统的Linux内核来运行。

三:🧸Docker简介

  Docker是一个快速交付应用、运行应用的技术,其允许开发中将应用、依赖、函数库、配置一起打包,形成可移植的镜像,可以迁移到任意Linux操作系统;不同的应用之间运行时利用沙箱机制形成隔离容器,使得他们之间互不干扰;且Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,每个不同的Linux操作系统都有相同的Linux内核,因此打包好的项目可以在任意Linux操作系统上面运行。

四:🧸Docker与虚拟机的区别

  相信很多人都用过虚拟机,而且你是否会想过虚拟机也能解决上面因操作系统不同而带来的冲突。没错,虚拟机确实能解决上面提到的问题,因为虚拟机是安装在一个操作系统上面的,其结构可以见下图:

  那么虚拟机是如何做到在一个操作系统上面安装别的操作系统呢?其原因是在虚拟操作系统和底层操作系统之间采用了一种叫Hypervisor的技术,这种技术可以模拟出不同操作系统所需要的硬件,比如CPU、内存等。由于虚拟机是在一个操作系统里安装了另外的操作系统,因此采用虚拟机进行部署时候每个应用就相当于在一台真实的计算机上面运行,它会先调用其内部的操作系统,而该内置操作系统会通过Hypervisor与外部操作系统进行交互,可以看到经过了重重关卡,自然运行速率就会低下,而且我们都知道安装虚拟机是需要很大空间的,因此通过虚拟机作为服务器显然是不合实际的。

  而Docker则是直接与操作系统内核打交道的,其性能会比虚拟机好很多,而且Docker封装的只是一些函数库、依赖等等,因此其硬盘占用一般只有几兆到几百兆,与虚拟机的几GB相比会好很多。此外,Docker的启动时间是秒级的,而虚拟机由于还要进行开机,所以其启动时间是分钟级的。

五:🧸Docker架构

1.镜像&容器

前面提到的内容中,主要的两个点还是镜像和容器,那么什么是镜像什么是容器呢?

  • 镜像(images):Docker将应用程序及其所需要的依赖、函数库、环境、配置文件等进行打包,称为镜像。
  • 容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见。

  要注意的是,镜像是只读的,因为假如能对镜像进行写操作会造成镜像污染。就拿MySql来说,镜像里面包含data、logs、bin、lib等文件,由于镜像是只读的,所以当程序要运行时候就需要拷贝一份到自己的容器里面,当需要写数据时候就只能在自己的空间里面写数据和日志等,不能在其他地方进行操作。

2.DockerHub

  假如我们需要将镜像进行共享,那么就可以通过DockerHub来实现,DockerHub是一个Docker镜像托管平台,这样的平台称为Docker Registry,类似于GitHub,只不过GitHub是用来共享代码的,DockerHub是用来共享镜像的。

3.Docker架构总结

Docker是一个CS架构的程序,由两部分组成

  • 服务端(server):Docker守护进程,负责处理Docker指令,管理镜像、容器等。
  • 客户端(client):通过命令或RestAPI向Docker服务端发送指令。可以在本地或者远程向服务端发送指令
相关文章
|
24天前
|
运维 Cloud Native 虚拟化
一文吃透云原生 Docker 容器,建议收藏!
本文深入解析云原生Docker容器技术,涵盖容器与Docker的概念、优势、架构设计及应用场景等,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
一文吃透云原生 Docker 容器,建议收藏!
|
6天前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
16天前
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
30 3
|
24天前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
26天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
2天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
51 5
|
11天前
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
31 3
|
13天前
|
Kubernetes Cloud Native 开发者
云原生入门:从容器到微服务
本文将带你走进云原生的世界,从容器技术开始,逐步深入到微服务架构。我们将通过实际代码示例,展示如何利用云原生技术构建和部署应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和启示。
|
15天前
|
消息中间件 运维 Cloud Native
云原生架构下的微服务优化策略####
本文深入探讨了云原生环境下微服务架构的优化路径,针对服务拆分、通信效率、资源管理及自动化运维等核心环节提出了具体的优化策略。通过案例分析与最佳实践分享,旨在为开发者提供一套系统性的解决方案,以应对日益复杂的业务需求和快速变化的技术挑战,助力企业在云端实现更高效、更稳定的服务部署与运营。 ####
|
23天前
|
Cloud Native 安全 API
云原生架构下的微服务治理策略与实践####
—透过云原生的棱镜,探索微服务架构下的挑战与应对之道 本文旨在探讨云原生环境下,微服务架构所面临的关键挑战及有效的治理策略。随着云计算技术的深入发展,越来越多的企业选择采用云原生架构来构建和部署其应用程序,以期获得更高的灵活性、可扩展性和效率。然而,微服务架构的复杂性也带来了服务发现、负载均衡、故障恢复等一系列治理难题。本文将深入分析这些问题,并提出一套基于云原生技术栈的微服务治理框架,包括服务网格的应用、API网关的集成、以及动态配置管理等关键方面,旨在为企业实现高效、稳定的微服务架构提供参考路径。 ####
43 5