####### Join the second machine/node/host in the cluster #######
[node2] (local) root@192.168.0.7 ~
$ docker swarm join --token SWMTKN-1-21mxdqipe5lvzyiunpbrjk1mnzaxrlksnu0scw7l5xvri4rtjn-590dyij6z342uyxthletg7fu6 192.168.0.8:2377
This node joined a swarm as a worker.
现在,我从第一个节点运行了以下代码来扩展服务。
####### Listing services #######
[node1] (local) root@192.168.0.8 ~
$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
syn9jo2t4jcn app2 replicated 1/1 nginx:latest
####### Scalling app2 from single container to 10 more container #######
[node1] (local) root@192.168.0.8 ~
$ docker service update --replicas 10 app2
app2
overall progress: 10 out of 10 tasks
1/10: running [==================================================>]
2/10: running [==================================================>]
3/10: running [==================================================>]
4/10: running [==================================================>]
5/10: running [==================================================>]
6/10: running [==================================================>]
7/10: running [==================================================>]
8/10: running [==================================================>]
9/10: running [==================================================>]
10/10: running [==================================================>]
verify: Service converged
[node1] (local) root@192.168.0.8 ~
####### Verifying that app2's workload is distributed to both of the ndoes #######
$ docker service ps app2
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
z12bzz5sop6i app2.1 nginx:latest node1 Running Running 15 minutes ago
8a78pqxg38cb app2.2 nginx:latest node2 Running Running 15 seconds ago
rcc0l0x09li0 app2.3 nginx:latest node2 Running Running 15 seconds ago
os19nddrn05m app2.4 nginx:latest node1 Running Running 22 seconds ago
d30cyg5vznhz app2.5 nginx:latest node1 Running Running 22 seconds ago
o7sb1v63pny6 app2.6 nginx:latest node2 Running Running 15 seconds ago
iblxdrleaxry app2.7 nginx:latest node1 Running Running 22 seconds ago
7kg6esguyt4h app2.8 nginx:latest node2 Running Running 15 seconds ago
k2fbxhh4wwym app2.9 nginx:latest node1 Running Running 22 seconds ago
2dncdz2fypgz app2.10 nginx:latest node2 Running Running 15 seconds ago
6条答案
按热度按时间hyrbngr71#
Docker运行将启动单个容器。
使用docker服务,你可以管理一组容器(来自同一张图片),你可以缩放它们(启动多个容器)或者更新它们。
quhf5bfb2#
您可能需要读取“docker service is the new docker run“
根据这些幻灯片,“docker service create”就像一个“进化的”docker运行。
ha5z0ras3#
Docker服务就像容器的“蓝图”。你可以定义一个简单的工作者作为服务,然后将服务扩展到20个容器,以快速通过队列。之后,你可以将服务再次缩减到3个容器。同样,通过Swarm,这些容器可以部署到群的不同节点。
但是,是的,我也建议阅读文档,就像@Tristan建议的那样。
h6my8fg24#
您可以通过两种方式使用Docker。
独立模式
当你使用独立模式时,你只在一台机器上安装了docker守护进程。在这里你可以在这台机器上创建/销毁/运行一个或多个container。
所以当你运行
docker run
docker-cli
创建对dockerd
守护进程的API查询以运行指定的容器。因此,使用
docker run
命令所做的操作只会影响运行该命令的单个节点/计算机/主机。如果使用容器添加卷或网络,则这些资源将仅在运行docker run
命令的单个节点中可用。群集模式(或集群模式)
当你想要或需要利用集群计算的优势,如高可用性,容错,水平可伸缩性,然后你可以使用群模式。有了群模式,你可以有多个节点/机器/主机在你的集群,你可以分布你的工作量在整个集群。你甚至可以启动群模式在一个单一的节点集群,你可以添加更多的节点以后。
示例
您可以重新创建here的场景,假设此时我们只有一个名为
node-01.dc.local
的节点,在该节点上我们启动了以下命令:过了一段时间,当您觉得需要扩展工作负载时,您添加了另一台名为
node-02.dc.local
的计算机,并且您希望将服务扩展和分发到新创建的节点,因此我们在node-02.dc.local
节点上运行了以下命令:现在,我从第一个节点运行了以下代码来扩展服务。
但是如果你需要扩展你的app1,你不能,因为你已经创建了独立模式的容器。
x7yiwoj45#
也就是说,Docker运行等效于API/containers/create then/containers/(id)/start
source: https://docs.docker.com/engine/reference/commandline/run/#parent-command
创建服务时,您可以指定要使用的容器映像以及要在运行的容器内执行的命令。您还可以定义服务的选项,包括:
source: https://docs.docker.com/engine/swarm/how-swarm-mode-works/services/#services-tasks-and-containers
beq87vna6#
docker run
命令用于创建独立容器docker service create
命令用于创建在计算机(称为节点s)的集群(称为swarm)中运行的服务的示例(称为任务s)。这些任务当然是容器,但不是独立容器。在某种意义上,服务在示例化任务时充当模板。例如
创建基于
IMAGE:TAG
映像的MY_SERVICE_NAME
服务的3个任务。更多信息请参见here