docker
docker介绍
在安装部署程序过程中存在的问题:
版本依赖
- 典型案例:java环境有很多的jre版本
环境依赖
- 典型案例:oracle安装需要大量支撑包
安全风险
- 典型案例:多个应用无法安装一个服务器
性能瓶颈
- 典型案例:硬件设备扩展困难
什么是虚拟化技术
在计算机技术中,虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务器,网络,内存以及存储等予以抽象转换后呈现出来,打破实体实体结构间不可切割的障碍,使用户可以用比原本的组态更好的方式来应用这些资源
docekr容器技术的发展
- Docker是基于Go语言实现的开原容器项目它诞生于2013年年初.现在主流的操作系统包括引inux各大发行版本,Mac
OS,windows等都支持Docker..各大云服务提供商也纷纷推出了基于Docker的服务 - Docker的构想是要实现”Build ship and run any App,Anywhere‘“即通过对应用的封装(packaging),分发(distribution),部署(deploymen).运行(runtime)生命周期进行管理,达到应用组件级别的”一次封装,到处运行“的目的
- 这些应用组件即可以是一个Wb应用,一个编译环境,也可以是套数据库平台服务,甚至是一个操作系统或集群.可以说Dockeri首次为应用的开发,运行和部署提供了”一站式”的实用解决方案
docker本质
Docker的诞生基于linux的容器技术(Linux Containers,LXC)
- 容器将应用进行沙盒封装,进行隔离,并独立分配硬件资源。
- 容器在核心CPU本地运行指令,不需要任何专门的解释机制.
Docker在LXC基础上,优化了容器的使用体验
- Docker指令让用户无须关注底层操作,直接管理和使用容器
- Dock通过引入分层文件系统和镜像机制,降低了迁移难度
docekr容器技术的优势
- 更快的交付和部署
- 更高效的资源利用
- 更轻松的迁移和扩展
- 良好的隔离性
- 完整的技术生态
docekr容器技术和VMware的比较
| docker | VMware | |
|---|---|---|
| 启动 | 秒级 | 分钟级 |
| 性能 | 接近宿主机 | 较弱 |
| 资源 | 资源占用小 | 资源占用大 |
| 隔离 | 安全隔离 | 完全隔离 |
docker扩展组件
Docker Machine
Docker Machine 是 Docker 官方提供的一个命令行工具,用于在远程虚拟主机上安装和管理 Docker。它简化了在不同平台(如虚拟机、云服务等)上部署 Docker 环境的流程,可以快速创建、管理多个虚拟主机上的 Docker 环境,提供了一种便捷的方式来搭建分布式的 Docker 部署环境。
Docker Swarm
DockerSwarm是Docker官方提供的容器编排工具,用于管理多个Docker主机并将它们组成一个虚拟的容器集群,实现容器的自动化部署、伸缩和管理。通过 Docker Swarm,用户可以轻松地在多个主机上部署容器应用,并在需要时进行扩展或收缩,实现高可用性和负载均衡。
Docker Compose
Docker Compose是Docker官方提供的工具,用于定义和运行多个容器的应用程序。通过一个简单的YAML文件,可以定义应用程序的服务、网络和卷等配置并使用命令启动、停止、构建和管理整个应用程序的容器。Docker Compose简化了容器化应用程序的部署和管理流程,使开发人员可以更快速地搭建和运行复杂的多容器应用。
Docker File
Dockerfile是用于构建Docker镜像的文本文件,通过Dockerfile可以定义镜像的构建过程和内容。在Dockerfile中可以指定基础镜像、运行命令、复制文件、设置环境变量等操作,最终通过构建命令将Dockerfile转换为可执行的Docker镜像。使用Dockerfile可以实现自动化、可重复的镜像构建过程,帮助开发人员快速、方便地创建定制化的镜像。
kubernetes
Kubernetes最初是由Google公司发起并开源的容器编排平台,用于自动部署、扩展和管理容器化应用程序。它提供了一个高度可扩展的集群管理工具,支持多个容器化应用程序的部署、更新、维护和伸缩。Kubernetes提供了强大的自动化功能,帮助用户简化容器化应用程序的部署和管理,提高应用程序的可靠性和可扩展性。
docker安装(CentOS)
1 | #关闭防火墙 |

从镜像仓库获取
1 | docker pull redis #默认最新版本latest |
容器
1 | #查看容器列表 |
拉取 Tomcat 镜像并启动容器
1 | yum install -y unzip |

docekr使用
1.docekr image
镜像获取
1 | #1.从镜像仓库获取 |
镜像操作
1 | #1.保存迁移镜像 |
镜像查看
1 | #1.查看镜像列表 |
镜像分层结构

2.Docker container 容器
生成容器
1 | #1.创建容器 |
容器操作
1 | #1.进入容器命令 |
容器查看
1 | #1.查看容器列表 |
docker network网络
docker端口
1 | #1.随机暴露容器所有端口(危险) |

docker网络
1 | #1.使用host网络 |
docker compose介绍以及应用
Docker Compose 是 Docker 官方推出的工具,用于定义和运行多容器 Docker 应用。通过单个 YAML 文件(通常命名为 docker-compose.yml),可以配置应用的服务、网络和卷,一键启动或停止整个应用栈,无需逐个操作容器。
Docker Compose 是管理多容器应用的必备工具,通过 YAML 配置简化部署流程,尤其适合开发和测试环境。对于生产环境,可结合 Kubernetes 等更强大的编排工具。
yaml文件编辑规范
- 第一:YAML是一种标记性语言,类似于json数据描述语言,可读性高;
- 第二:YAML数据结构通过缩进来表示,连续项目通过减号表示,键值对用冒号分隔,数组使用中括号
[]括起来,bash用花括号{}括起来; - 第三:不支持制表符TAB缩进,只能使用空格缩进;
- 第四:字符后缩进一个空格(如冒号、逗号、横杠后须加空格);
- 第五:使用#号表示注释;
- 第六:如果包含特殊字符用单引号
' '标记为普通字符,用双引号表示特殊字符本身的意思,布尔值必须使用双引号" "括起来; - 第七:YAML 区分大小写;
docker compose yaml文件指令
1 | version:指定此yml文件基于的compose的版本 |
compose命令
1 | #1.创建和启动服务 |
mysql主从部署
日志介绍

binlog 日志、undo 日志、redo 日志、relay 日志的作用与区别:
在 MySQL 主从部署中,以下是几种关键日志的作用及区别:
binlog 日志(二进制日志)
- 作用:记录数据库执行的变更(如 INSERT、UPDATE、DELETE 等),用于主从复制和数据恢复。
- 主从复制中的角色:主库将 binlog 发送给从库,从库通过解析 binlog 来同步数据。
- 特点:
- 逻辑格式(记录 SQL 语句)或二进制格式(记录物理变更)。
- 可通过
log_bin参数启用,日志文件通常位于datadir目录下(如mysql-bin.xxxxxx)。
undo 日志(回滚日志)
- 作用:记录事务执行前的数据状态,用于回滚未提交的事务或 MVCC(多版本并发控制)。
- 主从复制中的角色:不直接参与复制,仅用于本地事务回滚。
- 特点:
- 保证事务的原子性(Atomicity)和一致性(Consistency)。
- 存储在
undo tablespace中,可通过innodb_undo_tablespaces参数配置。
redo 日志(重做日志)
- 作用:记录事务对数据页的物理修改,用于崩溃恢复(保证已提交事务不丢失)。
- 主从复制中的角色:不直接参与复制,确保主库数据持久化后才通知从库。
- 特点:
- 顺序写入,效率高,避免随机 IO。
- 存储在
ib_logfile*文件中,可通过innodb_log_files_in_group和innodb_log_file_size参数配置。
relay 日志(中继日志)
- 作用:从库用于存储从主库接收的 binlog 事件,供 SQL 线程执行。
- 主从复制中的角色:从库 IO 线程将主库的 binlog 写入 relay log,SQL 线程从中读取并执行。
- 特点:
- 临时存储,执行后可删除。
- 文件通常位于
datadir目录下(如relay-bin.xxxxxx),可通过relay_log参数指定路径。
主从复制流程中的协作
- 主库:执行事务 → 写入 binlog → 发送 binlog 到从库。
- 从库:
- IO 线程接收 binlog → 写入 relay log。
- SQL 线程读取 relay log → 执行 SQL 语句 → 更新数据。
- 写入 redo/undo 日志保证本地事务的持久性和一致性。
总结对比
| 日志类型 | 用途 | 主从复制中的角色 | 存储位置 |
|---|---|---|---|
| binlog | 记录变更,用于复制和恢复 | 主库生成,从库同步 | 主库mysql-bin.* |
| undo | 回滚事务,支持 MVCC | 不参与复制 | undo tablespace |
| redo | 崩溃恢复,保证持久化 | 确保主库数据持久化 | ib_logfile* |
| relay | 临时存储主库 binlog,供从库执行 | 从库接收主库 binlog 后生成 | 从库relay-bin.* |
合理配置这些日志对主从复制的性能和可靠性至关重要。例如,调整 binlog 格式(binlog_format)、redo 日志大小(innodb_log_file_size)等参数可优化复制效率。
部署

docker-compose.yaml
1 | version: '2.27' |
修改主服务配置文件:my_m.conf
1 | [mysqld] |
修改从服务配置文件:my_s.conf
1 | [mysqld] |
执行验证
1 | cd mysql_service/ |

1 | # 创建一个账号(用户名:worker 密码:root) |

redis
redis介绍
REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。
Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。
redis部署方案介绍
| 特性/配置 | Redis 主从复制 | Redis 哨兵 | Redis 集群 |
|---|---|---|---|
| 主要目的 | 数据备份与读写分离 | 高可用性和故障自动切换 | 高并发和数据分散处理 |
| 架构 | 一个主节点和多个从节点 | 监控主从结构并自动切换 | 多个主节点,数据分片 |
| 数据复制 | 主节点到从节点 | 监控并管理主从复制 | 每个主节点管理自己的数据集 |
| 故障转移机制 | 手动或哨兵自动切换 | 自动故障转移 | 自动处理节点故障 |
| 可伸缩性 | 有限,依赖主节点 | 为主从结构增加高可用性 | 高,因为数据分布式处理 |
| 使用场景 | 数据备份和读扩展 | 关键应用的高可用性 | 大规模应用的高性能需求 |
| 设置复杂度 | 相对简单 | 中等,需配置哨兵 | 复杂,需规划数据分区 |
redis一主两从三哨兵部署方案

部署
配置docker-compose.yaml文件
创建文件
1
2mkdir redis_service
vim redis_service/docker-compose.yaml1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93version: '3'
services:
redis1:
image: redis
container_name: redis1
hostname: redis1
ports:
- 6379:6379
- 16379:16379
networks:
- redis_net
volumes:
- ./redis1/conf:/etc/conf
- ./redis1/data:/data
command:
redis-server /etc/conf/redis.conf
redis2:
image: redis
container_name: redis2
hostname: redis2
ports:
- 6380:6380
- 16380:16380
networks:
- redis_net
volumes:
- ./redis2/conf:/etc/conf
- ./redis2/data:/data
command:
redis-server /etc/conf/redis.conf
redis3:
image: redis
container_name: redis3
hostname: redis3
ports:
- 6381:6381
- 16381:16381
networks:
- redis_net
volumes:
- ./redis3/conf:/etc/conf
- ./redis3/data:/data
command:
redis-server /etc/conf/redis.conf
sentinel1:
image: redis
container_name: sentinel1
hostname: sentinel1
ports:
- 26379:26379
networks:
- redis_net
volumes:
- ./sentinel1/conf:/etc/conf
- ./setinel1/data:/data
command:
redis-sentinel /etc/conf/sentinel.conf
sentinel2:
image: redis
container_name: sentinel2
hostname: sentinel2
ports:
- 26380:26379
networks:
- redis_net
volumes:
- ./sentinel2/conf:/etc/conf
- ./setinel2/data:/data
command:
redis-sentinel /etc/conf/sentinel.conf
sentinel3:
image: redis
container_name: sentinel3
hostname: sentinel3
ports:
- 26381:26379
networks:
- redis_net
volumes:
- ./sentinel3/conf:/etc/conf
- ./setinel3/data:/data
command:
redis-sentinel /etc/conf/sentinel.conf
networks:
redis_net:
name: redis_net
driver: bridge查看是否创建成功
1
2cd /redis_service
docker compose up -d
redis_master配置文件
配置文件名redis.conf,在redis1/conf/redis.conf
1 | databases 10 |
redis_slave配置文件
redis2和redis3
1 | #实例化数据库 |
sentinel配置文件
1 | #vim /usr/local/redis/etc/sentinel.conf |
验证
1 | cd redis_service |

1 | docker container ls |

- 查看从机
1 | [root@CentOS7 ~]# docker exec -it redis1 redis-cli -p 6379 |

- 查看从机
1 | [root@CentOS7 ~]# docker exec -it redis2 redis-cli -p 6380 |

- 查看哨兵
1 | [root@CentOS7 redis_service]# docker exec -it sentinel1 redis-cli -p 26379 |

- 人为停掉一个redis
1 | docker container redis1 stop |

kubernetes介绍以及应用
Kubernetes(简称k8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。
它的核心功能包括自动化容器部署、负载均衡、自我修复、存储编排以及跨集群资源管理。
通过Kubernetes,企业能够高效管理大规模的容器化应用,确保应用的高可用性和弹性扩展。
核心功能:
- 自动调度:将容器放到K8S集群的任意节点中,并根据容器需要和节点负载决定目标节点。
- 自动修复:当健康检查发现节点问题,系统会自动将节点上的资源进行转移,并恢复功能。
- 自动缩扩容:通过预定义负载指标,根据指标自动触发动态缩扩容行为。
架构
Master
Master为控制节点,负责整个集群的管理控制。
Master节点由:APIserver、ETCD 、controller Manager、schedule等组件构成。
Node
Node的作用是承接工作负载。
Node节点有由:kubelet、rumtime、kube-proxy组成。

客户端:Kubectl、UI:负责给API-Server发送指令。
API-Server:接受指令,K8s集群的核心,是集群的API入口。它负责处理来自各种客户端的REST API请求资源并对其进行验证、授权,并将有效的请求持久化到etcd数据库。
ETCD:分布式键值存储系统,用于保存Kubernetes集群的所有配置数据和状态信息。它存储了集群中的各种资源对象的元数据。
Scheduler:负责将未调度的Pods分配到合适的Node节点上运行。它根据一系列的调度算法和策略来进行决策。
Controller-Manager、controller:运行着一系列的控制器,这些控制器负责维护集群的状态。Controller-Manager负责容器数量。controller保证运行状态。
Kubelet:负责与kube-api通信,获取节点的Pods的信息,管理其生命周期,并按照Pod的定义创建、启停监控容器的运行状态等。并将状态上报给controller。
Kube-proxy:主要负责实现K8s Service的网络代理功能.它在每个Node节点上运行,维护网络规则,将对Service的请求转发到对应的Pod上。
RunTime:负责k8s中的资源隔离,确保每个容器有独立的网络,文件系统,进程空间从而避免相互干扰。
Pod:Pod是最小的可部署和可管理的计算单元。容器在同一主机上可以相互通信。多个容器封装成一个Pod,一般一个容器只放一个应用,为了让服务高可用,需要多个容器,满足使用需求,所以用Pod
打包多个容器统一管理。
Container:用于将应用程序以及所有依赖打包在一起,确保所有程序运行环境相同。
资源
Namespace
工作负载类:负责接受客户访问请求,返回客户需要的数据
Pod、Deployment、ReplicaSet、StatefulSet、DaemonSet、Job、CronJob
网络类
Service、Ingress、NetworkPolicy
储存类
Volume、PersistentVolume (PV)、Persistent VolumeClaim (PVC)
配置类
ConfigMap、Secret
安全类
扩展类
自动缩扩容类
层级关系

pod:最小的部署单元,包含一个或多个容器。
Deployment:管理Pod的副本和滚动更新策略。
replicaSet:确保指定数量的Pod副本运行(Deployment的底层实现)。
DaemonSet:管理有状态应用的Pod,提供有序部署和唯一网络标识。
StatefulSet:确保每个节点运行一个Pod的副本。
Service:为Pod提供稳定的网络访问(如负载均衡、服务发现)
Ingress:管理外部访问集群内服务的路由规则(如 HTTP/HTTPS 路由)。
Secret:存储敏感数据(如密码、Token),以 Base64 编码存储非敏感的配置数据(如环境变量、配置文件)。
Job/CronJob:运行一次性任务,任务完成后 Pod 终止定时运行的 Job。
PV:集群中的持久化存储资源。
PVC:用户对存储资源的请求声明,绑定到 PV。
kubernetes-集群信息查看
1 | kubectl get pods # 查看所有 Pod |
kubernetes-资源创建命
1 | #1. 创建 Pod |
kubernetes-Pod信息查看
1 | 1. 列出特定命名空间中的 pod: |
kubernetes-deploymen信息
1 | 1. 列出命名空间中的所有Deployment:kubectl get deployments -n <namespace> |
kubernetes-label指令
1 | # 给名为foo的Pod添加label unhealthy=true |
kubernetes-基础指令
create,delete,get,run,expose,set,explain,edit
1 | # 创建Deployment和Service资源 |
kubernetes-基础指令
https://kubernetes.io/zh-cn/docs/reference/kubectl/quick-reference/
1 | # 创建Deployment和Service资源 |
Nginx反向代理
代理服务器

代理服务器功能
1.隐藏客户端身份: 正向代理可以隐藏客户端的真实IP地址,保护客户端的隐私。
2.访问控制: 正向代理可以根据一定的规则限制或允许客户端的访问请求,实现访问控制功能。
3.缓存加速: 正向代理可以缓存经常访问的页面或资源,提高访问速度,减轻服务器负担。
目的
1.突破网络限制
2.监控和管理员工的网络访问行为
3.隐藏客户端真实IP
4.防止敏感数据泄露
5.内容过滤
6.提高访问速度
反向代理

作用
1.负载均衡: 反向代理可以根据后端服务器的负载情况,将请求分发到不同的服务器上,提高系统的整体性能。
2.安全性增强:隐藏后端服务器的真实地址和端口,防止直接攻击。同时,还可以实现SSL加密、访问控制等安全功能。
3.缓存优化:可以缓存静态资源,减少后端服务器的负载,提高响应速度。






