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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
容器镜像服务 ACR,镜像仓库100个 不限时长
网络型负载均衡 NLB,每月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搭建和管理企业级网站应用
目录
相关文章
|
6天前
|
Ubuntu API 网络虚拟化
ubuntu22 编译安装docker,和docker容器方式安装 deepseek
本脚本适用于Ubuntu 22.04,主要功能包括编译安装Docker和安装DeepSeek模型。首先通过Apt源配置安装Docker,确保网络稳定(建议使用VPN)。接着下载并配置Docker二进制文件,创建Docker用户组并设置守护进程。随后拉取Debian 12镜像,安装系统必备工具,配置Ollama模型管理器,并最终部署和运行DeepSeek模型,提供API接口进行交互测试。
129 15
|
7天前
|
Cloud Native Serverless 数据中心
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
ACK One注册集群已正式支持ACS(容器计算服务)算力,为企业的容器化工作负载提供更多选择和更强大的计算能力。
|
29天前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
针对本地存储和 PVC 这两种容器存储使用方式,我们对 ACK 的容器存储监控功能进行了全新升级。此次更新完善了对集群中不同存储类型的监控能力,不仅对之前已有的监控大盘进行了优化,还针对不同的云存储类型,上线了全新的监控大盘,确保用户能够更好地理解和管理容器业务应用的存储资源。
117 21
|
1月前
|
存储 监控 对象存储
ACK容器监控存储全面更新:让您的应用运行更稳定、更透明
介绍升级之后的ACK容器监控体系,包括各大盘界面展示和概要介绍。
|
1月前
|
存储 运维 Kubernetes
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
飞轮科技推出了 Doris 的 Kubernetes Operator 开源项目(简称:Doris Operator),并捐赠给 Apache 基金会。该工具集成了原生 Kubernetes 资源的复杂管理能力,并融合了 Doris 组件间的分布式协同、用户集群形态的按需定制等经验,为用户提供了一个更简洁、高效、易用的容器化部署方案。
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
|
1月前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
160 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
1月前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
202 11
|
1月前
|
人工智能 运维 监控
容器服务Kubernetes场景下可观测体系生产级最佳实践
阿里云容器服务团队在2024年继续蝉联Gartner亚洲唯一全球领导者象限,其可观测体系是运维的核心能力之一。该体系涵盖重保运维、大规模集群稳定性、业务异常诊断等场景,特别是在AI和GPU场景下提供了全面的观测解决方案。通过Tracing、Metric和Log等技术,阿里云增强了对容器网络、存储及多集群架构的监控能力,帮助客户实现高效运维和成本优化。未来,结合AI助手,将进一步提升问题定位和解决效率,缩短MTTR,助力构建智能运维体系。
|
2月前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
96 8
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
2月前
|
存储 Kubernetes Docker
Kubernetes(k8s)和Docker Compose本质区别
理解它们的区别和各自的优势,有助于选择合适的工具来满足特定的项目需求。
232 19