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

本文介绍了如何使用Docker Compose直接将应用程序部署到Kubernetes集群,无需额外工具。通过Docker for Mac或Windows,开发人员可以使用熟悉的`docker stack deploy`命令,保持基于Docker的工作流程不变。文中以一个包含Web前端、words工作进程和数据库的三层应用为例,展示了从Compose文件到Kubernetes服务的转换过程,并解释了服务的部署、状态检查以及如何删除服务。
摘要由CSDN通过智能技术生成

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

编译丨小东

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


说在前面


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



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


当然有!通过桌面上的 Docker (以及Docker企业版),您就可以使用 Docker compose 直接将应用程序部署到 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 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


使用“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 前端向全世界公开。


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


class="video_iframe" height="502.5" width="670" frameborder="0" data-src="http://v.qq.com/iframe/player.html?vid=c0542m8avbq&width=670&height=502.5&auto=0" allowfullscreen="" data-vidtype="2" style="display: block; width: 670px !important; height: 502.5px !important;" data-vh="502.5" data-vw="670" src="http://v.qq.com/iframe/player.html?vid=c0542m8avbq&width=670&height=502.5&auto=0"/>



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


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



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



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

 

Docker ComposeDocker 官方提供的一个工具,用于定义和运行多个 Docker 容器的编排文件(通常是 YAML 或 JSON 格式)。它简化了在开发环境管理和部署多容器应用程序的过程。以下是使用 Docker Compose 的基本步骤: 1. **创建`docker-compose.yml`文件**: 在项目根目录下创建一个 `docker-compose.yml` 文件,这个文件会包含应用所需的每个服务的配置,包括镜像名称、端口映射、环境变量、网络设置等。 ```yaml version: '3' services: web: image: nginx:latest ports: - "80:80" networks: - mynetwork app: build: ./app ports: - "5000:5000" depends_on: - db networks: - mynetwork networks: mynetwork: ``` 2. **定义服务和依赖**: - `web` 服务使用 Nginx 镜像,监听 80 端口,并连接到名为 `mynetwork` 的网络。 - `app` 服务定义为从本地 `./app` 目录构建,监听 5000 端口,并依赖于 `db` 服务。 3. **启动和停止容器**: - 在终端,进入项目目录执行 `docker-compose up` 启动所有服务。 - 若要停止并删除所有容器,使用 `docker-compose down`。 4. **管理环境变量**: 可以在 `docker-compose.yml` 的 `environment` 字段或通过 `.env` 文件来设置环境变量。 5. **部署和扩展**: Docker Compose 适用于开发阶段快速迭代,但如果是生产环境,可能需要使用更复杂的 KubernetesDocker Swarm 等工具进行部署和扩展。 相关问题: 1. Docker Compose 除了YAML文件外,还支持哪些格式? 2. 如何在Docker Compose设置服务间的通信? 3. Docker Compose如何与Docker Swarm集成以部署到多主机上?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值