Docker Desktop 版本助力 Kubernetes 集群,一键部署不再是梦

简介: 对于那些还没有尝试过 Docker EE 2.0 的用户来说,这篇文章的重点在于详细介绍了如何在 Docker for Desktops 中使用 Docker compose 文件来将应用程序直接部署到 Kubernetes 集群上。

screenshot

本文首发自“Docker公司”公众号(ID:docker-cn)
编译丨小东
每周一、三、五 与您不见不散!


上周,KubeCon 欧洲大会在哥本哈根成功举办,让我们来回顾那些在 Docker 和 Kubernetes 读者中最受欢迎的帖子吧。对于那些还没有尝试过 Docker EE 2.0 的用户来说,这篇文章的重点在于详细介绍了如何在 Docker for Desktops 中使用 Docker compose 文件来将应用程序直接部署到 Kubernetes 集群上。


如果在您的桌面(Docker for Mac 或 Docker for Windows Desktop)上运行的是 Docker 的尝鲜版本,那么现在您就可以通过点击一个按钮来构建单节点的 Kubernetes 集群了。虽然我不是开发人员,但我认为这对于已经在 Macbook 或 Windows 笔记本电脑上使用 Docker 的数百万开发人员来说是个好消息,因为他们现在已经拥有了完全兼容的 Kubernetes 集群,无需安装任何其他辅助工具。

使用 Docker 来构建容器化应用程序的开发人员经常会使用构建 Docker Compose 文件的方式来部署应用程序。随着将 Kubernetes 集成到 Docker 的产品线,某些开发人员想要利用现有的 Docker Compose 文件,在 Kubernetes 中来部署这些应用程序。

通过 Docker Desktop(以及 Docker 企业版),您可以使用 Docker Compose 将应用程序直接部署到 Kubernetes 集群上。


下面我将详细介绍它的工作原理:

假设我有一个简单的 Docker Compose 文件,如下面所示,它包含三层应用:Web、Words 和 db。

注意:我们的 Web 前端设置为从主机上的 80 端口路由到服务器的 80 端口(以及随后的底层容器)。另外,我们的“Words”服务将会开启 5 个副本。

services:

web:

build: web

image: dockerdemos/lab-web

volumes:

- "./web/static:/static"

ports:

- "80:80"

words:

build: words

image: dockerdemos/lab-words

deploy:

replicas: 5

endpoint_mode: dnsrr

resources:

limits:

memory: 16M

reservations:

memory: 16M

db:

build: db

image: dockerdemos/lab-db

我使用的是 Docker for Mac 版本,并将 Kubernetes 设置为我的默认编排工具。为了部署这个应用程序,我仅用了“docker stack deploy”命令,并向其提供了一个名为“words.yaml”的 Compose 文件以及一个名为“words”的应用栈。真正让人感到惊喜的是,它与 Docker Swarm 所使用的命令完全相同,如下所示:

$ docker stack deploy --compose-file words.yaml words

Stack words was created

Waiting for the stack to be stable and running...

- Service db has one container running

- Service words has one container running

- Service web has one container running

Stack words is stable and running

使用 Compose 文件创建的 deployment、pods 和 services 都可以通过使用“kubectl”命令来查看,如下所示:

$ kubectl get deployment

NAME     DESIRED  CURRENT  UP-TO-DATE  AVAILABLE  AGE

db       1        1        1           1          2m

web      1        1        1           1          2m

words    5        5        5           5          2m

$ kubectl get pods

NAME                    READY    STATUS   RESTARTS  AGE

db-5489494997-2krr2     1/1      Running  0         2m

web-dd5755876-dhnkh     1/1      Running  0         2m

words-86645d96b7-8whpw  1/1      Running  0         2m

words-86645d96b7-dqwxp  1/1      Running  0         2m

words-86645d96b7-nxgbb  1/1      Running  0         2m

words-86645d96b7-p5qxh  1/1      Running  0         2m

words-86645d96b7-vs8x5  1/1      Running  0         2m

$ kubectl get services

NAME           TYPE         CLUSTER-IP      EXTERNAL-IP   PORT(S)      AGE

db             ClusterIP    None                   55555/TCP    2m

web            ClusterIP    None                   55555/TCP    2m

web-published  LoadBalancer 10.104.198.84       80:32315/TCP 2m

words          ClusterIP    None                   55555/TCP    2m

如果您查看了上面的服务列表,那么您可能会注意到那些乍一看有点奇怪的事情。没错就是 “web” 和“web-published”服务。其中“web” 服务负责应用程序内部通信,而“web-published”服务(这是一个由 Docker for Mac 中的 vpnkit 所支持的负载均衡器)将会把我们的 Web 前端展现给全世界。


所以如果我们现在访问 http:// localhost:80,那么我们就可以看到正在运行的应用程序了。您可以从下列渠道在 Elton 录制的视频(全长 8 分钟)中看到整个过程:

Docker 官方入口:http://t.cn/R3Z1WJq


screenshot

现在,如果我们想要删除服务,您可能首先想到的是使用“kubectl”命令来删除部署。但是,实际上您可以使用“docker stack rm”命令,该命令将删除我们引入应用栈时所创建的所有应用,如下所示:

$ docker stack rm words

Removing stack: words

$ kubectl get deployment

No resources found

对我来说,最惊喜的就是整个过程都可以使用 Docker EE来完成,我只需要将 Compose 文件直接部署到 Docker EE 的用户界面就可以了。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
5天前
|
消息中间件 监控 RocketMQ
Docker部署RocketMQ5.2.0集群
本文详细介绍了如何使用Docker和Docker Compose部署RocketMQ 5.2.0集群。通过创建配置文件、启动集群和验证容器状态,您可以快速搭建起一个RocketMQ集群环境。希望本文能够帮助您更好地理解和应用RocketMQ,提高消息中间件的部署和管理效率。
152 91
|
6天前
|
存储 NoSQL Redis
Docker 部署 Redis
在使用 Docker 部署 Redis 时,为实现数据持久化,需正确挂载容器内的数据目录到宿主机。推荐命令如下: ``` docker run -d --name redis -v /mnt/data/redis:/data -p 6379:6379 redis ``` 该命令将宿主机的 `/mnt/data/redis` 目录挂载到容器的 `/data` 目录,确保 Redis 数据持久化。此路径更通用,适合大多数场景。避免使用不匹配的挂载路径,如 `/var/lib/redis` 或 `/mnt/data/redis` 到非默认目录,以防止数据无法正确持久化。
|
21天前
|
存储 关系型数据库 MySQL
美团面试:MySQL为什么 不用 Docker部署?
45岁老架构师尼恩在读者交流群中分享了关于“MySQL为什么不推荐使用Docker部署”的深入分析。通过系统化的梳理,尼恩帮助读者理解为何大型MySQL数据库通常不使用Docker部署,主要涉及性能、管理复杂度和稳定性等方面的考量。文章详细解释了有状态容器的特点、Docker的资源隔离问题以及磁盘IO性能损耗,并提供了小型MySQL使用Docker的最佳实践。此外,尼恩还介绍了Share Nothing架构的优势及其应用场景,强调了配置管理和数据持久化的挑战。最后,尼恩建议读者参考《尼恩Java面试宝典PDF》以提升技术能力,更好地应对面试中的难题。
|
13天前
|
JavaScript 前端开发 Docker
如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
通过这些步骤,可以确保您的Next.js应用在多核服务器上高效运行,并且在Docker环境中实现高效的容器化管理。
72 44
|
1月前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
58 23
|
25天前
|
SQL Java Maven
docker部署apollo
docker部署apollo步骤
|
1月前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
49 22
|
1月前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
66 25
|
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 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
178 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档