出品丨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实用技巧,扫描下图二维码!