(九)Docker的认识

1.初识Docker

1.1.什么是Docker

微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。

  • 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。
  • 在数百上千台服务中重复部署,环境不一定一致,会遇到各种问题

1.1.1.应用部署的环境问题

大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题:

  • 依赖关系复杂,容易出现兼容性问题

  • 开发、测试、生产环境有差异

在这里插入图片描述

例如一个项目中,部署时需要依赖于node.js、Redis、RabbitMQ、MySQL等,这些服务部署时所需要的函数库、依赖项各不相同,甚至会有冲突。给部署带来了极大的困难。

1.1.2.Docker解决依赖兼容问题

Docker为了解决依赖的兼容问题的,采用了两个手段:

  • 将应用的Libs(函数库)、Deps(依赖)、配置与应用一起打包

  • 将每个应用放到一个隔离容器去运行,避免互相干扰

在这里插入图片描述

这样打包好的应用包中,既包含应用本身,也保护应用所需要的Libs、Deps,无需再在操作系统上安装这些,自然就不存在不同应用之间的兼容问题了。

虽然解决了不同应用的兼容问题,但是开发、测试等环境会存在差异,操作系统版本也会有差异。

1.1.3.Docker解决操作系统环境差异

要解决不同操作系统环境差异问题,必须先了解操作系统结构。以一个Ubuntu操作系统为例,结构如下:

在这里插入图片描述

结构包括:

  • 计算机硬件:例如CPU、内存、磁盘等
  • 系统内核:所有Linux发行版的内核都是Linux,例如CentOS、Ubuntu、Fedora等。内核可以与计算机硬件交互,对外提供内核指令,用于操作计算机硬件。
  • 系统应用:操作系统本身提供的应用、函数库。这些函数库是对内核指令的封装,使用更加方便。

应用于计算机交互的流程如下:

1)应用调用操作系统应用(函数库),实现各种功能

2)系统函数库是对内核指令集的封装,会调用内核指令

3)内核指令操作计算机硬件

Ubuntu和CentOS都是基于Linux内核,无非是系统应用不同,提供的函数库有差异:

在这里插入图片描述

此时,如果将一个Ubuntu版本的MySQL应用安装到CentOS系统,MySQL在调用Ubuntu函数库时,会发现找不到或者不匹配,就会报错了:

在这里插入图片描述

Docker如何解决不同系统环境的问题?

  • Docker将用户程序与所需要调用的系统(比如Ubuntu)函数库一起打包
  • Docker运行到不同操作系统时,直接基于打包的函数库,借助于操作系统的Linux内核来运行

如图:

在这里插入图片描述

1.1.4.小结

Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题?

  • Docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植镜像
  • Docker应用运行在容器中,使用沙箱机制,相互隔离

Docker如何解决开发、测试、生产环境有差异的问题?

  • Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行

Docker是一个快速交付应用、运行应用的技术,具备下列优势:

  • 可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统
  • 运行时利用沙箱机制形成隔离容器,各个应用互不干扰
  • 启动、移除都可以通过一行命令完成,方便快捷

1.2.Docker和虚拟机的区别

Docker可以让一个应用在任何操作系统中非常方便的运行。而以前我们接触的虚拟机,也能在一个操作系统中,运行另外一个操作系统,保护系统中的任何应用。

两者有什么差异呢?

虚拟机(virtual machine)是在操作系统中模拟硬件设备,然后运行另一个操作系统,比如在 Windows 系统里面运行 Ubuntu 系统,这样就可以运行任意的Ubuntu应用了。

Docker仅仅是封装函数库,并没有模拟完整的操作系统,如图:
在这里插入图片描述

对比来看:
在这里插入图片描述

小结:

Docker和虚拟机的差异:

  • docker是一个系统进程;虚拟机是在操作系统中的操作系统

  • docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢、性能一般

1.3.Docker架构

1.3.1.镜像和容器

Docker中有几个重要的概念:

镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。

容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器进程做隔离,对外不可见。

一切应用最终都是代码组成,都是硬盘中的一个个的字节形成的文件。只有运行时,才会加载到内存,形成进程。

镜像,就是把一个应用在硬盘上的文件、及其运行环境、部分系统函数库文件一起打包形成的文件包。这个文件包是只读的。

容器呢,就是将这些文件中编写的程序、函数加载到内存中允许,形成进程,只不过要隔离起来。因此一个镜像可以启动多次,形成多个容器进程。

在这里插入图片描述

例如你下载了一个QQ,如果我们将QQ在磁盘上的运行文件及其运行的操作系统依赖打包,形成QQ镜像。然后你可以启动多次,双开、甚至三开QQ。

1.3.2.DockerHub

开源应用程序非常多,打包这些应用往往是重复的劳动。为了避免这些重复劳动,人们就会将自己打包的应用镜像,例如Redis、MySQL镜像放到网络上,共享使用,就像GitHub的代码共享一样。

  • DockerHub:DockerHub是一个官方的Docker镜像的托管平台。这样的平台称为Docker Registry。

  • 国内也有类似于DockerHub 的公开服务,比如 网易云镜像服务、阿里云镜像库等。

我们一方面可以将自己的镜像共享到DockerHub,另一方面也可以从DockerHub拉取镜像:

在这里插入图片描述

1.3.3.Docker架构

我们要使用Docker来操作镜像、容器,就必须要安装Docker。

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

  • 服务端(server):Docker守护进程,负责处理Docker指令,管理镜像、容器等

  • 客户端(client):通过命令或RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令。

如图:

在这里插入图片描述

1.3.4.小结

镜像:

  • 将应用程序及其依赖、环境、配置打包在一起

容器:

  • 镜像运行起来就是容器,一个镜像可以运行多个容器

Docker结构:

  • 服务端:接收命令或远程请求,操作镜像或容器

  • 客户端:发送命令或者请求到Docker服务端

DockerHub:

  • 一个镜像托管的服务器,类似的还有阿里云镜像服务,统称为DockerRegistry

1.4.安装Docker

企业部署一般都是采用Linux操作系统,而其中又数CentOS发行版占比最多,因此我们在CentOS下安装Docker。

参考文章:Docker的安装

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【更新】单细胞联合MR这样筛选靶点|衰老+NK细胞+免疫浸润

今天给大家分享一篇JCR一区,单细胞MR的文章:Unraveling the mechanisms of NK cell dysfunction in aging and Alzheimer’s disease: insights from GWAS and single-cell transcriptomics 标题:揭示NK细胞在衰老和阿尔茨海默病中功能失调的…

Pangolin_FOUND to FALSE so package “Pangolin“ is considered to be NOT FOUND.

修改CMakeLists.txt如下: 在find_package(Eigen3 REQUIRED)后加NO_MUDULE, find_package(Eigen3 REQUIRED NO_MODULE)编译成功:

挖一挖:PostgreSQL Java里的double类型存储到varchar精度丢失问题

前言 大概故事是这样的,PostgreSQL数据库,表结构: create table t1(a varchar);然后使用标准的Java jdbc去插入数据,其基本代码如下: import java.sql.*; public class PgDoubleTest {public static void main(Stri…

Bridge Champ与Ignis公链:探索Web3游戏的新未来

在数字化和去中心化的浪潮中,Web3游戏与公链的融合为游戏行业带来了新的变革。特别是,Bridge Champ和Ignis公链的结合,展示了一种全新的游戏生态模式,不仅为玩家提供了更加公平、透明的游戏体验,同时也为游戏开发和运营…

狐臭的等比数列

题目 #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 const int maxn 1e6 5, inf 1e9, maxm 4e4 5; const int N 1e6;co…

乡村智慧化:数字乡村助力农村可持续发展

目录 一、数字乡村的内涵与特征 二、数字乡村助力农村可持续发展的路径 &#xff08;一&#xff09;提升农业生产效率 &#xff08;二&#xff09;推动农村产业融合发展 &#xff08;三&#xff09;优化乡村治理模式 &#xff08;四&#xff09;促进乡村生态文明建设 三…

基于ssm校园活动管理平台论文

摘 要 使用旧方法对校园活动信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在校园活动信息的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。 这次开发的校园活动管理平…

Python学习笔记-Flask接口创建与测试

服务端: 1.引包 导入 from flask import Flask, request, render_template, redirect Flask: Flask 是一个类&#xff0c;用于创建 Flask web 应用的实例。每个 Flask 应用都从创建这个类的实例开始。示例&#xff1a;app Flask(__name__) request: request 是一个全局对象…

【BlossomConfig】什么是配置中心?以及如何实现一个配置中心?

文章目录 什么是配置中心&#xff1f;如何自己设计一个配置中心&#xff1f; 网关项目源码 RPC项目源码 配置中心项目源码 什么是配置中心&#xff1f; 在单体架构的时候我们可以将配置写在配置文件中&#xff0c;但有⼀个缺点就是每次修改配置都需要重启服务才能生效。 当应用…

MySQL使用技巧,高级Java开发必看

insert into tab(col1,col2…) select … 5、活用正则表达式 regexp ^ $ . * | 6、关联查询比子查询效率快&#xff0c;优先使用join关联查询 7、if(exp,v1,v2) if()函数的使用 exp:表达式 v1:exp为真时返回的值 v2:exp为假时返回的值 8、case when… then… else… en…

D34118电话机免提通话电路应用方案

1、 概述&#xff1a; D34118免提语音通话电路包含了必要的放大器、衰减器、背景噪声检测和控制算法形成高品质的免提通话系统。它包括一个麦克风可调增益放大器、静音控制、发射和接收衰减器&#xff0c;还包括两个线路驱动放大器&#xff0c;可用于形成一个与外部耦合变压器连…

【虚幻引擎】C++ slate全流程开发教程

本套课程介绍了使用我们的虚幻C去开发我们的编辑器&#xff0c;扩展我们的编辑器&#xff0c;设置我们自定义样式&#xff0c;Slate架构设计&#xff0c;自定义我们的编辑器样式&#xff0c;从基础的Slate控件到我们的布局&#xff0c;一步步的讲解我们的的Slate基础知识&#…

Python 人工智能实战|产生式规则推理系统:动物识别系统、智能客服系统

一、动物识别系统 1.1&#xff1a;前言 产生式系统是基于产生式规则的推理系统&#xff0c;它以产生式规则为基础&#xff0c;利用规则匹配的推理机制来进行推断和解决问题。下图是产生式系统的组成&#xff0c;请从“动物识别系统”程序代码中分别找出规则库、综合数据库和推…

Golang | Leetcode Golang题解之第4题寻找两个正序数组的中位数

题目&#xff1a; 题解&#xff1a; func findMedianSortedArrays(nums1 []int, nums2 []int) float64 {if len(nums1) > len(nums2) {return findMedianSortedArrays(nums2, nums1)}m, n : len(nums1), len(nums2)left, right : 0, mmedian1, median2 : 0, 0for left <…

IPD推行成功的核心要素(二)如何选择咨询公司或是自己推行?

大家都知道华为公司在引入了IBM的IPD研发管理体系后&#xff0c;营收不断创新高。随着企业的发展壮大&#xff0c;越来越多的企业发现&#xff0c;在产品管理与开发过程中&#xff0c;出现一些难以解决的困难。这也刺激了相当多一部分公司跟风引入IPD体系。IPD是以市场需求为导…

C++第十四弹---模板初阶

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、泛型编程 2、函数模板 2.1、函数模板的概念 2.2、函数模板的格式 2.3、函数模板的原理 2.4、函数模板的实例化 2.5、模板参数的匹配原则 …

三、强一致性介绍

这里写自定义目录标题 三、强一致性介绍3.1 基本理解3.2 DTP模型3.3 落地协议XA3.4 ⼆阶段提交模型3.5 ⼆阶段提交的问题3.6 navicat操作xa 三、强一致性介绍 3.1 基本理解 相关特点 强⼀致性解决⽅案要求在任何时间点&#xff0c;任何时刻查询&#xff0c;参与全局事务的各个…

B树、B+树、哈夫曼树

目录 1. B树2. B树3. 哈夫曼树 1. B树 特点&#xff1a;一个节点当中可以有多个值&#xff0c;节点内部key 值是有序的&#xff0c;节点内部存储的是key-value类型的数据 磁盘中文件存储用B树。 4阶B树一个节点最多三个key值 5阶B树一个节点最多四个key值 B树有很多的分支&…

抽象类和接口(2)(接口部分)

❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; hellohello~&#xff0c;大家好&#x1f495;&#x1f495;&#xff0c;这里是E绵绵呀✋✋ &#xff0c;如果觉得这篇文章还不错的话还请点赞❤️❤️收藏&#x1f49e; &#x1f49e; 关注&#x1f4a5;&a…

Go的数据结构与实现【Ring Buffer】

介绍 在本文中&#xff0c;我们将用Go实现环形缓冲区&#xff08;Ring Buffer&#xff09; Ring Buffer 环形缓冲区&#xff08;或循环缓冲区&#xff09;是一种有界循环数据结构&#xff0c;用于在两个或多个线程之间缓冲数据。当我们继续写入环形缓冲区时&#xff0c;它会…