容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
容器镜像服务 ACR,镜像仓库100个 不限时长
传统型负载均衡 CLB,每月750个小时 15LCU
简介: Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc

一、Docker  

添加图片注释,不超过 140 字(可选)

docker是一种开源的应用容器引擎,可以将应用程序和依赖打包成一个可移植的镜像,然后发布到任何支持docker的平台上,也可以实现虚拟化。docker的核心概念有三个:镜像(image)、容器(container)和仓库(repository)。镜像是一个特殊的文件系统,包含了运行容器所需的程序、库、资源、配置等文件。容器是镜像的一个实例,是一个运行时的概念,可以启动、停止、删除等。仓库是存放镜像的地方,可以是公开的或私有的,可以从仓库中拉取或推送镜像。  

  1. 镜像(Image): 镜像是Docker中的基本构建块,它是一个轻量级、独立的可执行软件包,其中包含运行应用程序所需的所有内容,包括代码、运行时、库、环境变量和配置文件等。镜像是只读的,意味着一旦构建完成,其内容不可更改。开发者可以使用Dockerfile来定义镜像的构建规则,然后通过Docker命令将镜像构建出来。镜像可以用于创建Docker容器。
  2. 容器(Container): 容器是基于镜像创建的运行实例。它是一个隔离的运行环境,可以在其中运行应用程序。容器包含了镜像的副本,但它可以在镜像的基础上进行读写操作,因此容器是可变的。容器在运行时与宿主机操作系统隔离,但与宿主机共享内核。这使得容器能够快速启动、轻量级、可移植,同时提供了高度的隔离性和安全性。
  3. 仓库(Repository): 仓库是用于存储Docker镜像的地方,它类似于代码库。仓库可以分为两种类型:公共仓库和私有仓库。公共仓库如Docker Hub,是供公众使用的,开发者可以将自己构建的镜像推送到公共仓库,也可以从公共仓库拉取其他开发者共享的镜像。私有仓库通常是企业内部使用的,用于存储私有镜像,保护公司的知识产权和应用程序代码。开发者可以通过Docker命令将镜像推送到私有仓库,并从私有仓库拉取镜像到自己的环境中使用。

1、什么是容器?  简而言之,容器是计算机上的沙盒进程,与主机上的所有其他进程隔离。这种隔离利用内核命名空间和cgroups, 在 Linux 中已经存在很长时间的功能。Docker一直致力于使这些功能变得平易近人且易于使用。总而言之,容器:  

  • 是图像的可运行实例。您可以使用 DockerAPI 或 CLI 创建、启动、停止、移动或删除容器。
  • 可以在本地计算机、虚拟机上运行或部署到云中。
  • 是可移植的(可以在任何操作系统上运行)。
  • 与其他容器隔离,并运行自己的软件、二进制文件和配置。

2、Docker架构  

添加图片注释,不超过 140 字(可选)

Docker 使用客户端-服务器架构。Docker 客户端与 Docker 守护进程,它负责构建、运行和 分发您的 Docker 容器。Docker 客户端和守护程序可以在同一系统上运行,也可以将 Docker 客户端连接到远程 Docker 守护 进程。Docker 客户端和守护程序使用 REST API 通过 UNIX 进行通信 套接字或网络接口。另一个 Docker 客户端是 Docker Compose, 这使您可以处理由一组容器组成的应用程序。  3、Docker成就  

添加图片注释,不超过 140 字(可选)


  1. 开发者数量:Docker社区吸引了大约18万以上的活跃开发者。这些开发者在Docker的发展和改进中发挥着重要的作用。  
  2. 应用数量:Docker容器技术为开发者提供了灵活、轻量级的部署方案,因此已经有大约7万个以上的应用程序使用了Docker容器。  
  3. 镜像下载量:Docker Hub是最流行的Docker镜像仓库之一,作为Docker社区共享和存储镜像的平台,它每月的镜像下载量已超过13亿次。这反映了Docker在开发者和用户中的广泛应用程度。  

二、K8S  

添加图片注释,不超过 140 字(可选)

k8s是一种开源的容器集群管理系统,可以实现容器集群的自动化部署、扩展、维护等功能。k8s的核心概念有四个:节点(node)、pod、服务(service)和控制器(controller)。节点是运行容器的主机,可以是物理机或虚拟机。pod是k8s中最小的调度单位,包含了一个或多个紧密相关的容器,共享网络和存储空间。服务是一种抽象层,定义了一组pod的访问方式,通常通过负载均衡来实现。控制器是一种管理pod和服务的机制,可以实现自动化地创建、更新、删除等操作。  Kubernetes提供了一组丰富的功能,包括:  

  1. 自动化部署:Kubernetes可以自动部署容器化应用程序,根据定义的配置文件在集群中创建和运行容器。  
  2. 负载均衡:Kubernetes支持自动进行服务的负载均衡,确保应用程序可以高效地处理流量。  
  3. 自动扩展:Kubernetes可以根据资源使用情况自动扩展应用程序,以满足流量的增加需求。  
  4. 自愈能力:Kubernetes具有自愈能力,可以自动检测并替换不健康的容器,确保应用程序的高可用性。  
  5. 存储编排:Kubernetes可以管理存储系统,并为应用程序提供持久化存储的解决方案。  
  6. 配置和密钥管理:Kubernetes支持管理应用程序的配置和密钥,确保安全性和灵活性。  
  7. 水平扩展:Kubernetes可以根据应用程序的需求动态地调整副本数量,实现水平扩展。  

1、容器技术演变  

添加图片注释,不超过 140 字(可选)

传统部署时代: 早期,各个组织是在物理服务器上运行应用程序。 由于无法限制在物理服务器中运行的应用程序资源使用,因此会导致资源分配问题。 例如,如果在同一台物理服务器上运行多个应用程序, 则可能会出现一个应用程序占用大部分资源的情况,而导致其他应用程序的性能下降。 一种解决方案是将每个应用程序都运行在不同的物理服务器上, 但是当某个应用程序资源利用率不高时,剩余资源无法被分配给其他应用程序, 而且维护许多物理服务器的成本很高。  虚拟化部署时代: 因此,虚拟化技术被引入了。虚拟化技术允许你在单个物理服务器的 CPU 上运行多台虚拟机(VM)。 虚拟化能使应用程序在不同 VM 之间被彼此隔离,且能提供一定程度的安全性, 因为一个应用程序的信息不能被另一应用程序随意访问。  虚拟化技术能够更好地利用物理服务器的资源,并且因为可轻松地添加或更新应用程序, 而因此可以具有更高的可扩缩性,以及降低硬件成本等等的好处。 通过虚拟化,你可以将一组物理资源呈现为可丢弃的虚拟机集群。  每个 VM 是一台完整的计算机,在虚拟化硬件之上运行所有组件,包括其自己的操作系统。  容器部署时代: 容器类似于 VM,但是更宽松的隔离特性,使容器之间可以共享操作系统(OS)。 因此,容器比起 VM 被认为是更轻量级的。且与 VM 类似,每个容器都具有自己的文件系统、CPU、内存、进程空间等。 由于它们与基础架构分离,因此可以跨云和 OS 发行版本进行移植。  2、为什么需要 Kubernetes,它能做什么?  容器是打包和运行应用程序的好方式。在生产环境中, 你需要管理运行着应用程序的容器,并确保服务不会下线。 例如,如果一个容器发生故障,则你需要启动另一个容器。 如果此行为交由给系统处理,是不是会更容易一些?  这就是 Kubernetes 要来做的事情! Kubernetes 为你提供了一个可弹性运行分布式系统的框架。 Kubernetes 会满足你的扩展要求、故障转移你的应用、提供部署模式等。 例如,Kubernetes 可以轻松管理系统的 Canary (金丝雀) 部署。  Kubernetes 为你提供:  

  • 服务发现和负载均衡Kubernetes 可以使用 DNS 名称或自己的 IP 地址来暴露容器。 如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。  
  • 存储编排Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。  
  • 自动部署和回滚你可以使用 Kubernetes 描述已部署容器的所需状态, 它可以以受控的速率将实际状态更改为期望状态。 例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。  
  • 自动完成装箱计算你为 Kubernetes 提供许多节点组成的集群,在这个集群上运行容器化的任务。 你告诉 Kubernetes 每个容器需要多少 CPU 和内存 (RAM)。 Kubernetes 可以将这些容器按实际情况调度到你的节点上,以最佳方式利用你的资源。  
  • 自我修复Kubernetes 将重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器, 并且在准备好服务之前不将其通告给客户端。  
  • 密钥与配置管理Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 SSH 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。  

三、Docker vs K8s  

添加图片注释,不超过 140 字(可选)


添加图片注释,不超过 140 字(可选)

容器引擎 vs. 容器编排器:

  • Docker是一个容器引擎,负责在单个主机上创建、运行和管理容器。它允许开发者将应用程序和其依赖项打包为一个轻量级、可移植的容器,从而实现应用程序的快速部署和运行。
  • Kubernetes是一个容器编排器,用于管理跨多个主机的容器集群。它的主要目标是自动化容器化应用程序的部署、扩展和运维,帮助开发者处理复杂的应用程序部署和管理任务。

支持的镜像类型:

  • Docker主要支持Docker镜像。Docker镜像是由Dockerfile定义的,其中包含了应用程序和其依赖项的打包信息。
  • Kubernetes不限制使用特定类型的容器镜像,它可以支持多种类型的容器镜像,包括Docker镜像、containerd镜像等。这使得Kubernetes可以与不同的容器运行时集成。

镜像定义方式:

  • Docker使用Dockerfile来定义镜像的构建规则,Dockerfile中包含了构建镜像所需的步骤和依赖项。
  • Kubernetes使用YAML或JSON文件来定义资源对象,其中包括Pod、Service、Deployment等。资源对象中通常包含容器镜像的信息,用于定义容器的运行方式和配置。

四、Docker Swarm vs K8s  k8s和Docker Swarm都是流行的容器编排工具,但它们有不同的特点和优势。  ● k8s是一个独立于docker的项目,由Google创建并由云原生计算基金会(CNCF)管理。它支持多种容器运行时,如docker、rkt、containerd等。Docker Swarm是docker公司的容器编排系统,使用标准的docker API接口,与docker深度绑定。  ● k8s提供了更多的功能和灵活性,如服务发现、健康检查、自动伸缩、更新升级、资源管理等。它还支持应用模板配置、标签选择器、服务要求等,可以实现复杂的调度策略。docker swarm相对简单直接,主要侧重于容器的部署和扩展。  ● k8s有一个更大更活跃的社区,有很多开源项目和企业支持。它已经成为容器编排领域的事实标准。docker swarm相对较小较新,社区活跃度不高。  ● k8s的学习曲线比较陡峭,需要掌握很多概念和命令。它的安装和配置也比较复杂。docker swarm使用简单方便,容易集成到现有系统。它的安装和配置也比较简单。  五、K8s弃用Docker?  k8s官方对于去掉docker的原因有以下几点解释:  

  • k8s去掉的其实是dockershim,这是一个在kubelet和docker之间的适配器,用来将docker的接口转换为k8s所需的CRI(容器运行时接口)。这样做是为了简化k8s的架构,提高性能和安全性,以及支持更多的容器运行时。  
  • k8s并没有完全弃用docker,而是弃用了docker作为容器运行时的支持。这意味着k8s将不再使用docker来创建和运行容器,而是使用其他符合CRI标准的运行时,如containerd或CRI-O123。这样做的原因是docker不符合CRI标准,而且需要一个叫做dockershim的中间层来适配k8s的API。  
  • k8s去掉docker并不意味着docker就没有用了,或者你不能或者不应该用docker作为开发工具。docker仍然是构建容器镜像的非常有用的工具,而且它生成的镜像是符合OCI(开放容器倡议)标准的。这意味着任何用docker构建的镜像都可以在k8s中与其他容器运行时正常工作。所以你不需要担心你的docker镜像会失效或者不兼容。


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
15天前
|
人工智能 弹性计算 运维
ACK Edge与IDC:高效容器网络通信新突破
本文介绍如何基于ACK Edge以及高效的容器网络插件管理IDC进行容器化。
|
17天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
161 77
|
1天前
|
存储 Kubernetes Docker
Kubernetes(k8s)和Docker Compose本质区别
理解它们的区别和各自的优势,有助于选择合适的工具来满足特定的项目需求。
40 19
|
10天前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
31 3
实战~如何组织一个多容器项目docker-compose
|
1天前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
16天前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
16天前
|
供应链 安全 Cloud Native
阿里云容器服务助力企业构建云原生软件供应链安全
本文基于2024云栖大会演讲,探讨了软件供应链攻击的快速增长趋势及对企业安全的挑战。文中介绍了如何利用阿里云容器服务ACK、ACR和ASM构建云原生软件供应链安全,涵盖容器镜像的可信生产、管理和分发,以及服务网格ASM实现应用无感的零信任安全,确保企业在软件开发和部署过程中的安全性。
|
16天前
|
人工智能 Kubernetes Cloud Native
阿里云容器服务,智算时代云原生操作系统
2024云栖大会,阿里巴巴研究员易立分享了阿里云容器服务的最新进展。容器技术已成为云原生操作系统的基石,支持多样化的应用场景,如自动驾驶、AI训练等。阿里云容器服务覆盖公共云、边缘云、IDC,提供统一的基础设施,助力客户实现数字化转型和技术创新。今年,阿里云在弹性计算、网络优化、存储解决方案等方面进行了多项重要升级,进一步提升了性能和可靠性。
|
16天前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。
|
26天前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序