shell执行docker命令卡挂住_Docker官方文档翻译4

e839a79767e6fe6dd279b4b11b2c4a2c.png

第四篇:Swarms

准备工作

  • 安装Docker版本1.13或更高版本。
  • 安装Docker compose。
  • 安装docker machine
  • 阅读第1 2 3部分的内容。
  • 确保你已发布并推送到注册仓库的friendlyhello镜像。
  • 确保你的镜像可以部署为一个容器。 运行这个命令,在你的信息中插入用户名,repo和标签:docker run -p 80:80 username / repo:tag,然后访问http:// localhost /。
  • 第3部分复制docker-compose.yml文件。

介绍

在第3部分中,介绍了你在第2部分中编写的应用程序,并定义了它应该如何在生产环境中运行,将其转化为服务,并在此过程中将其扩展5倍实例。

在第4部分中,将此应用程序部署到群集上,并在多台机器上运行它。 通过将多台机器连接到称为swarm的“Dockerized”群集,使多容器,多机器应用成为可能。

理解Swarm clusters

Swarm是一组运行Docker并加入到集群中的机器。加入到集群中之后,你将继续运行你习惯的Docker命令,但现在它现在在Docker Swarm的集群上执行。集群中的机器可以是物理的也可以是虚拟的。加入集群后,单个容器被称为节点。

Swarm manager可以使用多种策略来运行容器,例如“emptiest node” - 它可以使用容器填充使用率最低的机器。或者“global”,它确保每台机器只获取指定容器的一个实例。swarm managerd的这些策略需要在Compose文件中指定。

Swarm manager是群体中唯一可以执行你的命令的机器,或者授权其他机器作为worker加入到群体中。workers只是在那里提供能力,并没有权力告诉任何其他机器可以做什么和不可以做什么。

到目前为止,您已经在本地机器上以单主机模式使用Docker。但是Docker也可以切换到群集模式,这就是使用群集的原因。立即启用群模式使当前的机器成为群管理器。从此,Docker将运行您在您管理的群集上执行的命令,而不仅仅是在当前机器上执行。

设置你的集群

一个swarm是由多个节点组成,节点可以是物理或者虚拟的机器。它的基本概念足够简单:运行docker swarm init 命令能够开启swarm模式,并且使你的当前机器成为swarm manager,运行docker swarm join命令能够让其他机器加入到 swarm 中成为worker机器。选择的下面的选项卡,看看它是如何各自情况下发挥作用的。我们使用虚拟机快速创建一个双机集群,并且将其变成swarm.

创建集群

你需需要一个可以创建虚拟机(VM)的虚拟机管理程序,因此请为你的计算机的操作系统安装Oracle VirtualBox。

现在,创建两个vm使用docker-machine ,使用VirtualBox 驱动:

docker-machine create --driver virtualbox myvm1
docker-machine create --driver virtualbox myvm2

查看vm列表并获取它们的ip地址

你现在有2个vms创建,名字为myvm1和myvm2。

$ docker-machine ls
NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
myvm1   -        virtualbox   Running   tcp://192.168.99.100:2376           v17.06.2-ce   
myvm2   -        virtualbox   Running   tcp://192.168.99.101:2376           v17.06.2-ce

初始化swarm 并且添加节点

第一个机器扮演的是manager的角色,它可以执行管理命令并且验证worker 加入到 swarm中去,第二个是worker。

你可能发送命令到您的vms通过docker-machine ssh。指示myvm1成为一个拥有docker swarm init的swarm manager并输出如下:

$ docker-machine ssh myvm1 "docker swarm init --advertise-addr <myvm1 ip>"
Swarm initialized: current node <node ID> is now a manager.To add a worker to this swarm, run the following command:docker swarm join --token <token> <myvm ip>:<port>To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

如您所见,对docker swarm init的响应包含一个预配置的docker swarm join命令,您可以在要添加的任何节点上运行该命令。 复制这个命令,并通过docker-machine ssh将它发送到myvm2,让myvm2作为一个worker加入你的新群体:

$ docker-machine ssh myvm2 "docker swarm join 
--token <token> 
<ip>:2377"This node joined a swarm as a worker.

恭喜,你已经成功创建了你的第一个swarm。

运行docker node ls在manager机器上去查看swarm 中的节点:

$ docker-machine ssh myvm1 "docker node ls"
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS
brtu9urxwfd5j0zrmkubhpkbd     myvm2               Ready               Active
rihwohkh3ph38fhillhhb84sk *   myvm1               Ready               Active              Leader

发布你的应用到swarm cluster中去

最难的部分已经完结。现在你只需要重复再第三部分的过程将应用发布到你的swarm中去。请记住只有像myvm1这样的群集管理器才能执行Docker命令; worker只是用来工作的。

配置一个docker-machine命令成为swarm manager

到目前为止,你已经在Docker-machine ssh中将Docker命令包装为与虚拟机交谈。 另一种选择是运行docker-machine env 来获取并运行一个命令,该命令将当前shell配置为与VM上的Docker守护进程进行通信。 此方法对下一步更好,因为它允许您使用本地docker-compose.yml文件“远程”部署应用程序,而无需将其复制到任何位置。

键入docker-machine env myvm1,然后复制粘贴并运行作为输出最后一行提供的命令,以将shell配置为与swarm管理器myvm1对话。

配置shell的命令根据你是Mac,Linux还是Windows而有所不同,因此下面的选项卡中显示了每个命令的示例。

MAC或LINUX上的DOCKER MACHINE SHELL环境

运行docker-machine env myvm1命令去得到命令配置你的shell与myvm1交互。

$ docker-machine env myvm1
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/Users/sam/.docker/machine/machines/myvm1"
export DOCKER_MACHINE_NAME="myvm1"
# Run this command to configure your shell:
# eval $(docker-machine env myvm1)

运行给定的命令来配置你的shell与myvm1进行通信。

eval $(docker-machine env myvm1)

运行docker-machine ls命令去校验现在这个活动的机器,如旁边的星号所示。:

$ docker-machine ls
NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
myvm1   *        virtualbox   Running   tcp://192.168.99.100:2376           v17.06.2-ce   
myvm2   -        virtualbox   Running   tcp://192.168.99.101:2376           v17.06.2-ce

在swarm manager中部署容器

现在你已经有了myvm1,你可以使用它的权利作为swarm manager器发布你的app通过使用第3部分中用于myvm1的相同docker stack deploy命令和docker-compose.yml的本地副本来部署您的应用程序。此命令可能需要几秒钟才能完成,部署的服务需要一段时间才能提供服务。在swarm管理器上使用docker service ps 命令验证所有服务是否已被重新部署。

你通过docker-machine shell配置连接到myvm1,并且你仍然可以访问本地主机上的文件。 确保你和之前操作在同一个目录下,其中包括你在第3部分中创建的docker-compose.yml文件。

和之前一样,运行下面的命令在mym1机器上部署应用。

docker stack deploy -c docker-compose.yml getstartedlab

正是这样,应用在swarm 集群中国部署了!

现在,你可以使用第3部分中使用的相同docker命令。只有这一次,请注意,服务(及相关容器)已在myvm1和myvm2之间分配。

$ docker stack ps getstartedlabID            NAME                  IMAGE                   NODE   DESIRED STATE
jq2g3qp8nzwx  getstartedlab_web.1   john/get-started:part2  myvm1  Running
88wgshobzoxl  getstartedlab_web.2   john/get-started:part2  myvm2  Running
vbb1qbkb0o2z  getstartedlab_web.3   john/get-started:part2  myvm2  Running
ghii74p9budx  getstartedlab_web.4   john/get-started:part2  myvm1  Running
0prmarhavs87  getstartedlab_web.5   john/get-started:part2  myvm2  Running

访问你的集群

你可以从myvm1或myvm2的IP地址访问你的应用程序。

你创建的网络在它们之间共享并负载平衡。 运行docker-machine ls来获取虚拟机的IP地址,并在浏览器中访问它们中的任何一个,并刷新(或者通过curl请求)。

3c2996229eeaf50c6a3faa059a865dd6.png

有五个可能的容器ID全部随机轮训,来实现负载平衡。

两个IP地址工作的原因是群中的节点参与入口路由网格。 这可以确保部署在群集中某个端口的服务始终将该端口保留给自己,而不管实际运行容器的节点是什么。 以下是三节点群上端口8080上发布的名为my-web的服务的路由网格示意图:

71599c3902fc68a546239f28aa93a8de.png

迭代和扩展应用程序

从这里你可以完成你在第二部分和第三部分中学到的一切。

通过更改docker-compose.yml文件来扩展应用程序。

通过编辑代码更改应用程序行为,然后重新构建并推送新镜像。 (要做到这一点,请按照与之前构建应用程序和发布镜像相同的步骤进行操作。

无论哪种情况,只需简单地再次运行docker stack deploy来部署这些更改。

你可以使用你在myvm2上使用的相同docker swarm join命令将任何物理或虚拟机器加入此群集。之后只需运行Docker堆栈部署,并且你的应用可以利用新资源。

清除和重启

Stacks and swarms(堆栈和集群)

你能通过docker stack rm卸载堆栈。例如:

docker stack rm getstartedlab

取消设置docker-machine shell变量设置

你可以使用给定的命令取消当前shell中的docker-machine环境变量。在mac或者linux环境中命令如下:

eval $(docker-machine env -u)

这将shell与docker-machine创建的虚拟机断开连接,并允许您继续在同一个shell中工作,现在使用本机docker命令(例如,在Docker for Mac或Docker for Windows上)。 要了解更多信息,请参阅关于取消设置环境变量的机器主题。

重启Docker machines

如果不关闭你的本地主机,Docker machines将会停止运行。你能通过运行docker-machine ls命令来检查机器的状态。

$ docker-machine ls
NAME    ACTIVE   DRIVER       STATE     URL   SWARM   DOCKER    ERRORS
myvm1   -        virtualbox   Stopped                 Unknown
myvm2   -        virtualbox   Stopped                 Unknown

要重新启动已停止的计算机,请运行以下命令:

docker-machine start <machine-name>

例如:

$ docker-machine start myvm1
Starting "myvm1"...
(myvm1) Check network to re-create if needed...
(myvm1) Waiting for an IP...
Machine "myvm1" was started.
Waiting for SSH to be available...
Detecting the provisioner...
Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.$ docker-machine start myvm2
Starting "myvm2"...
(myvm2) Check network to re-create if needed...
(myvm2) Waiting for an IP...
Machine "myvm2" was started.
Waiting for SSH to be available...
Detecting the provisioner...
Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.

总结

在第4部分中,你了解了群体是什么,群体中的节点如何成为manager或workwer,创建群体并在其上部署应用程序。 你看到Docker的核心命令并没有从第3部分改变,他们只需要将目标锁定在swarm master上。 你还看到了Docker网络的力量,即使它们运行在不同的机器上,也可以跨容器保持负载平衡请求。 最后,你学习了如何在集群上迭代和缩放应用程序。

以下是一些您可能想要运行的命令,以便与你的群集和虚拟机进行一点交互:

docker-machine create --driver virtualbox myvm1 # Create a VM (Mac, Win7, Linux)
docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1 # Win10
docker-machine env myvm1                # View basic information about your node
docker-machine ssh myvm1 "docker node ls"         # List the nodes in your swarm
docker-machine ssh myvm1 "docker node inspect <node ID>"        # Inspect a node
docker-machine ssh myvm1 "docker swarm join-token -q worker"   # View join token
docker-machine ssh myvm1   # Open an SSH session with the VM; type "exit" to end
docker node ls                # View nodes in swarm (while logged on to manager)
docker-machine ssh myvm2 "docker swarm leave"  # Make the worker leave the swarm
docker-machine ssh myvm1 "docker swarm leave -f" # Make master leave, kill swarm
docker-machine ls # list VMs, asterisk shows which VM this shell is talking to
docker-machine start myvm1            # Start a VM that is currently not running
docker-machine env myvm1      # show environment variables and command for myvm1
eval $(docker-machine env myvm1)         # Mac command to connect shell to myvm1
& "C:Program FilesDockerDockerResourcesbindocker-machine.exe" env myvm1 | Invoke-Expression   # Windows command to connect shell to myvm1
docker stack deploy -c <file> <app>  # Deploy an app; command shell must be set to talk to manager (myvm1), uses local Compose file
docker-machine scp docker-compose.yml myvm1:~ # Copy file to node's home dir (only required if you use ssh to connect to manager and deploy the app)
docker-machine ssh myvm1 "docker stack deploy -c <file> <app>"   # Deploy an app using ssh (you must have first copied the Compose file to myvm1)
eval $(docker-machine env -u)     # Disconnect shell from VMs, use native docker
docker-machine stop $(docker-machine ls -q)               # Stop all running VMs
docker-machine rm $(docker-machine ls -q) # Delete all VMs and their disk images

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575245.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编写第一个Java程序:helloworld

配置好java开发环境后&#xff0c;我们可以编写第一个java程序&#xff08;helloworld&#xff09;。 在开始编写java程序时&#xff0c;我们要知道java程序开发的三个步骤&#xff1a;编写、编译、运行。 编写阶段主要是由程序员编写后缀为.java的文件&#xff1b;将后缀为.ja…

java中关键字、标识符、常量、变量、数据类型

关键字&#xff1a; JAVA语言中已经定义好的具有特殊含义的单词&#xff0c;被称为关键字&#xff0c;关键字是全小写无特殊字符的纯 英文字母&#xff0c;在编辑器中一般有高亮效果&#xff0c;如public、class、static等。 标识符&#xff1a; 在JAVA语言中&#xff0c;自…

js滚动条下拉一定值_JS逆向 | 无限Debugger之淘大象

置顶公众号今天继续和大家研究JS逆向&#xff0c;不少小伙伴在JS逆向的时候遇到过无限debugger的反爬&#xff0c;今天就拿一个网站练练手感受下无限debugger。分析请求先打开这次的目标网站--淘大象(https://taodaxiang.com/credit2)打开「开发者工具」就自动进入debug&#x…

java中数据类型转换、ASCII编码

数据类型转换&#xff1a; JAVA语言中要求参与计算的数据类型要保持一致&#xff0c;如果不一致则会发生数据类型转换&#xff0c;数据类型转换可分为&#xff1a;自动类型转换&#xff08;隐式转换&#xff09;和强制类型转换&#xff08;显式转换&#xff09;。 自动类型转…

pyecharts x轴字体大小调整_pyecharts 柱状图基础篇#学习笔记#

2020年初&#xff0c;很久没有用过pyecharts的我由于工作原因&#xff0c;安装了新版pyecharts之后&#xff0c;以前的pyecharts代码报错了。搜索之后才发现&#xff0c;我安装的是不兼容旧版本的新版。空闲的时间&#xff0c;把新版echart当作新的模块梳理了一下&#xff0c;整…

JAVA语言运算符(算数运算符、赋值运算符、比较运算符、逻辑运算符、三元运算)

运算符 JAVA语言中将运算符分为&#xff1a;算数运算符、赋值运算符、比较运算符、逻辑运算符、三元运算符。 算数运算符&#xff1a;算数运算符是对数字进行一系列的加减乘除等的计算&#xff0c;常见的算数运算符如&#xff1a; public class Operation{public static vo…

真彩色图像数据量 计算_军职在线大学计算机基础(自主模式)

第一章单选题电子计算机的发展已经经过了4代&#xff0c;4代计算机的主要元器件分别是(b)a.电子管&#xff0c;晶体管&#xff0c;中小规模集成电路&#xff0c;激光器件b.电子管&#xff0c;晶体管&#xff0c;中小规模集成电路&#xff0c;大规模或超大规模集成电路 c.晶体管…

JAVA语言中流程控制(顺序结构、判断语句、循环语句)

流程控制&#xff1a; 程序在执行的过程中&#xff0c;各条语句的执行顺序对程序的结果是有直接影响的&#xff0c;所以&#xff0c;我们必须清楚每条语句的执行流程。而且&#xff0c;很多时候我们要通过控制语句的执行顺序来实现想要的功能。java中流程控制有&#xff1a;顺…

java中JShell脚本工具、常量优化、集成开发环境IDEA

JShell脚本工具&#xff1a; jshell:直接在DOS命令行&#xff08;黑窗口&#xff09;键入main方法中的代码就可以快速看到运行的结果&#xff0c;无需编译再运行&#xff0c;并且省略了入口方法及定义类的过程&#xff0c;其使用方法&#xff1a; 1.打开黑窗口后键入&#xf…

python编写arcgis脚本教程_ArcGIS使用Python脚本工具

在Pyhton写的一些代码&#xff0c;用户交互不方便&#xff0c;用户体验比较差&#xff0c;不方便重用。在ArcGIS中可以将用写的Python代码导入到ToolBox中&#xff0c;这样用起来就比较方便了。这里用按要素裁剪栅格的Python来演示如何导入ArcGIS中。代码如下&#xff1a; impo…

python中可以使用变量来引用函数吗_如何在python语言中使用函数变量并调用函数...

在python语言中&#xff0c;除了常规变量之外&#xff0c;还有函数变量。把函数本身赋值给变量&#xff0c;这个变量为函数变量。工具/原料 python pycharm 截图工具 WPS 方法/步骤 1 在已新建的python文件中&#xff0c;定义函数mul_data&#xff0c;传入两个参数param和exp2 …

C语言程序设计现代方法1,2,3章

1&#xff1a;浮点型&#xff08;float&#xff09;运算比int慢&#xff0c;并且可能存在舍入误差 如float存储0.1&#xff0c;以后使用可能会变成0.099999999987 2&#xff1a;宏定义只用大写&#xff0c;这是大多数C程序猿遵循的规范&#xff01; C语言区分大小写&#xff0c…

初识java中数组、数组在内存中、越界异常、空指针异常

数组&#xff1a; 当存储多个数据时&#xff0c;此时可能会使用多个变量&#xff0c;这样不断声明变量会很麻烦&#xff0c;而这些变量都有相似的特性&#xff0c;因此我们可以将它们存放到一个容器中&#xff0c;统一处理。 容器&#xff1a;是将多个数据存储到一起&#xf…

异常处理python 空气质量问题_python的异常处理

异常处理什么是异常&#xff1f;首先要清楚&#xff0c;什么是异常&#xff0c;异常就是程序运行时发生错误的信号(在程序出现错误时&#xff0c;则会产生一个异常&#xff0c;若程序没有处理它&#xff0c;则会抛出该异常&#xff0c;程序的运行也随之终止)&#xff0c;在pyth…

cad小插件文字刷_文字狗最佳排版神器 小恐龙公文排版助手Office WPS插件

文字狗最佳排版神器文字狗最佳排版神器 小恐龙公文排版助手Office WPS插件1.85最新版 无需注册、无需其他费用、无广告。相信大家所需要提交的各种论文、报告等Word文档都对格式有着非常严格的要求&#xff0c;对标题、目录、正文都有不同的要求。尤其是对于公文&#xff0c;要…

Java中的对象、private关键字、this关键字、构造方法

面向对象 概述&#xff1a;Java一种面向对象的程序设计语言&#xff0c;面向对象思想是一种程序设计思想&#xff0c;在面向对象思想的指引下&#xff0c;使用Java语言去设计、开发计算机程序。 这里的对象泛指现实中一切事物&#xff0c;每种事物都具备自己的属性和行为。 …

2060显卡驱动最新版本_教程:怎么安装更新NVIDIAAMD显卡驱动?

PART-1:装驱动这么简单的事情真的需要写教程吗&#xff1f;我自己都理解不了我为什么要写这样一个教程&#xff0c;但是如你所见&#xff0c;他确实被我写出来了&#xff0c;而且对大部分人都挺有用。首先&#xff0c;使用鲁大师以及驱动精灵这类软件的同学自己喜欢就好&#x…

mysql 两个时间相差大于24小时的数据_MySQL 主从同步延迟的原因及解决办法(仅学习)...

原文链接&#xff1a;https://blog.csdn.net/hao_yunfeng/article/details/82392261Mysql主从基本原理&#xff0c;主要形式以及主从同步延迟原理 (读写分离)导致主库从库数据不一致问题的及解决方案 一、主从数据库的区别 从数据库(Slave)是主数据库的备份&#xff0c;当主数据…

分形之万花筒

万花筒是一种光学玩具&#xff0c;只要往筒眼里一看&#xff0c;就会出现一朵美丽的“花”样。将它稍微转一下&#xff0c;又会出现另一种花的图案。不断地转&#xff0c;图案也在不断变化&#xff0c;所以叫“万花筒”。万花筒的图案是靠玻璃镜子反射而成的。它是由三面相交成…

mysql同步数据到另一张表_mysql:Otter跨机房数据同步(单向)

重要说明&#xff1a;需要同步的表必须要有主键 主键 主键otter是一款基于Java且免费、开源基于数据库增量日志解析&#xff0c;准实时同步到本机房或异地机房的mysql/oracle数据库的解决方案。Otter目前支持了什么1. 单向同步&#xff0c; mysql/oracle互相同步2. 双向同步&am…