docker compose 与 k8s 使用
Docker compose
Docker本身并不是容器,它是创建容器的工具,是应用容器引擎。
Docker技术的三大核心概念,分别是:
- 镜像(Image)
- 容器(Container)
- 仓库(Repository)
负责对Docker镜像进行管理的,是Docker Registry服务(类似仓库管理员)。
yaml文件结构
project/
├── docker-compose.base.yml # 基础配置
├── docker-compose.services.yml # 服务定义
├── docker-compose.dev.yml # 开发环境扩展
├── docker-compose.prod.yml # 生产环境扩展
└── .env # 环境变量
# 启动多个独立的 compose 文件 docker-compose -f docker-compose.base.yml -f docker-compose.override.yml up -d # 更复杂的组合 docker-compose \ -f docker-compose.base.yml \ -f docker-compose.services.yml \ -f docker-compose.volumes.yml \ -f docker-compose.networks.yml \ up -d
version : '3.8' services: # 前端 nginx部署 ecms-front: container_name: ecms-front image: data-center-front:0.6.1 ports: - "20080:80" volumes: - ./ecms-front/nginx.conf:/etc/nginx/nginx.conf - ./ecms-front/default.conf:/etc/nginx/conf.d/default.conf networks: - energuard_net restart: unless-stopped # 后端-平台 ecms-api: container_name: ecms-api image: ecms-api:0.6.1-SNAPSHOT environment: - TZ=Asia/Shanghai ports: - "8080:8080" volumes: - ./ecms-api/config:/home/config - ./ecms-api/logs:/home/logs - ./ecms-api/data/upload:/home/upload - /etc/localtime:/etc/localtime:ro networks: - energuard_net # 后端-数据采集 ecms-acquisition: container_name: ecms-acquisition image: ecms-acquisition-api:0.6.1-SNAPSHOT environment: - TZ=Asia/Shanghai ports: - "8090:8090" volumes: - ./ecms-acquisition/config:/home/config - ./ecms-acquisition/logs:/home/logs - ./ecms-acquisition/data/upload:/home/upload - /etc/localtime:/etc/localtime:ro networks: - energuard_net networks: energuard_net: external: true # 表明网络是外部已存在的网络
k8s
Docker应用于具体的业务实现,是存在困难的——编排、管理和调度等各个方面,都不容易。于是,人们迫切需要一套管理系统,对Docker及容器进行更高级更灵活的管理。
K8S,基于容器的集群管理平台(kubernetes)
一个K8S系统,通常称为一个K8S集群(Cluster)。
这个集群主要包括两个部分:
- 一个Master节点(主节点)
- 一群Node节点(计算节点)
Master节点主要还是负责管理和控制。Node节点是工作负载节点,里面是具体的容器。

Master节点包括API Server、Scheduler、Controller manager、etcd。
API Server是整个系统的对外接口,供客户端和其它组件调用。
Scheduler负责对集群内部的资源进行调度。
Controller manager负责管理控制器。

Node节点包括Docker、kubelet、kube-proxy、Fluentd、kube-dns(可选),还有就是Pod。
Pod是Kubernetes最基本的操作单元。一个Pod代表着集群中运行的一个进程,它内部封装了一个或多个紧密相关的容器。除了Pod之外,K8S还有一个Service的概念,一个Service可以看作一组提供相同服务的Pod的对外访问接口。
Docker:创建容器的。
Kubelet:主要负责监视指派到它所在Node上的Pod,包括创建、修改、监控、删除等。
Kube-proxy:主要负责为Pod对象提供代理。
Fluentd:主要负责日志收集、存储与查询。
K8s 资源 YAML 文件都包含以下四个核心字段:
apiVersion: <API组/版本> # 使用的 API 版本
kind: <资源类型> # 资源类型,如 Deployment、Service、pod 等
metadata: # 元数据:名称、命名空间、标签等
spec: # 资源的具体配置(核心内容)
# Pod 是 K8s 中最小的运行单元,通常不直接创建,而是由控制器(如 Deployment)管理。
# Deployment(管理无状态应用) 用于声明 Pod 的期望状态(副本数、更新策略等),自动创建和管理 ReplicaSet。
# Service(服务发现与负载均衡) 为一组 Pod 提供稳定的网络访问入口。
# ConfigMap(非敏感配置) 存储配置数据,可挂载为文件或环境变量。
# Secret(敏感信息) 存储密码、token 等,Base64 编码(不是加密! )
# PersistentVolumeClaim(PVC,存储申请) 用户对持久化存储的“请求”。
********************************************************************************************************
configs/
├── nginx/
│ ├── deployment.yaml
│ └── service.yaml
├── backend/
│ ├── deployment.yaml
│ └── service.yaml
└── database/
├── statefulset.yaml
└── service.yaml
# 部署整个目录(按字母顺序)
kubectl apply -f configs/
# 或部署特定目录
kubectl apply -f configs/nginx/
kubectl apply -f configs/backend/
********************************************************************************************************
yaml文件编写
kubectl apply -f web-app.yaml 访问:http://<NodeIP>:30080 # Deployment 创建 2 个运行 nginx 的 Pod # Service 创建一个负载均衡器,将流量分发到这两个 Pod # 用户可通过任意 Kubernetes 节点的 30080 端口访问该 web 应用 # Service 自动监控 Pod 变化,如果 Pod 重启或迁移,会自动更新路由 应用部署: 创建和管理 2 个相同的 Pod,每个 Pod 运行一个 nginx 1.25 版本的容器。 --- # Deployment # 注释:这是一个 Deployment 资源 apiVersion: apps/v1 # 使用的 API 版本 kind: Deployment # 资源类型:部署 metadata: name: web-app # Deployment 的名称 spec: replicas: 2 # 需要运行的 Pod 副本数量(2 个实例) selector: matchLabels: app: web # 选择器:选择标签为 app=web 的 Pod template: # template 包含了一个完整的 Pod 定义,Deployment 会根据这个模板创建新的 Pod。 metadata: labels: app: web # Pod 的标签:app=web spec: containers: - name: web # 容器名称 image: nginx:1.25 # 使用的容器镜像 ports: - containerPort: 80 # 容器内监听的端口 --- # Service 作用: 为 Deployment 创建的 Pod 提供网络访问 # Service # 注释:这是一个 Service 资源 apiVersion: v1 # Service 使用的 API 版本 kind: Service # 资源类型:服务 metadata: name: web-service # Service 的名称 spec: type: NodePort # Service 类型:NodePort(将服务暴露到集群外) selector: app: web # 选择器:将流量路由到标签为 app=web 的 Pod ports: - port: 80 # Service 本身的端口(集群内访问使用) targetPort: 80 # 容器内的目标端口 nodePort: 30080 # 节点上的端口,外部通过此端口访问
Kubernetes 支持多种方式来组织配置
单文件多资源:在单个文件中编写多个deployment,使用 --- 分隔符在单个文件中定义多个资源:
多文件按组件划分:按业务划分,在多个yaml文件中分开进行存储

浙公网安备 33010602011771号