SpringCloud微服务 【实用篇】| Docker启示录

目录

一:Docker启示录

1. Docker启示录

2. Docker和虚拟机的区别

3. Docker架构

4. Centos7安装Docker

4.1. 卸载

4.2. 安装docker

4.3. 启动docker

4.4. 配置镜像加速


前些天突然发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家,感兴趣的同学可以进行学习人工智能学习

一:Docker启示录

学习完前面的微服务,我们发现一个很麻烦的问题:那就是服务的部署,微服务很多,部署起来很麻烦!今天就学习一下Docker来解决一下这个微服务部署问题

1. Docker启示录

项目部署的问题

大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题: 依赖关系复杂,容易出现兼容性问题; 开发、测试、生产环境有差异!

各种微服务的前端部分依赖于Node、JS,服务端需要数据库MySQL,缓存系统Redis,异步通信MQ等。这些都需要部署到服务器上(Linux操作系统上);每个应用都需要依赖和函数库,但是每个应用的依赖和函数库又有所差异(依赖关系复杂就容易产生兼容)。搞定了开发环境,后面还有测试、生产环境(环境对应的操作系统环境还可能不同:Centos、Ubuntu

Docker怎么解决依赖的兼容问题?

既然每个应用都有自己的依赖和函数库,那么Docker就可以把应用的Libs(函数库)、Deps(依赖)、配置与应用一起打包!并且将每个应用放到一个隔离容器去运行,避免互相干扰

Docker怎么解决不同环境的操作系统?

不同环境的操作系统不同(Linux和Ubuntu的本身函数库不同),Docker如何解决?我们先来了解下操作系统结构:

所有的Linux操作系统都可以分为两层:Linux内核(都是相同的)、系统应用(区别在于上层的应用不同)。内核负责与计算机的硬件进行沟通,提供操作硬件的指令 。系统应用封装内核指令为函数,便于程序员调用;用户程序基于系统函数库实现功能。程序调用函数库---》函数库调用内核指令---》指定调用计算机硬件,从而实现应用的执行。

Ubuntu和CentOS都是基于Linux内核,只是系统应用不同,提供的函数库有所差异;所以根据Ubuntu环境的打包程序,放到Centos上有可能运行不了!

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

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

①Docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植镜像;

②Docker应用运行在容器中,使用沙箱机制,相互隔离 ;

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

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

总结:Docker是一个快速交付应用、运行应用的技术

①可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统 ;

②运行时利用沙箱机制形成隔离容器,各个应用互不干扰 ;

③启动、移除都可以通过一行命令完成,方便快捷;

2. Docker和虚拟机的区别

Docker与虚拟机

Docker实现原理:Docker让一个应用在不同的Linux环境上运行是通过,会把应用及其依赖函数库,甚至于操作系统的函数库也一起打包。这样当应用运行时可以直接调用本地函数库,然后与操作系统的内核进行交互,这样就不需要关心什么样的系统,就可以实现跨系统的运行!(直接调用操作系统的内核,性能比较好

虚拟机实现原理:使用Hypervisor技术在一个操作系统上装另一个操作系统,模拟出计算机的各种的硬件,在模拟的计算机上就可以安装任意的操作系统,然后就可以安装应用、依赖等。在一个系统装另外一个系统,所以当应用执行时应用会以为自己在一个真是的电脑上运行:会去先调用内置的操作系统---》与Hypevisor交互---》把信息传给外部真实的操作系统----》外部操作系统再去调用计算机硬件。(层层传递,性能比较差

, 

两者的对比

 Docker和虚拟机的差异:

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

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

3. Docker架构

镜像和容器

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

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

对于MySQL就是一个镜像,里面含有很多文件组成了MySQL本身,所以可以说镜像就是硬盘中的文件MySQL跑起来的进程就是容器,只不过在Docker里面容器还要做隔离!对于容器不能把自己的东西写到镜像当中(造成镜像污染),可以基于容器创建全新的镜像,镜像都是只读的!对于一个容器怎么写数据呢?容器写数据可以拷贝一份文件到自己独立的容器当中

DockerHub(镜像共享)

 怎么把镜像共享给别人使用呢?这就需要DockerHub(镜像托管)和GitHub很像!

DockerHub:DockerHub是一个Docker镜像的托管平台;这样的平台称为Docker Registry(镜像服务器)。 国内也有类似于DockerHub 的公开服务,比如 网易云镜像服务、阿里云镜像库等。

程序员可以利用Docker提供的命令进行镜像的构建,例如:MySQL、Nginx镜像;然后把这些镜像上传到DockerHub服务器上(会公开比较危险);也可以搭建一个私有云。

Docker架构

怎么利用Docker完成镜像的构建和拉取、运行容器呢?这就需要了解Docker的架构了!

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

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

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

例如: 通过本地构建一个镜像,使用docker build命令,这个命令到达DockerServer以后会被守护进程docker daemon,利用提供的数据构建一个镜像!还可以去DockerRegister使用docker pull命令经过DockerServer端去拉取镜像!然后就可以运行镜像,创建容器,此时就需要docker run命令,它会告诉DockerServer的守护进程docker daemon去完成容器的创建;最终完成部署!

镜像: 将应用程序及其依赖、环境、配置打包在一起(可以看成系统文件);

容器:镜像运行起来就是容器,一个镜像可以运行多个容器(可以看成运行的进程);

总结Docker结构:

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

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

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

4. Centos7安装Docker

企业部署一般都是采用Linux操作系统,而其中又数CentOS发行版占比最多,因此我们在CentOS下安装Docker。Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。

注:Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10,CentOS 7 满足最低内核的要求,所以我们在CentOS 7安装Docker。

4.1. 卸载

如果之前安装过旧版本的Docker,可以使用下面命令卸载:

注:反斜杠\ 表示命令的拼接!

yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \docker-engine \docker-ce

4.2. 安装docker

首先需要大家虚拟机联网,安装yum工具 (下载工具)

yum install -y yum-utils \device-mapper-persistent-data \lvm2 --skip-broken

然后更新本地镜像源(默认是连接国外的,容易断还慢)

# 设置docker镜像源为阿里云
yum-config-manager \--add-repo \https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repoyum makecache fast

安装docker社区版

yum install -y docker-ce

4.3. 启动docker

Docker应用需要用到各种端口,逐一去修改防火墙设置。非常麻烦,因此建议大家直接关闭防火墙!启动docker前,一定要关闭防火墙后!!

# 关闭防火墙
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
# 查看防火墙的状态
systemctl status firewalld

通过命令启动docker

systemctl status docker  # 查看当前docker的状态
systemctl start docker  # 启动docker服务
systemctl stop docker  # 停止docker服务
systemctl restart docker  # 重启docker服务

然后输入命令,可以查看docker版本(启动成功才可以查看到版本号)

docker -v

4.4. 配置镜像加速

docker官方镜像仓库网速较差,我们需要设置国内镜像服务;参考阿里云的镜像加速文档:

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器;在daemon.json中配置阿里云的镜像地址!

# 创建一个路径
sudo mkdir -p /etc/docker
# 把阿里云的地址追加到daemon.json文件
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://6aqbcoj9.mirror.aliyuncs.com"]
}
EOF # 表示终止
# 重新加载上面的文件
sudo systemctl daemon-reload
# 重启docker
sudo systemctl restart docker

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

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

相关文章

Python之random模块详解

python的random模块 random模块是python中一个生成随机数的模块。 random不是python解释器内置的模块。 导入random模块的方法是&#xff1a; import random 如果只使用random模块中的单个方法的话&#xff0c;也可以使用 from random import method_name 例如&#xff1a; …

蓝牙协议栈学习笔记

蓝牙协议栈学习笔记 蓝牙简介 蓝牙工作在全球通用的 2.4GHz ISM&#xff08;即工业、科学、医学&#xff09;频段&#xff0c;使用 IEEE802.11 协议 蓝牙 4.0 是迄今为止第一个蓝牙综合协议规范&#xff0c;将三种规格集成在一起。其中最重要的变化就是 BLE&#xff08;Blue…

【数学建模】《实战数学建模:例题与讲解》第十三讲-相关分析(含Matlab代码)

【数学建模】《实战数学建模&#xff1a;例题与讲解》第十三讲-相关分析&#xff08;含Matlab代码&#xff09; 基本概念典型相关分析综合评价模型对应分析因子分析聚类分析 习题10.41. 题目要求2.解题过程3.程序 习题10.51. 题目要求2.解题过程3.程序 习题10.6&#xff08;1&a…

用Excel绘制柱形图

在需要将数据用柱状图表示的时候&#xff0c;可以用Excel进行绘制。不单绘制柱形图&#xff0c;其他数据图也可以用Excel绘制。 接下来用绘制一个销售表的示例演示。 1.将数据输入Excel 数学书 语文书 英语书 一月 80 94 77 二月 95 86 84 三月 130 93 79 四月 …

实用干货:再见ElementPlus,我有更好的了

大家好&#xff0c;我是大澈&#xff01; 本文约1200字&#xff0c;整篇阅读大约需要3分钟。 感谢关注微信公众号&#xff1a;“程序员大澈”&#xff0c;免费领取"面试大礼包"一份&#xff0c;然后免费加入问答群&#xff0c;从此让解决问题的你不再孤单&#xff…

任务调度系统就该这么设计(万能通用),稳的一批!

今天来扒一扒轻量级的分布式任务调度平台Xxl-Job背后的架构原理 核心概念 这里还是老样子&#xff0c;为了保证文章的完整性和连贯性&#xff0c;方便那些没有使用过的小伙伴更加容易接受文章的内容&#xff0c;快速讲一讲Xxl-Job中的概念和使用 如果你已经使用过了&#xf…

在VS2010上使用C#调用非托管C++生成的DLL文件(图文讲解)

背景 在项目过程中&#xff0c;有时候你需要调用非C#编写的DLL文件&#xff0c;尤其在使用一些第三方通讯组件的时候&#xff0c;通过C#来开发应用软件时&#xff0c;就需要利用DllImport特性进行方法调用。本篇文章将引导你快速理解这个调用的过程。 步骤 1. 创建一个CSharp…

Java 8特性:Lambda表达式、函数式接口与Stream API的深度探索

一、引言 随着编程范式的不断演变&#xff0c;Java语言也在不断地发展和创新。Java 8的发布&#xff0c;为开发者们带来了诸多全新的特性&#xff0c;其中包括Lambda表达式、函数式接口以及Stream API。这些特性使得Java语言的编程更加简洁、优雅&#xff0c;同时也提高了代码…

mybatis多表映射-对多关联

1、建库建表 create database mybatis-example; use mybatis-example; create table t_book (bid varchar(20) primary key,bname varchar(20),stuid varchar(20) ); insert into t_book values(b001,Java,s001); insert into t_book values(b002,Python,s002); insert into …

docker部署go gin框架 Windows环境

目录 文章目的是什么 环境介绍 Windows 环境下 docker 部署 go gin 详细步骤 运行容器时因为挂载文件可能会出现的问题 直接部署gin&#xff08;跳过运行容器时因为挂载文件可能会出现的问题&#xff09; 文章目的是什么 假设我们学习了 go 语言&#xff0c;在 Windows(本…

6.rk3588获取摄像头和激光雷达数据(用线程根据时间同步)

文件夹结构如下&#xff1a; 如果没有特殊说明&#xff0c;我们将py文件写在该路径里面。 保存数据的路径如下&#xff1a; ---img_lidar_save ---2023-12-13&#xff08;根据日期自动生成当天保存数据的文件夹) ---camera_data(相机数据文件夹&#xff09; ---image(保存相加…

[蓝桥杯刷题]合并区间、最长不连续子序列、最长不重复数组长度

前言 ⭐Hello!这里是欧_aita的博客。 ⭐今日语录: 成功的关键在于对目标的持久追求。 ⭐个人主页&#xff1a;欧_aita ψ(._. )>⭐个人专栏&#xff1a; 数据结构与算法 数据库 文章目录 前言合并区间问题&#x1f4d5;现实应用大致思路代码实现代码讲解 最长不连续子序列&a…

jvisualvm手动安装VisualGC插件

前言 笔者近期排查问题需要查看GC的情况&#xff0c;于是用到了jvisualvm这个工具&#xff0c;查阅网上资料发现它有一个名为VisualGC的插件非常好用&#xff0c;于是笔者以此文记录一下VisualGC插件的安装步骤。 安装步骤 下载插件 首先我们要到官网 https://visualvm.gi…

未势能源受邀参加中国氢能100人论坛并发表演讲

12月12日-14日&#xff0c;“2023氢能嘉年华暨中国氢能100人论坛年会”在苏州举办&#xff0c;行业内专家学者、氢能头部企业代表等齐聚现场&#xff0c;聚焦氢能在化工、钢铁、交通等领域发展&#xff0c;共同探讨我国氢能产业初期前进之路。 未势能源液氢总工程师黄欢明受邀…

DevOps搭建(六)-安装Maven详细步骤

1、官网下载 下载地址&#xff1a; Maven – Download Apache Maven 2、上传压缩包到服务器 把下载好的压缩包上传到服务器上。 3、解压压缩包 解压压缩包到安装目录/usr/local/ tar -zxvf apache-maven-3.9.3-bin.tar.gz -C /usr/local/ 切换到/usr/local目录下ls命令看…

基于FPGA的视频接口之高速IO(光纤)

简介 对于高速IO口配置光纤,现在目前大部分开发板都有配置,且也有说明,在此根据自己的工作经验以及对于各开发板的说明归纳 通过高速IO接口,以及硬件配置,可以实现对于光纤的收发功能,由于GTX的速率在500Mbs到10Gbps之间,但通道高速io可配置光纤10G硬件,物理通完成,则…

SpringIOC之Jsr330ScopeMetadataResolver

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

科东软件Intewell操作系统:以“鸿”鹄之志,创未来之“道”

打造自主可控的新型工业操作系统是我国加速新型工业化进程&#xff0c;在新一轮科技革命中实现“换道超车”的重要契机。科东软件期待凭借鸿道Intewell新型工业操作系统的创新与应用&#xff0c;打造100%自主可控的工业网络和工业控制底层技术&#xff0c;为我国新型工业化贡献…

顶级Web应用程序测试工具列表

今天主要列举Web应用程序的工具。 今天的列表仅仅提供索引功能&#xff0c;具体要使用的同学&#xff0c;可以自行搜索哦。 通过web应用程序测试&#xff0c;在web应用程序公开发布之前&#xff0c;会发现网站功能、安全性、可访问性、可用性、兼容性和性能等问题。 Web应用程…

模板方法模式(行为型)

目录 一、前言 二、模板模式 三、带钩子的模板模式 四、总结 一、前言 模板方法模式是一种行为型设计模式&#xff0c;它定义了一个操作中的算法框架&#xff0c;将一些步骤延迟到子类中实现。这种模式是基于“开闭原则”的设计思想&#xff0c;即对扩展开放&#xff0c;对…