如何使用Docker Machine创建Swarm集群 – Docker.Ren

摘要

[db:摘要]

【编者的话】之前,Docker的安装流程非常复杂,用户需要登录到相应的主机上,根据官方的安装和配置指南来安装Docker,并且不同的操作系统的安装步骤也是不一样的。而有了Machine后,不管是在笔记本、虚拟机还是公有云实例上,用户仅仅需要一个命令就轻松搞定安装。当然那你需要先安装Docker Machine。Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。Swarm是Docker公司在2014年12月初发布的一套较为简单的工具,用来管理Docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机。通过本篇文章,让我们来了解一下Docker Machine,以及如何使用Docker Machine创建Swarm集群。@Container容器技术大会将于6月4日在上海光大会展中心国际大酒店举办,来自Rancher、携程、PPTV、蚂蚁金服、京东、浙江移动、海尔电器、唯品会、eBay、道富银行、麻袋理财、土豆网、阿里百川、腾讯游戏、数人云、点融网、华为、轻元科技、中兴通讯、中国民生银行等公司的技术负责人将带来实践经验分享,欢迎感兴趣的同学参加。与Docker Compose一样,Docker Machine 也是旨在帮助开发人员快速使用Docker的工具。具体地说,就是Machine允许Windows和OS X用户在诸如 Amazon AWS、Google Container Engine、Azure、DigitalOcean等公有云上远程创建Docker主机。Docker客户端安装在本地,你就可以通过它远程访问Docker的API,能达到好像Docker引擎就运行本地一样的体验。Machine需要安装在客户机本地,是用来创建远程Docker主机的单独二进制文件。本地Docker客户端甚至可以是运行在VirtualBox虚拟机上的Docker。它的源代码托管在GitHub。在这篇文章中,我先简单介绍Docker Machine,再讲述怎么用它创建Swarm Docker集群。一旦你从单机测试过度到多机器分布式部署,这工具相当有用。Docker Compose用来启动你在Swarm集群中的应用,这个我会在以后的文章中详细叙述。首先,你的机器上应该安装Docker Machine,官方的文档是最好的参考工具。第一步,我将介绍一个此文档中高亮的执行命令。安装Docker Machine与安装Docker Compose相似,你可以从GitHub的release分支中获取Machine的二进制安装文件,也可以下载源代码自己编译安装或者安装Docker ToolBox,ToolBox打包了所有的Docker工具,提供UI界面的安装。例如,在OS X 机器上,你可以在Github上获取安装文件,并存储在 /usr/local/bin/docker-machine路径下,然后赋予可执行权限,可以通过测试版本的方式测试是否安装正确。例如:$ sudo curl -L https://github.com/docker/machine/releases/download/v0.6.0/docker-machine-`uname -s`-`uname -m` > /usr/local/bin/docker-machine$ sudo chmod +x /usr/local/bin/docker-machine$ docker-machine versiondocker-machine version 0.6.0, build e27fb87因为Machine创建的实例在云端,Docker 引擎安装在云端的Docker中,所以要设置好客户端和Docker引擎正确的TSL验证权限。但是你还是要先要确认你本地是否安装了Docker。如果本地还未安装,在OS X中可以通过Homebrew安装Docker。$ brew install docker现在应该准备好创建第一个Docker Machine了。使用Docker Machine像我先前提及的,你可以用Machine在公有云平台上开启一个实例,但是你也可以在VirtualBox等虚拟机上安装Docker引擎到Docker中。在本地客户端,就好像所有的Docker 引擎运行在本地本地一样。在深入使用公有云服务之前,先让我们体验测试一下安装在VirtualBox上。docker-machine有一个Create命令,可以把名字传递进入命令,指定创建的名字。如果还未创建任何实例,可以指定创建名字为default,下面的命令演示创建的过程:$ docker-machine create -d virtualbox defaultRunning pre-create checks...<snip>Docker is up and running!To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env default命令执行后Machine就被创建,你将看到一个default的VM运行在VirtualBox上。用这个Machine可以配置本地Docker客户端,用到env命令完成:$ docker-machine env defaultexport DOCKER_TLS_VERIFY="1"export DOCKER_HOST="tcp://192.168.99.102:2376"export DOCKER_CERT_PATH="/Users/sebastiengoasguen/.docker/machine/machines/default"export DOCKER_MACHINE_NAME="default"# Run this command to configure your shell: # eval $(docker-machine env default)$ eval $(docker-machine env default)$ docker ps当然,你的IP地址可能会不同,证书的路径也可能会不同。Docker客户端将会使用设置的相同的环境变量通过Docker API与运行在上面的机器互相通信。设置完成后,就可以在本地机器访问远程Docker。在这个阶段,你就可以在OS X或者Windows上开启容器。的确,你可以使用相同的命令在不同的共有云平台启动Docker,也能启动Docker集群。每一个云平台的提供者都有自己完备的参考文档,如果你选择了其中的一家服务,请确保检查如何设置一些关键变量:例如权限秘钥或者令牌。这些可以工作设置环境变量实现,也可以直接通过docker-machine命令的参数传递。使用Docker Machine创建Swarm集群有一个关键点,我们目前只有一个主机,如果真的想运行大规模分布式应用程序,我们将访问Docker主机的一个集群以便这些集群可以运行多个主机。对Docker来讲,一个Docker集群就叫做Swarm。谢天谢地,Docker Machine允许创建Swarm。不过请注意,你还可以使用比较有名的配置管理工具诸如Ansible、Chef、Puppet来创建集群,也可以使用其他的一些工具,比如Terraform。在这一段,为了利用网络覆盖我们的集群,我直接介绍一些比较高级的配置方法。后端支持很过键值对的存储,但是这里我们使用了Consul,通常consul作为容器运行在我们创建的Docker Machine上,对主机暴露端口号。额外的节点(例如一个主节点和几个副节点)通过Docker Machine开始运行。他们每一个都会到达键值对存储,这样有助于管理集群,管理网络的覆盖。简单的设置你可以参考使用手册,这里不再赘述。现在我们在DigitalOcean创建一个Machine。你必须要设置一个访问Token,也不要忘了检查下公有云平台提供的指导手册。跟VirtualBox创建不同的地方在设置集群名字。一旦机器已经正在运行,环境变化设置完成,你就可以在主机上创建一个Consul容器。下面是一下操作:$ docker-machine create -d digitalocean kvstore$ eval $(docker-machine env kvstore)$ docker run --name consul --restart=always -p 8400:8400 -p 8500:8500 \-p 53:53/udp -d progrium/consul -server -bootstrap-expect 1 -ui-dir /ui既然我们的键值对存储正在运行,我们就准备一个swarm主节点。我们可以使用Docker Machine中的--swarm 和swarm-master选项完成这个操作。用我们创建的键值对配置Docker引擎。$ docker-machine create -d digitalocean --swarm --swarm-master \ --swarm-discovery="consul://$(docker-machine ip kvstore):8500" \--engine-opt="cluster-store=consul://$(docker-machine ip kvstore):8500" \ --engine-opt="cluster-advertise=eth0:2376" swarm-master一旦swarm master运行,你就可以增加你想要的更过的节点。例如下面这一个,移除了命令中的--swarm-master选项:$ docker-machine create -d digitalocean --swarm \--swarm-discovery="consul://$(docker-machine ip kvstore):8500" \ --engine-opt="cluster-store=consul://$(docker-machine ip kvstore):8500" \ --engine-opt="cluster-advertise=eth0:2376" swarm-node-1现在你就有一个运行在DigitalOcean上的Docker集群了。使用docker-machine ls`查看输出,你会查到默认的机器运行在VirtualBox ,还有其他几台机器,包括键值对存储,swarm master,还有你创建的几个节点。$ docker-machine lsNAME           ACTIVE      DRIVER         URL   SWARM                   DOCKER    default        -           virtualbox     ...                           v1.10.3   kvstore        -           digitalocean   ...                           v1.10.3   swarm-master   * (swarm)   digitalocean   ...   swarm-master (master)   v1.10.3   swarm-node-1   -           digitalocean   ...   swarm-master            v1.10.3Machine 是非常有用的,使得机器之间非常容易转换,也帮助我们测试本地的机器和部署到云端的机器。使用集群或者本地安装使用docker-machine ls命令输出查询到运行中的Machine都是独立的。这就意味着如果有两个终端其中一个设置默认基于VirtualBox机器,这个就是那个正在运行的,另外的一台就指向Swam master。这样通过终端就可以实现转换Docker的endpoints。同样我们可以用这种方式在swarm上测试Docker compose本地文件。指向你的Swarm,跟单个主机的命令语法略有不同,你需要传递--swarm选项到docker env,例如:$ docker-machine env --swarm swarm-master$ eval $(docker-machine env --swarm swarm-master)使用docker info可以检查你的集群是否正确。你可以看到你的master节点和其他节点的信息。例如:$ docker info<snip..>Nodes: 2swarm-master: 45.55.180.111:2376└ Status: Healthy└ Containers: 2└ Reserved CPUs: 0 / 1└ Reserved Memory: 0 B / 513.4 MiB└ Labels: executiondriver=native-0.2, kernelversion=4.2.0-27-generic, operatingsystem=Ubuntu 15.10, provider=digitalocean, storagedriver=aufs└ Error: (none)└ UpdatedAt: 2016-03-20T17:59:15Zswarm-node-1: 104.131.180.199:2376└ Status: Healthy└ Containers: 1└ Reserved CPUs: 0 / 1└ Reserved Memory: 0 B / 513.4 MiB└ Labels: executiondriver=native-0.2, kernelversion=4.2.0-27-generic, operatingsystem=Ubuntu <snip…> 在这个例子中我用了基于键值对存储发现机制的Consul ,你可能还想了解其他的机制。既然我们已经有创建好的Swarm,我们就可以在集群上仔细研究。为了确保容器之间的相互通信,而不用关注正在运行的节点,在下篇文章中重点讲一下Docker中基于libnetwork 如何覆盖网络,附加一部分Docker引擎内容。如果想获取更多的信息,请关注libnetwork项目。原文链接:How to Use Docker Machine to Create a Swarm Cluster(翻译:张亚龙)

docker

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: