Docker 让每个人都能够从 Docker Registry 启动一个打包好的 Docker 应用。Docker-Compose在Docker基础上解决了多容器应用之间的依赖启动问题。

Docker Compose 借助 yaml 格式的描述文件来定义一个多容器应用,然后就可以用一个简单的 docker-compose up来启动这一应用中的多个容器。然而,Compose 只能够在本地或者 Docker Swarm 集群中运行。

如果我们需要在 Swarm 之外运行怎么办?比如 Kubernetes?Compose 格式并非为分布式而诞生的,所以我们只能为选择的容器编排工具重新编写应用描述文件。

现在,在 Kubernetes Incubator 可以找到 Kompose。有了 Kompose,我们能够简单实现从 Docker Swarm 到 Kubernetes 的转换过程,这样就为 Docker 用户敞开了 Kubernetes 的大门。

Kompose 目前支持 Docker-compose v2 格式,最近还加入了持久卷所有权(PVC)、以及多容器 Pod 的支持。除了缺省的 Kubernetes 之外,我们还支持 Openshift 的发布能力。Kompose 现在还出现在了 Fedora 包中,未来也会进入 CentOS 中去。

Kompose 是一个 Golang 应用,可以从 Github 上获取。下面让我们跳过 Build 环节直接进入实例。

Kompose工具能够自动把 Docker Compose 应用转换为 Kubernetes 描述文件。利用简单的 kompose up 命令,可以在 Kubernetes 集群上启动 Compose 应用。

Docker 的留言板应用

留言板应用是 Kubernetes 的权威示例。如果要用 Docker Compose 来实现留言板,可以用下面的代码:

version: "2"services: redis-master: image: gcr.io/google_containers/redis:e2e ports: - "6379" redis-slave: image: gcr.io/google_samples/gb-redisslave:v1 ports: - "6379" environment: - GET_HOSTS_FROM=dns frontend: image: gcr.io/google-samples/gb-frontend:v4 ports: - "80:80" environment: - GET_HOSTS_FROM=dns

其中包含了三个服务:

  • 一个 Redis 主节点;
  • 一组能够横向扩展并借助 DNS 找到 Master 的 Redis 从节点;
  • 暴露于 80 端口的 PHP 前端。

这些组合在一起,让用户可以发表留言,并保存在 Redis 集群中。

要启动这个应用:

$ docker-compose -f docker-guestbook.yml up -d Creating network "examples_default" with the default driver Creating examples_redis-slave_1 Creating examples_frontend_1 Creating examples_redis-master_1

这就是一个简单的 Docker 用法,下面我肯看看如何在不重写任何东西的情况下,让这些工作在 Kubernetes 上完成。

Kompose 的留言板应用

Kompose 目前有三个主要的命令:up、down 以及 convert。为了行文方便,我们只简单说一下留言吧应用的启动。

跟 docker-compose 类似,我们可以用 kompose up 命令处理 Docker compose 文件,来启动应用:

$ kompose -f ./examples/docker-guestbook.yml up We are going to create Kubernetes deployment and service for your dockerized application. If you need more kind of controllers, use 'kompose convert' and 'kubectl create -f' instead. INFO[0000] Successfully created service: redis-master INFO[0000] Successfully created service: redis-slave INFO[0000] Successfully created service: frontend INFO[0000] Successfully created deployment: redis-master INFO[0000] Successfully created deployment: redis-slave INFO[0000] Successfully created deployment: frontend Application has been deployed to Kubernetes. You can run 'kubectl get deployment,svc' for details.

Kompose 自动把 Docker-compose 文件转为 Kuberntes 对象。缺省情况下,他会为一个 Compose 服务创建一个 Deployment 以及一个服务。另外还能自动检测当前的 Kuberntes 端点,并在上面创建对象。可以通过一系列的选项来创建 Replication Controller、Replica Set 或者 Daemon Set。

就这样完成了自动转换,如果你了解一些 Kubernetes 的话,可以用 kubectl 命令来看看集群上运行的留言板。

$ kubectl get pods,svc,deployments NAME READY STATUS RESTARTS AGE frontend-3780173733-0ayyx 1/1 Running 0 1m redis-master-3028862641-8miqn 1/1 Running 0 1m redis-slave-3788432149-t3ejp 1/1 Running 0 1m NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE frontend 10.0.0.34 <none> 80/TCP 1m redis-master 10.0.0.219 <none> 6379/TCP 1m redis-slave 10.0.0.84 <none> 6379/TCP 1m NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE frontend 1 1 1 1 1m redis-master 1 1 1 1 1m redis-slave 1 1 1 1 1m

看到了三个服务、三个 Deployment 以及三个 Pod。可以通过 frontend 服务来访问留言板应用。只不过这次的留言板,是从 Docker-Compose 文件启动的。

以上给读者快速的介绍了一下 kompose。还有很多激动人心的特性,例如创建不同类型的资源、创建 Helm Chars,甚至可以使用试验性的 Docker bundle 格式进行输入(Lachlan Evenson 的博客:using a Docker bundle with Kubernetes)。可以在我们的 KubeCon 上的视频 中看到完整的演示。

前往 Kubernetes incubator 获取 Kompose,可以帮助你轻松地把应用从 Docker Compose 迁移为 Kubernetes 集群应用。

原作者: Sebastien Goasguen
原文: http://blog.kubernetes.io/2016/11/kompose-tool-go-from-docker-compose-to-kubernetes.html
译文:http://blog.fleeto.us/translation/kompose-tool-go-docker-compose-kubernetes

Kompose: Docker-compose 到 Kubernetes 的迁移工具相关推荐

  1. Docker容器化实战第七课 容器编排Docker Compose、Docker Swarm 和 Kubernetes

    19 如何使用 Docker Compoe 解决开发环境的依赖? 前两个模块,我们从 Docker 的基本操作到 Docker 的实现原理,为你一步一步揭开了 Docker 神秘的面纱.然而目前为止, ...

  2. Docker,Docker-Compose,Docker Swarm,Kubernetes之间的区别

    来源:https://blog.csdn.net/notsaltedfish/article/details/80959913 Docker Docker 这个东西所扮演的角色,容易理解,它是一个容器 ...

  3. Docker Compose 项目

    二.Docker Compose 项目 compose项目简介 compose项目来源于之前的Fig项目,使用python代码编写.compose项目主要用于编排部署基于docker的应用.本身与do ...

  4. dockerfile、docker compose、k8s区别

    1.各自功能 dockerfile: 构建单个服务镜像,以脚本形式 docker-compose:多镜像编排容器 k8s:跨服务编排 2. 详解 2.1 dockerfile 从无到有的构建镜像,包括 ...

  5. docker三剑客之 Docker Machine Docker Compose Docker Swarm

    Docker 三剑客 一.docker machine 1.Docker Machine 简介 2.Docker Machine实践 二.docker-compose 1.docker-compose ...

  6. Docker Compose + GPU + TensorFlow 所产生的奇妙火花

    选自 hackernoon 机器之心编译 参与:黄小天.路雪 Docker 有很多优势,但是在数据科学和深度学习方面,使用 Docker 也存在一些阻碍.本文介绍了一系列 Docker 实用工具,以及 ...

  7. Docker与Docker Compose的安装以及Portainer容器管理工具

    Docker官网 概述 Docker 是一个用于开发.发布和运行应用程序的开放平台.Docker 能够将应用程序与基础架构分离,以便可以快速交付软件.使用 Docker,可以像管理应用程序一样管理基础 ...

  8. Docker Swarm vs Kubernetes

    本文讲的是Docker Swarm vs Kubernetes[编者的话]文章介绍了Docker Swarm和Kubernetes间的不同,以及优缺点. [3 天烧脑式容器存储网络训练营 | 深圳站] ...

  9. 04@Docker Compose安装Compose模板文件的使用

    文章目录 Docker Compose 一.Docker Compose的介绍 1.Compose概述 2.Docker与Docker Compose区别 二.Docker Compose的安装 1. ...

  10. Docker compose 容器编排

    1. 概述 问题:如果要使用 Docker 运行 LNMP 架构,那么 Nginx.MySQL.PHP. Linux三个服务运行在一个容器里,还是运行在多个容器里呢? 答案是都可以. 你可以分别放在三 ...

最新文章

  1. datetime类型需要指定长度吗_你真的用对数据库了吗?
  2. InetAddress类的一些方法
  3. selenium3 浏览器驱动下载及验证
  4. 数字化转型是什么?核心又是什么呢?
  5. java登录界面命令_Java命令行界面(第10部分):picocli
  6. jmap报错unknown CollectedHeap type : class sun.jvm.hotspot.gc_interface.CollectedHeap
  7. docker 在window 10 专业版的安装 .net core 在docker的部署
  8. 31个用来测试你网站各项性能的免费在线工具
  9. Docker下使用gdb
  10. SQL语句详解(一)——基本增删改操作
  11. java导出下载文件_java导出excel及下载的实现-java下载文件
  12. java技术可行性分析_java毕业设计管理系统需求分析
  13. 蓝丝雨零基础学习按键精灵VIP教程合集
  14. 三节串联锂电池充电管理芯片,IC电路图,BOM表
  15. 前端通信实现l聊天室
  16. 2017.03.24回顾 归一化 标准化 R2 date_format 共线性 系数检验 决策树
  17. ECharts地图使用
  18. 王半仙儿的日记-0005
  19. 基于微信小程序的个人电台系统的设计与实现
  20. 雅虎2011热门词汇搜索排行榜

热门文章

  1. .sln文件和.suo文件的解释
  2. Cron, PAM, OpenDNS 介绍
  3. Power Query Advanced Editor键盘快捷键
  4. Java——File类,递归
  5. 由于Web服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面(http error 404.2、iis、0x800704ec)...
  6. CentOS 安装nload(流量统计)
  7. NoSQL之HBase
  8. updatepanel 和 visibility 有一定冲突
  9. joomla2.5传统组件开发解析
  10. 数据库事务的一致性和原子性浅析