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

Docker 和 k8s 之间是什么关系?

Docker 简介

  1. Docker 功能

    • Docker 是一款可以将程序和环境打包并运行的工具软件。
    • 通过 Docker,可以将程序及其依赖环境打包,确保在不同操作系统上一致的运行效果。
  2. 环境一致性问题

    • 程序依赖于特定的环境,不同操作系统和配置会导致程序运行结果不同。
    • Docker 通过打包程序和环境,解决了环境依赖问题。

Docker 基础概念

  1. 基础镜像(Base Image)

    • 基础镜像是包含操作系统用户空间部分和程序语言依赖的文件系统、依赖库和配置的压缩包。
    • 例如,python:3.9 镜像包含 Python 3.9 解释器。
  2. Dockerfile

    • Dockerfile 是一个文本文件,包含一系列命令,用于构建容器镜像。
    • 例如:
      FROM python:3.9
      WORKDIR /app
      COPY requirements.txt .
      RUN yum install gcc
      RUN pip install --no-cache-dir -r requirements.txt
      COPY . /app
      CMD ["python", "app.py"]
      
  3. 容器镜像(Container Image)

    • 容器镜像是 Dockerfile 构建的结果,包含环境和应用程序的打包文件。
    • 通过 docker build 命令构建。
  4. Registry

    • Registry 是镜像仓库,用于存储和管理 Docker 镜像。
    • 通过 docker pushdocker pull 命令与 Registry 交互。

容器与虚拟机的区别

  1. 容器

    • 容器是独立的环境和应用程序的运行实例。
    • 容器利用 Namespace 和 Cgroup 技术,看起来像独立操作系统,但实际上共享宿主机的内核。
  2. 虚拟机

    • 虚拟机包含完整的操作系统,资源占用更多,启动时间更长。
    • 容器相比虚拟机更轻量级,启动更快。

Docker 架构原理

  1. Client/Server 架构

    • Docker-cli(客户端)通过命令行与 Docker daemon(服务器)交互。
    • Docker daemon 通过 RESTful API 接收命令并执行。
  2. Docker Daemon

    • 包含 Docker Server 和 Engine 两层。
    • Docker Server 提供 HTTP 服务,Engine 层负责创建和管理容器。

Docker 相关工具

  1. Docker Compose

    • 用于管理多个容器组成的服务的部署。
    • 通过 YAML 文件定义服务,使用 docker-compose up 命令一键部署。
  2. Docker Swarm

    • 用于在多台服务器上部署和管理容器服务的集群。
    • 支持服务的迁移和扩缩容。

Docker 与 Kubernetes(k8s)

  1. 关系

    • Docker 解决单个容器的部署问题。
    • Docker Compose 解决多个容器组成的服务的部署问题。
    • Docker Swarm 解决多台服务器上的服务部署问题。
    • Kubernetes(k8s)是 Docker Swarm 的竞品,兼容 Docker 容器,实现更高级的容器编排调度。
  2. Kubernetes 功能

    • 在多台 Node 服务器上调度 Pod,进行部署和扩缩容。
    • Pod 内部可以包含多个容器,每个容器是一个服务进程。

总结

  • Docker 是一个将程序和环境打包并运行的工具软件。
  • Docker 容器是自带独立运行环境的特殊进程,底层使用宿主机的操作系统内核。
  • Docker 通过 Dockerfile 描述依赖关系,构建镜像,存储和分发镜像,启动容器,解决环境依赖问题。
  • Docker Compose、Docker Swarm 和 Kubernetes 是 Docker 的扩展工具,分别解决不同层面的服务部署和容器编排问题。

相关文章:

  • 通义千问AI模型对接飞书机器人-模型配置(2-1)
  • HarmonyOS ArkUi @CustomDialog 和promptAction.openCustomDialog踩坑以及如何选择
  • Python--PyMySQL 库基础操作笔记
  • LeetCode热题100(JavaScript)
  • HTTP状态码(HTTP Status Code)讲解
  • k8s上部署openvpn
  • IP地址:由电脑还是网线决定?
  • 【产品评测】海康威视(HIKVISION)NAS网络存储——简单评测
  • PostgreSQL安装/卸载(CentOS、Windows)
  • docker 部署wechatbot-webhook 并获取接口实现微信群图片自动保存到chevereto图库等
  • 计算机网络入门 -- 常用网络协议
  • el-menu弹出菜单样式不生效
  • 十一、数组(1)
  • 7.SpringBoot整合Neo4j
  • Python求均值,方差,标准差
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • HTML中设置input等文本框为不可操作
  • JavaWeb(学习笔记二)
  • Java比较器对数组,集合排序
  • Java程序员幽默爆笑锦集
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • Python语法速览与机器学习开发环境搭建
  • win10下安装mysql5.7
  • 阿里云前端周刊 - 第 26 期
  • 记一次删除Git记录中的大文件的过程
  • 区块链将重新定义世界
  • 使用SAX解析XML
  • 物联网链路协议
  • 再次简单明了总结flex布局,一看就懂...
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • # 职场生活之道:善于团结
  • #ifdef 的技巧用法
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (5)STL算法之复制
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (LeetCode 49)Anagrams
  • (八)c52学习之旅-中断实验
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (十三)Flink SQL
  • (一)WLAN定义和基本架构转
  • (转) ns2/nam与nam实现相关的文件
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .apk文件,IIS不支持下载解决
  • .Net - 类的介绍
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .net通用权限框架B/S (三)--MODEL层(2)
  • // an array of int
  • @hook扩展分析