手把手教您用 Docker Compose 将应用程序部署到 Kubernetes (附完整代码)

手把手教您用 Docker Compose 将应用程序部署到 Kubernetes (附完整代码)

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

编译丨小东

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


说在前面


在2017年 DockerCon 欧洲大会上, Wordsmith 作为一个演示项目呈现在众多观众面前。同时, Docker 公司也宣布将 Kubernetes 集成到 Docker 平台。今天,我将带大家一起用 Docker Compose 将应用程序部署到 Kubernetes ,文中所有的代码都可以点击文尾处“阅读原文获取。


手把手教您用 Docker Compose 将应用程序部署到 Kubernetes (附完整代码)

手把手教您用 Docker Compose 将应用程序部署到 Kubernetes (附完整代码)


用于演示的应用程序跨三个容器运行,分别是:


  • db 容器 —— 用于存储“words”的数据库;

  • words 容器 —— 用于从数据库中读取“words”的 Java REST API ;

  • web 容器 —— 一个 Go web 应用程序,它用于调用 API 并将“words”构建成句子;

手把手教您用 Docker Compose 将应用程序部署到 Kubernetes (附完整代码)


构 建


从源码到构建和运行这款应用程序唯一要用到的就是 Docker 。克隆这个镜像仓库,然后使用 Docker Compose 来构建全部镜像,如下所示:

 

cd k8s-wordsmith-demo

docker-compose build


注:或者,您可以使用 “docker-compose pull”命令从 Docker Hub 中下载预构建镜像。

手把手教您用 Docker Compose 将应用程序部署到 Kubernetes (附完整代码)


部署到 Docker 应用栈


最新版本的 Docker for Mac 内置了 Kubernetes 。


Docker 允许您使用简单的 Docker Compose 文件格式将复杂的应用程序部署到 Kubernetes 。这意味着,您可以使用“docker-compose.yml”文件将 wordsmith 应用程序部署到本地的 Kubernetes 集群。


手把手教您用 Docker Compose 将应用程序部署到 Kubernetes (附完整代码)


首先利用 docker 版本(Docker for Mac同时支持 Kubernetes 和 Docker Swarm 编排工具)来检查 Docker 是否将 Kubernetes 或 Docker Swarm 作为编排工具运行,输入以下命令:


docker version -f '{{ .Client.Orchestrator }}'


注:您可以使用 DOCKER_ORCHESTRATOR 环境变量来切换编排工具,将其设置为 kubernetes 或 swarm 。


使用 compose 文件将该应用程序部署到 Kubernetes 应用栈中,操作如下所示:


export DOCKER_ORCHESTRATOR=kubernetes

docker stack deploy wordsmith -c docker-compose.yml


Docker for Mac 包含了“kubectl”命令行,因此您可以直接使用 kubernetes 集群。检查该服务是否成功启动,你应该看到以下内容:

 

$ kubectl get svc

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

db           ClusterIP      None             <none>        55555/TCP        2m

kubernetes   ClusterIP      10.96.0.1        <none>        443/TCP          38d

web          LoadBalancer   10.107.215.211   <pending>     8080:30220/TCP   2m

words        ClusterIP      None             <none>        55555/TCP        2m


检查 Pod 是否正在运行。您应该可以看到(如下所示)用于数据库和 web 组件的 Pod ,以及专门用于“words” API 的5个 Pod (在 compose 文件中,它被指定为副本计数) 。


$ kubectl get pods

NAME                   READY     STATUS    RESTARTS   AGE

db-8678676c79-h2d99    1/1       Running   0          1m

web-5d6bfbbd8b-6zbl8   1/1       Running   0          1m

words-858f6678-6c8kk   1/1       Running   0          1m

words-858f6678-7bqbv   1/1       Running   0          1m

words-858f6678-fjdws   1/1       Running   0          1m

words-858f6678-rrr8c   1/1       Running   0          1m

words-858f6678-x9zqh   1/1       Running   0          1m


然后登录 http://localhost:8080 来查看该网站。每次刷新页面时,都会看到由 API 调用生成的不同语句。

手把手教您用 Docker Compose 将应用程序部署到 Kubernetes (附完整代码)


使用 Kubernetes Manifest 

进行部署


您可以使用 Kubernetes Manifest 将相同的应用程序部署到Kubernetes。这在 Kubernetes 部署、服务和 pod 规范方面描述了相同的应用程序。


首先删除 Kubernetes 应用栈,如下所示:


docker stack rm wordsmith


注:或者,您也可以让 Docker 应用栈继续运行,然后在新的 Kubernetes 命名空间 中创建第二个部署。


现在使用“kubectl”命令来应用 Kubernetes Manifest ,如下所示:


kubectl apply -f kube-deployment.yml


现在登录 http://localhost:8081,您将看到一个与 http://localhost:8080 相同的网站。


手把手教您用 Docker Compose 将应用程序部署到 Kubernetes (附完整代码)


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



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

 手把手教您用 Docker Compose 将应用程序部署到 Kubernetes (附完整代码)


手把手教您用 Docker Compose 将应用程序部署到 Kubernetes (附完整代码)点击下方“阅读全文”,获取代码