目录
一、技术架构的演进之路
1、单机架构

2、应用数据分离架构

3、应用服务集群架构

1、nginx是用来做负载均衡的,可以把它理解为应用层之上,它的上限是5万并发
2、如果nginx再处理不了就在之上再加一层,把它交到它的上层LVS/F5,百万级并发
3、如果还不行就再加,DNS
4、如果还不行就把数据交给上一层(浏览器)
4、读写分离/主从分离架构

5、引用缓存------冷热分离架构

6、垂直分库架构

7、微服务架构

8、容器编排架构

二、docker简介
1、物理机
物理机:实际的服务器或者计算机。相对于虚拟机而言的对实体计算机的称呼。物理机提供给虚拟机以硬件环境,有时也称为"寄主"或"宿主"。
2、虚拟化
是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
3、容器化
容器化是一种虚拟化技术,又称操作系统层虚拟化。这种技术将操作系统内核虚拟化,可以允许用户空间软件实例被分割成几个独立的单元,在内核中运行,而不是只有一个单一实例运行。这个软件实例,也被称为是一个容器(containers)。对每个实例的拥有者与用户来说,他们使用的服务器程序,看起来就像是自己专用的。容器技术是虚拟化的一种。docker是现今容器技术的事实标准。
三、容器化虚拟化的必要性
虚拟化和容器化的最主要目的就是资源隔离,随着资源隔离的实现逐渐也带来了更大的收益。
1、资源利用率高
将利用率较低的服务器资源进行整合,用更少硬件资源运行更多业务,降低IT支出和运维管理成本。
2、环境标准化
一次构建,随处执行。实现执行环境的标准化发布,部署和运维。开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些bug并未在开发过程中被发现。而Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现"这段代码在我机器上没问题啊"这类问题。
3、资源弹性伸缩
根据业务情况,动态调整计算、存储、网络等硬件及软件资源。比如遇到双11了,把服务扩容100个,双11过去了,把扩容的100个收回去。
4、差异化环境提供
同时提供多套差异化的执行环境,限制环境使用资源。
比如我的服务一个以来Ubuntu操作系统,一个服务依赖CentOS操作系统,但是没有预算购买两个物理机,这个时候容器化就能很好的提供多种不同的环境。
5、沙箱安全
为避免不安全或不稳定软件对系统安全性、稳定性造成影响,可使用虚拟化技术构建虚拟执行环境。比如我在容器里面执行rm-rf/*不会把整个服务器搞死,也不影响其他人部署的程序使用。
6、容器对比虚拟机更轻量,启动服务更快
7、维护和拓展交易
Docker使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker团队同各个开源项目团队一起维护了一大批高质量的官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。比如dockerhub提供了很多镜像,各个系统的一个命令就可以拿到了,研发也可以自己定制镜像分享给各个产品。
四、docker和虚拟机的区别
|---------|-----------------------------------|-------------------------------|
| | 传统虚拟机 | docker容器 |
| 磁盘占用 | 几个 GB 到几十个 GB 左右 | 几十 MB 到几百 MB 左右 |
| CPU内存占用 | 虚拟操作系统非常占用 CPU 和内存,需要通 过虚拟层调用占用率高 | Docker 引擎占用资源极低,直接作用于硬件资源 占用少 |
| 启动速度 | (从开机到运行项目) 几分钟 | (从开启容器到运行项目)几秒 |
| 安装管理 | 需要专门的运维技术 | 安装、管理方便 |
| 应用部署 | 系统级别 | 进程级别 |
| 封装程度 | 打包整个操作系统 | 打包项目代码和依赖信息 |
五、docker为什么比虚拟机资源利用率高,启动快

**docker有比虚拟机更少的抽象层。**docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的是实际物理机的硬件资源。因此在cpu、内存利用率上docker将会在效率上有明显的优势。docker利用的是宿主机的内核,而不需要Guest OS,节省了Guest Os占用的资源。
**docker不需要GuestOS。**创建一个容器时,不需要和虚拟机一样重新加载一个操作系统内核。从而避免引寻,加载操作系统内核返回时耗时耗资源的过程,当新建一个虚拟机时,虚拟机软件需要加载GuestOS,返回新建过程是分钟级别的。而新建一个docker容器只需要几秒钟。
六、docker和JVM虚拟化的区别
|-------|-----------------------------------------------------|-------------------------------------|
| | JVM | Docker容器 |
| 性能 | Jvm 需要占用一定的CPU 和内存 | 基本没有损失 |
| 虚拟层面 | 基于 JVM 虚拟机,更加层 | 基于操作系统,更加通用 |
| 代码无关性 | 一个特定代码的执行平台, 它是运行时才存在的,只能 支撑特定代码的执行,并且 必须是在 jvm 进程内 | 模拟了一整个操作系统,它是静态存在的, 可以支撑任何相同平台的应用程序 |
| 主机隔离性 | jvm 不隔离主机 | 通过命名空间实现隔离 |
六、docker的架构

解释:
Docker使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器。Docker容器通过Docker镜像来创建。
1、Docker仓库(Registry)
Docker仓库用来保存镜像,可以理解为代码控制中的代码仓库。DockerHub供了庞大的镜像集合供使用。
2、Docker daemon
Dockerdaemon是服务器组件,是Docker最核心的后台进程,我们也把它称为守护进程。它是所有Docker操作的"总管家",负责管理和维护Docker的所有资源,并响应来自Docker客户端的所有指令。
3、docker客户端(client)
Docker客户端通过命令行或者其他工具使用DockerAPI与Docker的守护进程通信。
4、docker主机(host)
一个物理或者虚拟的机器用于执行Docker守护进程和容器。
5、docker镜像(images)
Docker镜像是用于创建Docker容器的模板。
6、docker容器(container)
容器是独立运行的一个或一组应用。
七、安装docker
有server版本和桌面版本,重心放在桌面版本
1、server版本安装(ubuntu)
(1)安装依赖:
①操作系统的版本
建议ubuntu20.04往上的版本
②CPU支持
ARM64和X86_64两种
(2)安装docker
①确定CPU
bash
uname -a
②确定操作系统版本
bash
cat /etc/*release*
③卸载旧版本
bash
sudo apt-get remove docker docker-engine docker.io containerd runc
④卸载历史版本
bash
#卸载软件
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras -y
bash
#删除目录
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
⑤配置docker下载源
bash
#curl命令安装--curl理解为一个客户端
sudo apt install curl -y
bash
#创建gap key目录--校验公钥
sudo mkdir -m 0755 -p /etc/apt/keyrings
bash
#下载 gpg key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg
bash
#配置docker源
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg]
https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee
/etc/apt/sources.list.d/docker.list > /dev/null
⑥安装
bash
#安装
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
⑦配置和启动
bash
#自动启动配置
#配置加载
sudo systemctl daemon-reload
#启动服务
sudo systemctl start docker
#开启启动
sudo systemctl enable docker
#查看服务状态
sudo systemctl status docker
bash
#检查安装结果查看版本
docker version
#更详细的docker信息
docker info
(3)常见报错

查看日志
bash#journalctl 是操作系统日志查看命令 #-e 表示从末尾看 #-u 表示看哪个系统组件的,我们的组件是 docker journalctl -eu docker
(4)实战经验
①docker镜像源的修改
/etc/docker/daemon.json 中加入:
bash
#腾讯云
{
"registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
#阿里云
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerhub.timeweb.cloud",
"https://huecker.io"
]
}
bash
#重新启动
sudo systemctl daemon-reload
sudo systemctl restart docker
②docker目录的修改
docker默认的安装目录为/var/lib/docker,这里面会存放很多镜像,所以安装的时候要考虑这个目录的空间。
有以下方法:
将/var/lib/docker挂载到一个大的磁盘。
安装之前挂载一个大的磁盘,然后创建一个软链接到/var/lib/docker,这样就自动安装到我们空间比较大的磁盘了
安装了docker,然后发现忘了配置这个自录,我们需要修改docker的配置文件
现在假设要把修改到/data/var/lib/docker:
bash
mkdir -p /data/var/lib/docker
# 编辑配置文件
vi /etc/docker/daemon.json
# 输入下面的 json
{
"data-root": "/data/var/lib/docker"
}
# 加载配置
sudo systemctl daemon-reload
# 重启 docker
sudo systemctl restart docker
#查看 docker 状态
sudo systemctl status docker
2、Windows版本安装(GUI版本)
(1)安装依赖
①确定开启虚拟化

②

③

④重启电脑
⑤安装WSL2
以管理员权限运行PowerShell
查看版本,如果不是2需要更新到2
bashwsl --statusPowerShell运行命令更新wsl到最新版本
bashwsl --update设置wsl默认版本
bashwsl --set-default-version 2
⑥通过微软应用商店安装Ubuntu子系统并打开
⑦安装docker
在官网下载docker安装包并安装,
桌面点击快捷方式进行运行docker,
确认Docker安装成功,在PowerShell中输入dockerversion命令确认 Client和Server是否启动