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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dt763C/article/details/79479498

640?wx_fmt=jpeg

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

编译丨小东

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


说在前面


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

640?wx_fmt=png


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


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

640?wx_fmt=png


以下是它的工作原理:


假设我有一个简单的 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

640?wx_fmt=png


我使用的是 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

640?wx_fmt=png


使用“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 中的 vpnkit 工具所支持的负载均衡器)会将我们的 Web 前端向全世界公开。

640?wx_fmt=png


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



640?wx_fmt=png


现在,如果我们想要删除服务,您可能会想到使用 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”,我会在近期更新相关教程。

640?wx_fmt=png


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


640?wx_fmt=png


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



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

 640?wx_fmt=png

没有更多推荐了,返回首页