本文首发自 "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
现在, 如果我们想要删除服务, 您可能首先想到的是使用 "kubectl" 命令来删除部署. 但是, 实际上您可以使用 "docker stack rm" 命令, 该命令将删除我们引入应用栈时所创建的所有应用, 如下所示:
$ docker stack rm words
Removing stack: words
$ kubectl get deployment
No resources found
对我来说, 最惊喜的就是整个过程都可以使用 Docker EE 来完成, 我只需要将 Compose 文件直接部署到 Docker EE 的用户界面就可以了.
来源: https://yq.aliyun.com/articles/591202