当前位置: 首页 > article >正文

通过案例讲述docker,k8s,docker compose三者的关系

以下是一个结合 Docker、Docker Compose 和 Kubernetes(k8s)的案例,展示三者在应用开发、本地测试和生产部署中的协作关系:


案例背景

假设我们要开发一个 Web 应用,包含以下组件:

  1. 前端:Node.js 编写的 Web 界面
  2. 后端:Python Flask 编写的 API 服务
  3. 数据库:MySQL 数据库

阶段 1:开发环境(Docker 和 Docker Compose)

目标:在本地快速启动所有服务,方便开发和调试。
  1. 使用 Docker 容器化每个组件

    • 为每个服务(前端、后端、数据库)编写 Dockerfile,定义容器镜像的构建规则。
    • 例如,后端服务的 Dockerfile:
      FROM python:3.9
      WORKDIR /app
      COPY requirements.txt .
      RUN pip install -r requirements.txt
      COPY . .
      CMD ["flask", "run", "--host=0.0.0.0"]
      
  2. 使用 Docker Compose 编排服务

    • 编写 docker-compose.yml,定义服务间的依赖关系和网络配置:
      version: '3'
      services:
        frontend:
          build: ./frontend
          ports:
            - "3000:3000"
        backend:
          build: ./backend
          ports:
            - "5000:5000"
          environment:
            - DB_HOST=mysql
        mysql:
          image: mysql:5.7
          environment:
            - MYSQL_ROOT_PASSWORD=secret
      
  3. 一键启动所有服务

    docker-compose up
    
    • Docker Compose 会按顺序启动 MySQL → 后端 → 前端,并自动创建容器间的专用网络。

阶段 2:本地测试(Docker Compose 的优势)

  • 快速迭代:通过 docker-compose builddocker-compose up 快速重建镜像并重启服务。
  • 隔离环境:每个服务运行在独立容器中,避免本地环境依赖冲突。
  • 依赖管理:MySQL 作为独立容器运行,无需在本地安装。

阶段 3:生产环境(Kubernetes 接管)

目标:将应用部署到生产集群,实现高可用、自动扩缩容和故障恢复。
  1. 将 Docker 镜像推送到镜像仓库

    docker-compose build
    docker tag frontend my-registry/frontend:v1
    docker push my-registry/frontend:v1
    # 类似推送后端和数据库镜像
    
  2. 编写 Kubernetes 部署文件

    • 为每个服务创建 Kubernetes 资源(如 DeploymentService)。
    • 例如,后端服务的 Deployment:
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: backend-deployment
      spec:
        replicas: 3
        selector:
          matchLabels:
            app: backend
        template:
          metadata:
            labels:
              app: backend
          spec:
            containers:
              - name: backend
                image: my-registry/backend:v1
                env:
                  - name: DB_HOST
                    value: mysql-service
      
  3. 使用 Kubernetes 部署

    kubectl apply -f mysql-deployment.yaml
    kubectl apply -f backend-deployment.yaml
    kubectl apply -f frontend-deployment.yaml
    
    • Kubernetes 会在集群中调度容器,管理副本、网络和负载均衡。
  4. 生产环境能力

    • 自动扩缩容:根据 CPU 使用率自动扩展后端副本数。
    • 服务发现:通过 mysql-service 名称自动解析数据库地址。
    • 故障恢复:如果某个容器崩溃,Kubernetes 会自动重启它。

三者的核心关系总结

工具角色适用场景
Docker容器化单个服务构建和运行单个容器
Docker Compose编排多个容器(单机环境)本地开发、测试环境
Kubernetes编排容器集群(分布式环境)生产环境、大规模部署

关键协作流程

  1. 开发阶段:用 Docker 容器化每个组件,用 Docker Compose 简化多容器协作。
  2. 测试阶段:通过 Docker Compose 在本地模拟完整环境。
  3. 生产阶段:用 Kubernetes 管理容器集群,实现高可用和自动化运维。

:从 Docker Compose 到 Kubernetes 的过渡工具(如 kompose convert)可将 docker-compose.yml 转换为 Kubernetes 资源文件,但生产环境通常需要手动优化配置。


http://www.kler.cn/a/539696.html

相关文章:

  • 对接DeepSeek
  • 网络工程师 (26)TCP/IP体系结构
  • Render上后端部署Springboot + 前端Vue 问题及解决方案汇总
  • Word中Ctrl+V粘贴报错问题
  • Go 中的 7 个常见接口错误
  • 消费电子产品中的噪声对TPS54202的影响
  • springboot005学生心理咨询评估系统
  • nodejs - vue 视频切片上传,本地正常,线上环境导致磁盘爆满bug
  • 汽车售后诊断软件手机端架构设计
  • STM32自学记录(九)
  • Docker、Ollama、Dify 及 DeepSeek 安装配置与搭建企业级本地私有化知识库实践
  • 【前端】打造自己的hexo博客_hexo一本通
  • MySQL的 MVCC详解
  • SpringCloud面试题----Nacos和Eureka的区别
  • 消费情境变迁下的创新商业模式探索:以开源AI智能名片2+1链动模式S2B2C商城小程序为例
  • 【AIGC】语言模型的发展历程:从统计方法到大规模预训练模型的演化
  • 上位机知识篇---AI问答技巧
  • Formily 如何进行表单验证
  • C#中的非托管资源释放机制详解|Finalizer与Dispose模式
  • 《从入门到精通:蓝桥杯编程大赛知识点全攻略》(九)-连号区间数、递增三元组
  • git连接——问题
  • 第3章 使用 Vue 脚手架
  • 搜索插入位置:二分查找的巧妙应用
  • 【0401】Postgres内核 CREATE DATABASE database-name 源码实现 ①
  • 65【服务器攻击原理讲解】
  • 大模型赋能网络安全整体应用流程概述