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…

正则表达式(上)

内容提纲&#xff1a; 1.什么是正则表达式 2.创建正则表达式 转载请注明出处&#xff0c;谢谢&#xff01; 假设用户需要在HTML表单中填写姓名、地址、出生日期等。那么在将表单提交到服务器进一步处理前&#xff0c;JavaScript程序会检查表单以确认用户确实输入了信息并且这些…

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…

apache配置多个虚拟主机

设置apache 多个虚拟目录记录 #配置第2个虚拟目录<VirtualHost 127.0.0.2:80>ServerName www.xx.comDocumentRoot "E:/wamp/www/"</VirtualHost><Directory "E:/wamp/www/"> Options Indexes FollowSymLinks Multiviews AllowOv…

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;整…

BZOJ 1640: [Usaco2007 Nov]Best Cow Line 队列变换

Description FJ打算带着他可爱的N (1 ≤ N ≤ 2,000)头奶牛去参加”年度最佳老农”的比赛.在比赛中,每个农夫把他的奶牛排成一列,然后准备经过评委检验. 比赛中简单地将奶牛的名字缩写为其头字母(the initial letter of every cow),举个例子,FJ带了Bessie, Sylvia,和Dora,那么就…

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.晶体管…

hdu 2570 贪心

贪心的经典题型 该死的精度问题&#xff0c;WA了好几次&#xff0c;以后能用乘的绝不用除&#xff01;&#xff01; #include<iostream> #include<algorithm> #include<cstdio>using namespace std;int main(){int n,v,w,k,i;int p[111],t[111];cin>>k…

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

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

python下载文件暂停恢复_selenium+Python如何取消Chrome下载文件的‘保留’‘放弃’提示?...

本人在做自动化测试的时候遇到问题&#xff0c;自动导出文件的步骤可以执行&#xff0c;但是文件并没有成功导出到目标目录&#xff0c;经debug发现&#xff0c;Chrome卡在了下载询问的窗口页面&#xff0c;就是底部弹出窗口询问是否‘保留’或者‘放弃’的那个页面。所以脚本执…

2014/9/12 play with thesick siyang baby.

11:48 2014/9/12再怎么无聊的游戏&#xff0c;在思杨宝宝的眼里都是那么好玩&#xff0c;那么有趣。昨天回去和他玩老鹰抓小鸡的游戏&#xff0c;我当老鹰&#xff0c;他当小兔子。我看他跑到奶奶屋里&#xff0c;就冲进去把他“抓走”&#xff0c;然后扔到我的屋里。思杨乐的啊…

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

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

ASP.NET MVC3 学习心得------路由机制

9.1 理解URL URL满足的要求&#xff1a; l 域名易于记忆和拼写 l 简短、易输入 l 可以反应出站点的结构 l 可破解&#xff0c;用户可以通过移除URL的末尾&#xff0c;进而达到更高层次的信息体系结构 l 持久、不能变化 9.2路由机制的概述 ASP.NET MVC中路由机制的两种用途&…

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

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

初步认识java中的方法

java中方法&#xff1a; 方法&#xff1a;是将一个功能抽取出来&#xff0c;把代码单独定义在一个大括号内&#xff0c;形成一个单独的功能。需要这个功能的时候&#xff0c;就可以去调用。这样即实现了代码的复用&#xff0c;也解决了代码冗余的问题。 public class Methods…

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

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

ACM竞赛常用STL(二)之STL--algorithm

<algorithm>无疑是STL 中最大的一个头文件&#xff0c;它是由一大堆模板函数组成的。下面列举出<algorithm>中的模板函数&#xff1a; adjacent_find / binary_search / copy / copy_backward / count/ count_if / equal / equal_range / fill / fill_n / find /fi…