教程丨使用 Docker Compose 将 APP 快速部署到 Kubernetes

教程丨使用 Docker Compose 将 APP 快速部署到 Kubernetes

出品丨Docker公司(ID:docker-cn)

编译丨小东

每周一、三、五晚6点10分  与您不见不散


说在前面


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

教程丨使用 Docker Compose 将 APP 快速部署到 Kubernetes


使用 Docker 来构建容器化应用程序的开发人员通常会构建 Docker Compose 文件来部署它们。随着 Kubernetes 加入到 Docker 的产品线,一些开发人员想要利用现有的 Compose 文件将这些应用程序部署到 Kubernetes 。当然还有 Kompose 的存在,但它是一个翻译层,而且需要您分别来管理这两个文件。那么有没有一种方法可以保持原生的基于 Docker 的工作流程呢?


当然有!通过桌面上的 Docker (以及Docker企业版),您就可以使用 Docker compose 直接将应用程序部署到 Kubernetes 集群上。

教程丨使用 Docker Compose 将 APP 快速部署到 Kubernetes


以下是它的工作原理:


假设我有一个简单的 Docker compose 文件,如下面示例所描述,有三层应用程序分别是:Web 前端、words 工作进程和数据库。


请注意,我们 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 Compose 将 APP 快速部署到 Kubernetes


我使用的是 Docker for Mac ,并将 Kubernetes 设置为我的默认编排工具。要部署该应用程序,我只需要简单的使用“docker stack deploy”命令来部署我们预备的 compose 文件(“words.yaml”)和应用栈(“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

教程丨使用 Docker Compose 将 APP 快速部署到 Kubernetes


使用“kubectl”命令,可以分别查看已创建的 compose 文件的 deployments 、 pods 和 services 的详细信息。


 $ 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


当查看上面的 services 列表时,您可能会发现乍一看有点奇怪。因为在 services 列表中,既有 web 服务又有 web-published 服务。其实,Web 服务负责应用程序的内部通信,而 web-published 服务(这是一个由 Docker for Mac 中的 v*nkit 工具所支持的负载均衡器)会将我们的 Web 前端向全世界公开。

教程丨使用 Docker Compose 将 APP 快速部署到 Kubernetes


所以,如果我们访问http:// localhost:80,我们就可以看到应用程序正在运行。您也可以在下面这个视频中看到整个过程:



教程丨使用 Docker Compose 将 APP 快速部署到 Kubernetes


现在,如果我们想要删除服务,您可能会想到使用 kubectl 来删除部署。但是您实际上只需要使用“docker stack rm”命令就可以了,并且它会删除所有在我们引入应用栈时创建的组件,如下所示:


$ docker stack rm words

Removing stack: words

 

$ kubectl get deployment

No resources found

 

同样的,对我来说最酷的是相同的过程可以在 Docker EE 上应用,我只需要将 Compose 文件直接部署到 Docker 企业版的 UI 中就可以了。请持续关注 Docker 官方公众号“docker-cn”,我会在近期更新相关教程。

教程丨使用 Docker Compose 将 APP 快速部署到 Kubernetes


想自己尝试一下吗?登陆 https://www.docker.com/docker-mac 获取 Docker for Mac 版本,或者登陆 https://www.docker.com/docker-windows 获取 Docker for Windows 版本。


教程丨使用 Docker Compose 将 APP 快速部署到 Kubernetes


点击下列标题,阅读更多干货



如果本文对你有帮助,欢迎分享到朋友圈!获取更多Docker实用技巧,扫描下图二维码!

 教程丨使用 Docker Compose 将 APP 快速部署到 Kubernetes