swarm私募价格docker swarm 部署服务到集群
在管理节点上执行Docker。。。。。。。。。。。。。。。。。。服务命令以将应用程序部署到群集。群集管理器将服务描述视为应用程序所需的状态。内置群集安排避雷器并调度部署到集群并维持所需的状态。
1 |
$ Docker 服务 创造 <图像> |
群集协调器将任务调度到可用节点。swarm私募价格
1 2 3. |
$ Docker 服务 创造 -名称 我的_网页. nginx.
anixj至l6wdfn6yylbkrbj2nx. |
创建服务名称我的_网页。swarm私募价格
列出服务:
1 2 3 4. |
$ Docker 服务 LS.
ID 名称 复制品 图像 命令 anixjtol6wdf. 我的_网页 1/1 nginx. |
为了使网页服务可用,您需要发布群集的端口以收听端口请求。
您可以在图像后添加在容器中执行的命令。
1 |
$ Docker 服务 创造 <图像> <命令> |
1 2 3 |
$ Docker 服务 创造 -名称 你好,世界 高寒 p Docker.com
9K4639QPGSEDUCENPWF3FN2AASKSR. |
创建服务时,您可以指定许多不同的配置选项和约束。可以通过Docker.服务创建-help查看。swarm私募价格
创建的服务并不总是立即运行。如果服务镜像不可用或节点无法满足您的服务或其他原因的要求,该服务可能处于状态。
配置运行时环境
为容器配置以下运行时选项:
使用-env.配置环境变量
使用 - WorkDir配置容器工作目录
使用-Uner配置用户名或UID
1 2 3 4 5. 6 勾引 |
$ Docker Service 创造 -名称 你好,世界 -env Myvar.=我的value. -Workdir. /TMP. -我们er 我的_user 高寒 ping Docker.com
9K4639QPGSEDUCENPWF3FN2AASKSR. |
群体模式允许通过网络服务通过:
使用Ingress Network将移植到外部或直接连接群集的每个节点
使用叠加网络在群集中连接服务和任务
创建群集服务时,可以通过两种方式将服务端口发布到群集之外的主机:
依赖于路由网格(httPS.://文档。Docker。CO.M / Engine / Swarm / Services /#发布 - 服务 - 端口 - 使用 - ruting-Routing-MeSH.)在发布服务端口时,转到群集以访问每个节点上的目标端口上的服务。无论是否在节点上运行服务的任务。这不是很复杂,这是许多类型服务的正确选择。
(httPS.://文档。Docker。COM / Engine / Swarm / Services /#发布-A-Services-Ports-The-The-The-Swarm-node“服务任务的端口在服务上运行的群集节点上发出。Docker 1。13.及更高版本提供此功能。这绕过路由网格并提供最大的灵活性。包括开发自己的路由框架。但,需要跟踪每个任务运行的位置,并将请求路由到此任务和崩溃点的负载余额。
有一个10。。.。。。个节点,在10个节点上部署运行三个任务的nginx服务:
1 2 3 4 |
$ Docker 服务 创造 -名称 我的_网页 -复制品 3 -发布 8080。.:80 nginx. |
三个任务最多可运行到三个节点。您不需要知道运行此任务的节点。连接到10个节点的任何8080端口都将连接到三个nginx任务中的任何一个。您可以使用卷曲测试:
1 2 3 4 5 6 勾引 8 |
$ CURL localhost.:8080
<!!doc类型. HTML> <HTML> <头> <标题>欢迎 to nginx.!!</标题> ...截断的... </HTML> |
直接在群节点上发布服务的端口 如果您需要根据应用程序状态路由决策,或者需要完全控制请求服务任务路径的过程,路由网格可能不是您申请的正确选择。要直接在运行节点上发布服务端口,请使用-publish flag 模式 =主机选项。
注意:如果使用模式 = host直接在群集节点上发布端口,并设置发布=,创建隐式限制,您只能在给定组节点上运行服务的任务。此外,如果使用模式 = host,并且不要使用码头服务- Mode =全局标志时,很难知道正在运行哪些节点服务。为了把工作路线放在他们身上。
示例:在每个群集节点上运行C区监控服务
谷歌 Cadidisor是一个在Linux主机上监控运行容器的工具。通常,CAdvisor正在运行作为独立集装箱,因为它旨在监视给定的Docker Engine实例。如果您将CAdvisor作为路由网格运行,连接到任何群集节点的C区端口将显示(有效地)服务的随机组节点的统计信息。这可能不是你想要的。
以下示例在群集中的每个节点中运行CADVISOR作为服务。并且在每个群集节点上公开了Public Codowor端口。连接到给定节点的CODIDOR端口将显示节点的统计信息。实际上,这类似于在每个节点上运行单独的CADDOR容器。但您不需要手动管理这些容器。
1 2 3 4 5 6 勾引 8 9 |
$ Docker 服务 Create -mode 全球的 -山 类型=捆绑那来源=/那目的地=/rootfs那ro=1 -山 类型=捆绑那来源=/var/跑步那目的地=/var/run -山 类型=捆绑那来源=/sys那Destination=/sys那ro=1 -山 类型=捆绑那来源=/var/lib/Docker/那destination=/var/lib/Docker那ro=1 -publish mode=host那目标=8080那发表=8080 -名称=Cadvisor Google/CADE.:最新的 |
如果将节点添加到群集,将推出CADVISOR任务。在群集中不再绑定到8080端口的另一个服务或容器。
使用叠加网络在群集中连接一个或多个服务。
在管理节点上创建叠加网络。
1 2 3 |
$ Docker 网络 Create -司机 覆盖 我的-网络
ETJPU59CYKRPTRGW0Z0HK5SNF. |
在群集模式下创建叠加网络之后,所有管理节点都可以访问网络。
创建服务并通过-Network徽标以将服务连接到叠加网络。
1 2 3 4 5 6 勾引 |
$ Docker 服务 Create -Replicas 3 -NetWork 我的-NetWork -名称 我的-网页 nginx.
Seduce16thylsndqma81j6kkkb5aus |
群集将我的网络扩展到正在运行服务的每个节点。
创建服务时,您可以指定滚动更新行为。要运行Docker服务更新,如何将更新应用于群集。
如果该服务的更新版本无法正常工作,您可以使用Docker Service Update-Roldback标志滚动到先前的服务版本。其他选项可以与回滚结合使用,如果-Update-Delay 0s.执行回滚不会延迟任务之间。
1 2 3 4 5 6 |
$ Docker 服务 update - rollback - update-delay 0s 我的_网页.
我的_网页. |
您可以为群集服务创建两种类型的挂载:卷安装和绑定安装。创建服务时由Mount标志指定。如果默认情况下未指定类型, 卷已安装。
卷是存储,删除任务容器后仍然表现。安装卷的首选方法是使用现有卷:
1 2 3 4 |
$ Docker 服务 创造 - mount SRC.=<体积-名称>那DST=<容器-小路> - 名称 我的服务. <图像> |
如果您创建卷,请参阅卷创建CLI(https://文档。Docker.COM /引擎/参考/ commandline /卷_创造 /)
以下方法是预定的任务,在开始容器之前,在部署时创建卷:
1 2 3 4 |
$ Docker 服务 创造 - mount type=体积那SRC=<体积-名称>那DST=<容器-小路>那体积-司机=<司机>那体积-选择=<key0>=<价值>那体积-选择=<键1>=<value1。> - 名称 MyService <图像> |
重要提示:如果您的卷被驱动以接收逗号分隔的列表选项,这必须从外部CSV解析器转换。请使用双引号来围绕它,并使用单引号围绕整个安装参数。
如,本地驱动挂载选项作为逗号分隔的O参数列表。此示例显示了正确的转义列表。
1
2
3
4
$ Docker 服务 创造
- 名称 我的服务.
<图像>
Bind Mount是文件系统路径,Scheduler中的主机部署了任务容器。Docker安装到容器的路径。在群集初始化容器任务之前,必须存在文件系统路径。
以下显示了绑定挂入语法:
1 2 3 4 5 6 Seduce 8 9 10 11。.。.。.。.。。 |
#安装读写绑定 $ Docker. service create - mount type=捆绑那SRC=<主持人-小路>那DST=<容器-小路> - name 我的service <图像>
#安装准备绑定 $ Docker. service create - mount type=捆绑那SRC=<主持人-PATH>那DST=<容器-PATH>那只读 - name 我的service <图像> |
重要提示:绑定安装将是有用的,但它也很危险。在大多数情况下,构建一个应用程序,从主机安装路径不必要。主要是以下风险:
如果主机路径安装到服务的容器中,路径必须存在于每个服务器上。Docker组模式调度程序可以在满足资源可用性要求的任何计算机上安排容器。并满足您指定的所有约束。
如果他们变得不健康或无法访问,Docker Swarm Mode Scheduler将随时重新排列运行的服务容器。
主机绑定完全不可避免地安装。使用绑定安装时,无法确保在开发环境和生产环境中的应用程序是相同的。
Docker引擎群模式支持覆盖网络,所以, 可以启用容器网络的容器。使用群模式时,不需要外部kV存储。群体模式覆盖网络包含以下功能:
您可以向同一网络添加多个服务。
默认,为群集中的每个服务服务发现分配VIP和DNS条目。制作同一网络中可用的容器的服务名称。
您可以使用DNS培训而不是VIP配置服务。
不使用集群中的叠加网络,在启用群集模式之前,需要在群集节点之间打开以下端口:
7.946 TCP / UDP用于集装箱网络发现
4789用于容器覆盖网络的UDP
运行Docker网络从管理节点创建以创建叠加网络。如:
1 2 3 4 5 6 7 8 |
$ docker 网络 create --driver 覆盖 --子网 10。0。9。0/twenty four --opt 加密 我的-网络
273D53261BCDFDA5F198587974DAE3827E947CCD7E74A41BF1F482AD17.FA0D33
|
- 子网指定覆盖网络使用的子网。
在向网络添加服务之前,覆盖网络仅扩展到管理节点。查看网络:
1 2 3 4 5 6 |
$ docker 网络 ls
网络 ID 名称 司机 范围 F9145F09B38B. 桥 桥 local ..sn.. 273D53261BCD 我的-网络 overlay 一群 |
群体的范围意味着网络可用于将服务部署到群集。创建服务被添加到网络后,该群集仅将网络扩展到服务任务的工作节点。对于未在网络中添加服务的工作节点,Docker网络LS不会显示网络。
创建服务时,通过指定-Network将服务添加到叠加网络。如:
1 2 3 4 5 |
$ docker service create --复制品 3 --name 我的-网页 --网络 我的-网络 nginx. |
注意:必须首先创建网络。然后可以将服务添加到网络中。
在覆盖网络中,服务任务的容器可以彼此连接。网络将扩展运行服务任务的所有节点。
在管理节点上,执行Docker服务PS视图服务任务哪些节点:
1 2 3 4 5 6 |
$ docker service ps 我的-网页
名称 图像 节点 期望 状态 当前的 状态 错误 我的-Web.1。63s86gf6a0ms34mvboniev7bs. nginx. node1。 跑步 跑步 58 秒 前 我的-Web.2。6B3Q2QBJVEO4ZAUC6XIG7AU10 nginx. node2。 跑步 跑步 58 秒 前 我的-Web.3.66U2HCRZ0MIQPC8H0Y0F3V7AW。 Nginx node3. 跑步 跑步 关于 a 分钟 前 |
可以在运行服务任务的任何节点上,运行Docker网络检查以查看网络信息。
网络信息包含添加到节点上的网络中的容器列表。如:
1 2 3 4 5 6 7 8 9 10 11 12。 13 14 15. 16 17 18 19 20 21 22 23 24 25 26 27 捻 29。 30 31. 32 33 34 |
$ docker 网络 检查 MY-网络 [ { “名称”: “我的网络”那 “ID”: “273D53261BCDFDA5F198587974DAE3827E947CCD7E74A41BF1F482AD17FA0D33”那 “范围”: “一群”那 “司机”: “覆盖”那 “eneratipv6”: False那 “IPAM”: { “司机”: “默认”那 “选项”: 空值那 "Config": [ { “子网”: “10。0。9。0/24“那 “门户”: “10。0。9。1“ } ] }那 “在”: 错误的那 "Containers": { “404D1DEC939A021678132A35259C3604B9652060437S357649437S3576494372590606237A357649437S357649437S3576494372590606237E59060621A17EDAE7A819”: { “名称”: “我的网。1.63s86gf6a0ms34mvboniev7bs“那 “endpointid”: “3C9588D04DB9BC2BF8749CB079689A3072C44C68CA3072C44C68BC24944CBEA8E4BC20EB7DE7”那 } }那 “选项”: { “com。Docker.网络。司机。覆盖。vxlanid_list: “257” }那 "Labels": {} } ] |
在上面的例子中,在node1.节点上添加到My-Web服务的容器是My-Web。1.63s86gf6a0ms34mvboniev7bs。
默认,创建要连接到网络的服务时,群集为服务分配VIP。VIP根据服务名称映射到DNS别名。网络上的集装箱服务由Gossip共享DNS映射共享。所以, 网络上的任何容器都可以通过其服务名称访问服务。
在同一覆盖网络中,您无需打开特定的服务端口以使服务可以在其他服务中使用。群集内部负载平衡会自动将服务的VIP请求分发给事件任务。
您可以通过检索服务查看VIP。如:
1 2 3 4 5 |
$ docker service 检查 --format='{{json。端点。Virtualips}' MY-网页
[{“网络ID”:“7m2rjx0a97n88wzr4nu8772r3” “addr”:“10。0。0。2/24“}] |
以下示例显示,如果在NGINX服务中在同一网络中添加BusyBox服务,BusyBox服务可以使用DNS名称My-Web访问nginx。
在管理节点中,部署My-Web同一网络的BusyBox服务:
1 2 3 4 5 |
$ docker service create --name MY-Busybox --网络 MY-网络 Busybox 睡觉 3000 |
查找运行My-BusyBox的节点:
1 2 3 4 |
$ docker service ps MY-忙盒子
Name 图像 节点 期望 状态 当前的 状态 错误 MY-忙盒子.1.1dok2cmx2mln5hbqve8ilnair. 忙盒子 Node1 跑步 跑步 5 秒 前 |
在运行BusyBox任务的节点上,打开BusyBox容器的交互式shell:
1 |
$ docker exec -it MY-busybox.1.1dok2cmx2mln5hbqve8ilnair. /bin/sh |
您可以估算容器名称到+。或者,可以在任务中运行的节点上执行Docker PS。
1 2 3 4 5 6 7 |
$ nslookup. MY-网页
服务器: 127。0。0。11
Name: 我的-web |
1 2 3 4 5 6 7 8 9 |
$ nslookup. 任务.我的-web
Server: 127。0。0。11
Name: 任务.我的-web |
在Busybox容器中,执行在My-Web服务中运行的nginx Web服务器:
1 2 3 4 5 6 7 8 |
$ wget -O- my-web
连接 to my-web (10。0。9。2:80) <!!doctype. HTML> <html> <头> <标题>欢迎 to nginx!!</标题> ...sn... |
群集内部负载平衡会自动将HTTP请求路由到服务任务的VIP。使用轮询将后续请求分发给其他任务。
创建服务时,您可以设置-Endpoint-Mode DNSRR.来配置服务以在不使用VIP的情况下使用DNS轮询。在我们自己的负载余额的情况下,DNS轮询很有用。
以下示例显示了DNSRR端点模式的服务:
1 2 3 4 5 6 |
$ docker service create --replicas 3 --name my-DNSRR-service --network my-network --endpoint-mode DNSRR nginx |
1 2 3 4 5 6 7 8 |
$ nslookup my-DNSRR-service Server: 127。0.0.11
Name: my-DNSRR Address 1: 10。0.9.8 my-DNSRR.-service.1.bd3a67p61by5dfdkyk7kog7pr。my-network Address 2: 10。0.9.10 my-dnsrr-service.3.0sb1jxr99bywbvzac8xyw73b1。my-network Address 3: 10.0.9.9 my-dnsrr-service.2.AM6FX47P3BROPYY2DY4F8HOFB。my-network |
建议使用挖掘, nslookup, 或其他DNS查询工具以测试DNS访问服务的名称。因为VIP是一种逻辑IP,Ping不是用于确定VIP连接的正确工具。