利用 Docker 和 Kubernetes 实现微服务部署

简介: 【10月更文挑战第2天】利用 Docker 和 Kubernetes 实现微服务部署

引言

随着云计算的发展,越来越多的应用程序采用微服务架构来构建。微服务架构强调将单一的大规模应用程序拆分成一组小的服务,每个服务都运行在其自己的进程中,并且彼此之间通过轻量级通信机制(通常是HTTP资源API)进行通信。这种架构的好处在于它使得开发、维护和服务扩展变得更加容易。然而,管理多个服务实例的生命周期也变得更加复杂。这时,容器技术和编排工具如 Docker 和 Kubernetes 成为了管理微服务的关键技术。

Docker 简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

容器化一个简单应用

假设我们有一个简单的 Python Web 应用,我们想将其容器化以便更好地管理和部署。

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

if __name__ == '__main__':
    app.run(host='0.0.0.0')
AI 代码解读

接下来,我们需要创建一个 Dockerfile 来描述如何构建 Docker 镜像。

# 使用官方 Python 运行时作为父镜像
FROM python:3.8-slim

# 设置工作目录
WORKDIR /app

# 将当前目录的内容复制到容器的工作目录中
COPY . .

# 安装依赖包
RUN pip install --no-cache-dir flask

# 使端口对外界系统完全可见
EXPOSE 5000

# 在容器启动时运行应用
CMD ["python", "app.py"]
AI 代码解读

使用 docker build 命令来构建镜像:

docker build -t my-python-app .
AI 代码解读

构建成功后,可以使用 docker run 命令来启动容器:

docker run -p 4000:5000 my-python-app
AI 代码解读

Kubernetes 入门

Kubernetes(简称 k8s)是一个开源的系统,用于自动化部署、扩展以及管理容器化的应用。它提供了容器化应用的部署、维护和扩展机制。

使用 Minikube 进行本地开发

Minikube 是一个工具,可以在本地环境中运行一个单节点的 Kubernetes 集群。

首先安装 Minikube:

curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
chmod +x minikube
sudo mv minikube /usr/local/bin
AI 代码解读

安装完 Minikube 后,可以启动一个集群:

minikube start
AI 代码解读

一旦集群准备好,就可以部署之前创建的 Docker 镜像了。首先,需要将镜像推送到 Docker Hub 或者其他私有仓库:

docker tag my-python-app username/my-python-app
docker push username/my-python-app
AI 代码解读

然后编写一个 Kubernetes Deployment 文件来部署应用:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-python-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-python-app
  template:
    metadata:
      labels:
        app: my-python-app
    spec:
      containers:
      - name: my-python-app
        image: username/my-python-app
        ports:
        - containerPort: 5000
AI 代码解读

使用 kubectl apply 命令来创建 Deployment:

kubectl apply -f deployment.yaml
AI 代码解读

为了使服务可以从外部访问,还需要创建一个 Service:

apiVersion: v1
kind: Service
metadata:
  name: my-python-app-service
spec:
  selector:
    app: my-python-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 5000
  type: NodePort
AI 代码解读

同样地,使用 kubectl apply 来创建 Service:

kubectl apply -f service.yaml
AI 代码解读

结论

本文介绍了如何使用 Docker 来容器化一个简单的 Python Web 应用,并且使用 Kubernetes 在本地 Minikube 集群中部署这个应用。虽然这里只是一个简单的例子,但它展示了如何将传统应用转变为现代云原生应用的一部分。在实际生产环境中,还需要考虑更多方面,比如安全、监控、日志记录以及持续集成/持续部署(CI/CD)。掌握这些技能对于现代软件工程师来说至关重要。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
打赏
0
0
0
0
53
分享
相关文章
使用ArgoCD管理Kubernetes部署指南
ArgoCD 是一款基于 Kubernetes 的声明式 GitOps 持续交付工具,通过自动同步 Git 存储库中的配置与 Kubernetes 集群状态,确保一致性与可靠性。它支持实时同步、声明式设置、自动修复和丰富的用户界面,极大简化了复杂应用的部署管理。结合 Helm Charts,ArgoCD 提供模块化、可重用的部署流程,显著减少人工开销和配置错误。对于云原生企业,ArgoCD 能优化部署策略,提升效率与安全性,是实现自动化与一致性的理想选择。
101 0
Qwen3 大模型在阿里云容器服务上的极简部署教程
通义千问 Qwen3 是 Qwen 系列最新推出的首个混合推理模型,其在代码、数学、通用能力等基准测试中,与 DeepSeek-R1、o1、o3-mini、Grok-3 和 Gemini-2.5-Pro 等顶级模型相比,表现出极具竞争力的结果。
Kubernetes、Docker和Containerd的关系解析
总的来说,Docker、Containerd和Kubernetes之间的关系可以用一个形象的比喻来描述:Docker就像是一辆装满货物的卡车,Containerd就像是卡车的引擎,而Kubernetes就像是调度中心,负责指挥卡车何时何地送货。
57 12
Ubuntu下部署及操作Docker技巧
以上就是在Ubuntu下部署及操作Docker的具体步骤。但这只是冰山一角,Docker的魅力远不仅如此。你可以将其视为存放各种工具的小箱子,随时随地取用,极大地提升工作效率。你也可以私人订制,适应不同的开发环境,就像一个拥有各种口味冰淇淋的冰箱,满足各种各样的需求。好了,现在你已经掌握了基本的Docker运用技巧,快去尝试使用吧!记住,沉浸在探索中,你会找到无尽的乐趣和满满的收获。
103 23
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
228 33
Kubernetes与Docker参数对照:理解Pod中的command、args与Dockerfile中的CMD、ENTRYPOINT。
需要明确的是,理解这些都需要对Docker和Kubernetes有一定深度的理解,才能把握二者的区别和联系。虽然它们都是容器技术的二个重要组成部分,但各有其特性和适用场景,理解它们的本质和工作方式,才能更好的使用这些工具,将各自的优点整合到生产环境中,实现软件的快速开发和部署。
100 25
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
109 19
大模型文件Docker镜像化部署技术详解
大模型文件Docker镜像化部署技术详解
270 2
|
2月前
|
在Docker上部署Ollama+AnythingLLM完成本地LLM Agent部署
通过以上步骤,您可以成功在Docker上部署Ollama和AnythingLLM,实现本地LLM Agent的功能。在部署过程中,确保环境和配置正确,以避免不必要的问题。希望本文能够帮助您顺利完成部署,并在本地环境中高效地使用LLM模型。
801 8
使用容器服务ACK快速部署QwQ-32B模型并实现推理智能路由
阿里云最新发布的QwQ-32B模型,通过强化学习大幅度提升了模型推理能力。QwQ-32B模型拥有320亿参数,其性能可以与DeepSeek-R1 671B媲美。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等