发布时间:2026/7/25 19:25:39
dockerfile# 使用官方Python 3.9镜像作为基础FROM python:3.9-slim# 设置工作目录WORKDIR /app# 复制requirements.txt到工作目录COPY requirements.txt .# 安装Python依赖RUN pip install --no-cache-dir -r requirements.txt# 复制应用代码COPY app.py .# 暴露端口EXPOSE 5000# 启动命令CMD ["python", "app.py"]这个Dockerfile就像包饺子的步骤:先准备好基础面团(FROM),然后擀皮(WORKDIR),放馅(COPY),封口(RUN),最后下锅(CMD)。## 从单个饺子到饺子生产线:Docker容器有了饺子皮配方,我们就可以批量生产饺子——也就是创建Docker容器。容器是镜像的运行实例,就像包好的饺子是配方的一个具体实现。### 运行一个简单应用让我们写一个简单的Python Web应用,然后用Docker运行它:python# app.py - 一个简单的Flask Web应用from flask import Flaskimport osapp = Flask(__name__)@app.route('/')def hello(): # 获取容器主机名,就像饺子上的标记 hostname = os.uname()[1] return f"Hello! 我是来自容器 {hostname} 的饺子!"@app.route('/count')def count(): # 模拟计数,就像数饺子 return "当前有100个饺子正在煮着!"if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)现在,用Docker构建并运行这个应用:bash# 构建镜像(就像准备好饺子皮和馅)docker build -t dumpling-app:v1 .# 运行容器(就像开始煮饺子)docker run -d -p 5000:5000 --name my-dumpling dumpling-app:v1# 查看容器状态(看看饺子煮得怎么样了)docker ps## 进阶:当饺子太多时——Kubernetes登场现在问题来了:如果春节来了200个亲戚,你用一口锅煮100个饺子,要煮4锅,太慢了!这就是Kubernetes要解决的问题——管理大量容器(饺子)的部署、扩展和运行。Kubernetes就像一个智能饺子工厂,可以:- 自动分配饺子到不同的锅(节点)- 动态增加或减少饺子数量(扩缩容)- 保证每个饺子都煮熟(健康检查)- 当某口锅坏了,自动把饺子移到其他锅(自愈)### Kubernetes的核心概念让我们用一个YAML文件来定义我们的“饺子生产线”:yaml# dumpling-deployment.yaml - Kubernetes部署配置apiVersion: apps/v1kind: Deploymentmetadata: name: dumpling-appspec: # 定义要运行的饺子数量 replicas: 3 selector: matchLabels: app: dumpling template: metadata: labels: app: dumpling spec: containers: - name: dumpling-container # 使用我们之前构建的镜像 image: dumpling-app:v1 ports: - containerPort: 5000 # 健康检查:确保饺子没煮烂 livenessProbe: httpGet: path: / port: 5000 initialDelaySeconds: 5 periodSeconds: 10 # 资源限制:每个饺子不能太大 resources: limits: memory: "256Mi" cpu: "500m"这个配置文件告诉Kubernetes:我们要运行3个一模一样的饺子应用(replicas: 3),每个应用使用dumpling-app:v1镜像,并且要定期检查它们是否健康。## 实战演练:部署和管理饺子工厂现在我们部署这个应用到Kubernetes集群:bash# 部署饺子生产线kubectl apply -f dumpling-deployment.yaml# 查看部署状态(看看饺子煮得怎么样了)kubectl get deployments# 查看运行的饺子(Pod)kubectl get pods# 如果发现某个饺子坏了,Kubernetes会自动重启它# 模拟一个饺子坏掉kubectl delete pod dumpling-app-xxxxx# 查看Kubernetes自动创建了新饺子kubectl get pods### 动态扩缩容当亲戚突然增加时,我们可以快速增加饺子数量:bash# 将饺子数量从3个扩展到10个kubectl scale deployment dumpling-app --replicas=10# 或者让Kubernetes自动根据负载调整(HPA)kubectl autoscale deployment dumpling-app --min=3 --max=20 --cpu-percent=80## 高级用法:服务发现与负载均衡就像吃饺子时需要蘸料一样,我们的应用也需要对外提供服务。Kubernetes提供了Service资源来实现服务发现和负载均衡:yaml# dumpling-service.yaml - 定义如何访问饺子apiVersion: v1kind: Servicemetadata: name: dumpling-servicespec: # 选择器:选择带有app=dumpling标签的饺子 selector: app: dumpling ports: - protocol: TCP port: 80 targetPort: 5000 # 负载均衡类型 type: LoadBalancer这个Service就像一个“饺子分发窗口”,用户访问这个窗口,它会自动把请求分发到不同的饺子容器上,实现负载均衡。## 总结通过煮饺子这个生活场景,我们理解了云原生技术的核心概念:1.Docker镜像= 饺子皮配方:定义应用的完整运行环境2.Docker容器= 一个个饺子:镜像的运行实例3.Kubernetes= 智能饺子工厂:管理大量容器的编排工具4.Pod= 一锅饺子:Kubernetes最小的调度单位5.Service= 饺子分发窗口:提供稳定的访问入口6.Deployment= 饺子生产线:定义应用的运行策略云原生技术让我们的应用像煮饺子一样简单:准备好配方(Dockerfile),批量生产(容器化),然后交给智能工厂(Kubernetes)去管理。无论是春节来200个亲戚,还是日常只煮10个,这套系统都能自动应对。记住:技术再复杂,核心思想往往来源于生活。下次吃饺子时,不妨想想你的应用是如何在云原生环境中运行的。