docker从零开始(四)集群初体验,docker-machine swarm
介绍
在第三节中,选择了第二节中编写的应用程序,并通过将其转换为服务来定义它应如何在生产中运行,并生成五个应用实例
在本节中,将此应用程序部署到群集上,在多台计算机上运行它。多容器,多机应用程序通过连接多台机器到称为一个“Dockerized” 容器的集群。
了解Swarm集群
swarm集群是指运行了。在此之后,您继续运行您习惯使用的Docker命令,但现在它们由群集管理器在群集上执行。群中的机器可以是物理的或虚拟的。加入群组后,它们被称为节点。
Swarm管理器可以使用多种策略来运行容器,例如“emptiest node” - 优先使用cpu利用率最低的容器。或“global”,它确保每台机器只获得指定容器的一个实例。swarm管理器根据compose配置文件中定义策略来执行。
群集管理器是群中唯一可以执行命令的机器,或授权其他机器作为工作者加入群集。工作者只是在那里提供工作能力,并且没有权力告诉任何其他机器它能做什么和不能做什么。
到目前为止,您一直在本地计算机上以单主机模式使用Docker。但是Docker也可以切换到swarm模式,这就是使用群集的能力。
立即启用群集模式使当前计算机成为群集管理器。从那时起,Docker就会运行您在swarm manager上执行的命令,而不仅仅是在当前机器上。
设置你的群
群由多个节点组成,可以是物理或虚拟机。基本概念很简单:运行docker swarm init
以启用swarm模式并使当前计算机成为群集管理器,然后docker swarm join
在其他计算机上运行 以使它们作为工作者加入群组。
在创建集群前需要熟悉 和安装 docker machine
什么是Docker Machine?
Docker Machine是一个工具,可让您在虚拟主机上安装Docker Engine,并使用docker-machine
命令管理主机。您可以使用Machine在本地Mac或Windows机器上,公司网络上,数据中心或Azure,AWS或Digital Ocean等云提供商上创建Docker主机。
使用docker-machine
命令,您可以启动,检查,停止和重新启动托管主机,升级Docker客户端和守护程序,并配置Docker客户端以与主机通信。
将Machine CLI指向正在运行的托管主机,您可以 直接在该主机上运行docker命令。例如,运行docker-machine env default
以指向被调用的主机default
,按照屏幕上的说明完成 env
设置,然后运行docker ps
,docker run hello-world
等等。
我为什么要用它?
Docker Machine使您可以在各种Linux上配置多个远程Docker主机。
我想在远程系统上配置Docker主机
Docker Engine在Linux系统上本机运行。如果你有一个Linux机器人作为主系统,并且想要运行docker
命令,那么你需要做的就是下载并安装Docker Engine。但是,如果您想要一种有效的方式在网络,云端甚至本地配置多个Docker主机,您需要Docker Machine。
无论您的主系统是Mac,Windows还是Linux,您都可以在其上安装Docker Machine并使用docker-machine
命令来配置和管理大量Docker主机。它会自动创建主机,在其上安装Docker Engine,然后配置docker
客户端。每个托管主机(“ 机器 ”)是Docker主机和已配置客户端的组合。
Docker Engine和Docker Machine有什么区别?
当人们说“Docker”时,他们通常指的是Docker Engine,由Docker守护程序组成的客户端 - 服务器应用程序,指定用于与守护进程交互的接口的REST API,以及与守护进程通信的命令行界面(CLI)客户端(通过REST API包装器)。
docker engine接受docker
来自CLI命令,例如docker run <image>
,docker ps
可以列出运行容器,docker image ls
列出镜像,等等。
Docker Machine是一个用于配置和管理Dockerized主机(带有Docker Engine的主机)的工具。通常,您在本地系统上安装Docker Machine。Docker Machine有自己的命令行客户端 docker-machine
和Docker Engine客户端docker
。您可以使用Machine在一个或多个虚拟系统上安装Docker Engine。这些虚拟系统可以是本地的(如使用Machine在Mac或Windows上的VirtualBox中安装和运行Docker Engine时)或远程(如使用Machine在云提供商上配置Dockerized主机时)。这些Dockerized机器就是托管在 Docker Machine上的机器
安装Docker machine
如果您在Linux上运行:
$ base=https://github.com/docker/machine/releases/download/v0.14.0 &&
curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
sudo install /tmp/docker-machine /usr/local/bin/docker-machine
安装bash完成脚本
Machine资源库提供了几个bash
脚本,可添加以下功能:
- 命令完成
- 一个在shell提示符下显示活动计算机的函数
- 一个函数包装器,它添加一个
docker-machine use
子命令来切换活动机器
确认版本并将脚本保存到/etc/bash_completion.d
或 /usr/local/etc/bash_completion.d
:
base=https://raw.githubusercontent.com/docker/machine/v0.14.0
for i in docker-machine-prompt.bash docker-machine-wrapper.bash docker-machine.bash
do
sudo wget "$base/contrib/completion/bash/${i}" -P /etc/bash_completion.d
done
然后,您需要source /etc/bash_completion.d/docker-machine-prompt.bash
在bash终端中运行,告诉您的设置,它可以找到docker-machine-prompt.bash
您之前下载的文件 。
要启用docker-machine
shell提示,请添加 $(__docker_machine_ps1)
到您的PS1
设置中~/.bashrc
。
PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '
下载virtualbox驱动
配置yum源 vi /etc/yum.repos.d/virtualbox.repo
[virtualbox]
name=virtualbox
baseurl=http://download.virtualbox.org/virtualbox/rpm/el/$releasever/$basearch
enabled=
gpgcheck=
repo_gpgcheck=
gpgkey=https://www.virtualbox.org/download/oracle_vbox.asc
安装virtualbox
yum install VirtualBox-5.2 -y
创建一个集群
本地计算机上的VM(MAC,LINUX,WINDOWS 7和8)
您需要一个可以创建虚拟机(VM)的虚拟机管理程序,因此请为您的计算机操作系统安装Oracle VirtualBox。
现在,docker-machine
使用VirtualBox驱动程序创建几个VM :
docker-machine create --driver virtualbox myvm1
docker-machine create --driver virtualbox myvm2
如果报下面的错:
Wrapper Docker Machine process exiting due to closed plugin server (read tcp 127.0.0.1:54344->127.0.0.1:43214: read: connection reset by peer)
Error creating machine: Error in driver during machine creation: read tcp 127.0.0.1:54344->127.0.0.1:43214: read: connection reset by peer
docker-machine create --driver virtualbox --engine-registry-mirror https://1rqn7spi.mirror.aliyuncs.com myvm1 docker-machine create --driver virtualbox --engine-registry-mirror https://1rqn7spi.mirror.aliyuncs.com myvm2
初始化SWARM并添加节点
第一台机器充当管理器,执行管理命令并验证工作人员加入群,第二台是工作人员。
您可以使用命令向VM发送命令docker-machine ssh
。指示myvm1
成为一个swarm管理器docker swarm init
并查找如下输出:
[root@docker11 ~]# docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.100"
Swarm initialized: current node (j0y6zr0u841mpm8pmxc5ldt1d) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-0qssxg0zv4oll1pnhncwjn6k3donqnemfgxb4ez9o2wiutcyb2-birg7d8tnphhqkmc2dtphf0t6 192.168.99.100:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
当其他节点需要加入以node1为领导者的群集的时候 需要携带 如上圈出来的token
join --token SWMTKN--0qssxg0zv4oll1pnhncwjn6k3donqnemfgxb4ez9o2wiutcyb2-birg7d8tnphhqkmc2dtphf0t6 192.168.99.100:
使用SSH时遇到问题?试试--native-ssh标志
Docker Machine 使用自己系统ssh,如果由于某种原因您在向Swarm管理器发送命令时遇到问题。只需--native-ssh
在调用ssh
命令时指定 标志:
如您所见,响应docker swarm init
包含一个预先配置的 docker swarm join
命令,您可以在要添加的任何节点上运行该命令。复制此命令,并将其发送到myvm2
via docker-machine ssh
以myvm2
将新群组作为工作者加入:
[root@docker11 ~]# docker-machine ssh myvm2 "docker swarm join --token SWMTKN-1-0qssxg0zv4oll1pnhncwjn6k3donqnemfgxb4ez9o2wiutcyb2-birg7d8tnphhqkmc2dtphf0t6 192.168.99.100:2377"
This node joined a swarm as a worker.
恭喜你,你已经创建了你的第一个群!
docker node ls
在管理器上运行以查看此群中的节点:
在群集群集上部署您的应用程序
困难的部分结束了。现在,您只需重复第3节中使用的过程即可部署到新的swarm上。请记住,只有群体管理员myvm1执行Docker命令; worker只是为了work。
docker-machine
为swarm管理器配置shell
到目前为止,您已经将Docker命令包装在docker-machine ssh
与VM通信中。另一种选择是运行docker-machine env <machine>
以获取并运行一个命令,该命令将当前shell配置为与VM上的Docker守护程序通信。此方法适用于下一步,因为它允许您使用本地docker-compose.yml
文件“远程”部署应用程序,而无需将其复制到任何位置。
键入docker-machine env myvm1
,然后复制粘贴并运行作为输出的最后一行提供的命令,以配置要与之通信的shell(myvm1
swarm管理器)。
[root@docker11 ~]# docker-machine env myvm1
export DOCKER_TLS_VERIFY=""
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/myvm1"
export DOCKER_MACHINE_NAME="myvm1"
# Run this command to configure your shell:
# eval $(docker-machine env myvm1)
运行docker-machine ls
以验证它myvm1
现在是活动计算机,如旁边的星号所示。
在群集管理器上部署应用程序
现在myvm1
,您可以使用其作为群组管理器的功能,通过使用docker stack deploy
您在myvm1中使用第3节中相同命令docker-compose.yml来部署你本地的应用程序.
。此命令可能需要几秒钟才能完成,部署需要一些时间才能完成。
使用docker service ps <service_name>
swarm管理器上的 命令验证是否已重新部署所有服务。
您myvm1
通过docker-machine
shell配置连接到,并且仍然可以访问本地主机上的文件。确保您与以前位于同一目录中,其中包括docker-compose.yml文件在第三节中已经被创建
在myvm1中与以前一样,运行以下命令以部署应用程序。
现在,您可以使用第3节使用的相同docker命令。只是这一次通知的服务(和相关容器)已经在两者之间分布myvm1
和myvm2
。
你可以从IP地址来访问你的应用程序要么 myvm1
或myvm2
。
您创建的网络在它们之间共享并进行负载平衡。运行 docker-machine ls
以获取VM的IP地址,并在浏览器上访问其中任何一个,点击刷新(或只是curl
它们)。
有五种可能的容器ID都是随机循环的,这表明了是在负载平衡的提供访问。
这个两个IP地址工作的原理是群中的节点参与入口路由网格。这可确保部署在swarm中无论运行哪个容器实例某个端口的服务始终将该端口保留给自身。
下面是一个图表,说明在三节点群上的my-web
端口8080
上发布的服务的路由网格如何显示:
请记住,要在群集中使用入口网络,您需要在启用群集模式之前在群集节点之间打开以下端口:
- 端口7946 TCP / UDP用于容器网络发现。
- 端口4789 UDP用于容器入口网络。
清理并重新启动
堆栈和群
你可以拆掉堆栈docker stack rm
。例如:
docker stack rm getstartedlab
取消设置docker-machine shell变量设置
您可以docker-machine
使用给定命令在当前shell中取消设置环境变量。
在Mac或Linux上,命令是:
eval $(docker-machine env -u)
docker从零开始(四)集群初体验,docker-machine swarm的更多相关文章
- 【转载】 TensorflowOnSpark:1)Standalone集群初体验
原文地址: https://blog.csdn.net/jiangpeng59/article/details/72867368 作者:PJ-Javis 来源:CSDN --------------- ...
- Centos 7下VMware三台虚拟机Hadoop集群初体验
一.下载并安装Centos 7 传送门:https://www.centos.org/download/ 注:下载DVD ISO镜像 这里详解一下VMware安装中的两个过程 网卡配置 是Add ...
- 【备忘:待完善】nsq集群初体验
本机的一个节点及监控与管理后台 虚拟机中的一个节点 命令: [root@vm-vagrant nsq]# nsqd --lookupd-tcp-address=192.168.23.150:4160 ...
- Docker 搭建 etcd 集群
阅读目录: 主机安装 集群搭建 API 操作 API 说明和 etcdctl 命令说明 etcd 是 CoreOS 团队发起的一个开源项目(Go 语言,其实很多这类项目都是 Go 语言实现的,只能说很 ...
- docker~swarm搭建docker高可用集群
回到目录 Swarm概念 Swarm是Docker公司推出的用来管理docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机.Swarm使用标准的Docker API接口作为其前端访问入 ...
- Sealer - 把 Kubernetes 看成操作系统集群维度的 Docker
作者 | 中弈 写在开头 身为一名技术人员,总是喜欢把自己的作品打造成理想状态呈现给别人,我非常荣幸能把集群镜像这样一个卓越的想法变成现实, 也非常开心用户使用我们的作品时对我们的高度认可. Seal ...
- Docker部署Elasticsearch集群
http://blog.sina.com.cn/s/blog_8ea8e9d50102wwik.html Docker部署Elasticsearch集群 参考文档: https://hub.docke ...
- Docker 构建 RabbitMQ 集群
刚开始,关于RabbitMQ集群的搭建,我找到了这篇文章:Docker 安装 RabbitMQ 集群 从而找到了第三方的RabbitMQ集群容器 rabbitmq-server 但是这个容器只有3.6 ...
- Docker搭建PXC集群
如何创建MySQL的PXC集群 下载PXC集群镜像文件 下载 docker pull percona/percona-xtradb-cluster 重命名 [root@hongshaorou ~]# ...
随机推荐
- uva 11526 H(n) (数论)
转载自 http://blog.csdn.net/synapse7/article/details/12873437 这道题我自己做的时候没有想到好的优化方法,提交的时候借鉴这篇文章的内容,转载如下: ...
- C++版本的C标准库头文件的特点
C++标准库中除了定义C++语言特有的功能外,也兼容了C语言的标准库.C语言的头文件形如name.h,C++则将这些文件命名为cname.也就是去掉了.h后缀,而在文件名name之前添加了字母c,这里 ...
- java线程(4)——线程同步的锁技术
同步 同步,字面来看,有点一起工作的意思.但在线程同步中,"同"意为协同.互相配合. 比如: A.B两个线程,并不是说两个线程必须同时一起工作,而是说互相配合工作,在某个时间可能线 ...
- [LeetCode] 56. Merge Intervals(vector sort)
/** * Definition for an interval. * struct Interval { * int start; * int end; * Interval() : start(0 ...
- Android中有哪些好的开发框架?
在安卓开发中,框架的使用必不可少,合理利用一些好的开发框架,往往可以达到事半功倍的效果.本文小编就将和大家分享安卓开发者不得不知的5款框架,一起来看看吧,新技能get走起~~ 1.thinkAndro ...
- CSS clear both清除浮动总结
我们知道有时候使用了CSS float浮动,会产生CSS浮动,这个时候就需要清理浮动,我们就用clear样式属性即可实现. 接下来我们来认识与学习CSS clear知识与用法. clear清除浮动目录 ...
- Hadoop上配置Hbase数据库
已有环境: 1. Ubuntu:14.04.2 2.jdk: 1.8.0_45 3.hadoop:2.6.0 4.hBase:1.0.0 详细过程: 1.下载最新的Hbase,这里我下载的是hbase ...
- [bzoj] 2694 Lcm || 莫比乌斯反演
原题 定义整数a,b,求所有满足条件的lcm(a,b)的和: 1<=a<=A 1<=b<=B ∀n>1,n2†gcd(a,b)(即任意n>1,\(n^2\)不是gc ...
- 原生toolbar基本使用教程
1.先写布局文件 <android.support.v7.widget.Toolbar android:id="@+id/toolbar" app:title=" ...
- Google File System中文版
英文原文地址: Google File system 译文原文地址: The Google File System中文版 Google File System中文版 摘要 我们设计并实现了Google ...