docker 码头服务和码头集装箱有什么区别?

2ic8powd  于 2022-12-22  发布在  Docker
关注(0)|答案(6)|浏览(125)

何时使用docker service create命令?何时使用docker run命令?

hyrbngr7

hyrbngr71#

Docker运行将启动单个容器。
使用docker服务,你可以管理一组容器(来自同一张图片),你可以缩放它们(启动多个容器)或者更新它们。

quhf5bfb

quhf5bfb2#

您可能需要读取“docker service is the new docker run
根据这些幻灯片,“docker service create”就像一个“进化的”docker运行。

ha5z0ras

ha5z0ras3#

Docker服务就像容器的“蓝图”。你可以定义一个简单的工作者作为服务,然后将服务扩展到20个容器,以快速通过队列。之后,你可以将服务再次缩减到3个容器。同样,通过Swarm,这些容器可以部署到群的不同节点。
但是,是的,我也建议阅读文档,就像@Tristan建议的那样。

h6my8fg2

h6my8fg24#

您可以通过两种方式使用Docker。

独立模式

当你使用独立模式时,你只在一台机器上安装了docker守护进程。在这里你可以在这台机器上创建/销毁/运行一个或多个container。
所以当你运行docker rundocker-cli创建对dockerd守护进程的API查询以运行指定的容器。
因此,使用docker run命令所做的操作只会影响运行该命令的单个节点/计算机/主机。如果使用容器添加卷或网络,则这些资源将仅在运行docker run命令的单个节点中可用。

群集模式(或集群模式)

当你想要或需要利用集群计算的优势,如高可用性,容错,水平可伸缩性,然后你可以使用群模式。有了群模式,你可以有多个节点/机器/主机在你的集群,你可以分布你的工作量在整个集群。你甚至可以启动群模式在一个单一的节点集群,你可以添加更多的节点以后。

示例

您可以重新创建here的场景,假设此时我们只有一个名为node-01.dc.local的节点,在该节点上我们启动了以下命令:

####### Initiating swarm mode ########

$ docker swarm init --advertise-addr eth0

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-21mxdqipe5lvzyiunpbrjk1mnzaxrlksnu0scw7l5xvri4rtjn-590dyij6z342uyxthletg7fu6 192.168.0.8:2377

####### create a standalone container  #######
[node1] (local) root@192.168.0.8 ~
$ docker run -d --name app1 nginx

####### creating a service #######
[node1] (local) root@192.168.0.8 ~
$ docker service create --name app2 nginx

过了一段时间,当您觉得需要扩展工作负载时,您添加了另一台名为node-02.dc.local的计算机,并且您希望将服务扩展和分发到新创建的节点,因此我们在node-02.dc.local节点上运行了以下命令:

####### 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

但是如果你需要扩展你的app1,你不能,因为你已经创建了独立模式的容器。

x7yiwoj4

x7yiwoj45#

    • 简而言之:Docker服务主要在您使用Docker swarm配置主节点时使用,这样Docker容器将在分布式环境中运行**并且可以轻松管理。
    • Docker run:**Docker run命令首先在指定的图像上创建一个可写的容器层,然后使用指定的命令启动它。

也就是说,Docker运行等效于API/containers/create then/containers/(id)/start
source: https://docs.docker.com/engine/reference/commandline/run/#parent-command

    • Docker服务:**Docker服务将是某个较大应用程序上下文中的微服务的映像。服务的示例可能包括HTTP服务器、数据库或您希望在分布式环境中运行的任何其他类型的可执行程序。

创建服务时,您可以指定要使用的容器映像以及要在运行的容器内执行的命令。您还可以定义服务的选项,包括:

  • 群将使服务在群外部可用的端口
  • 覆盖网络,用于所述服务连接到所述群中的其他服务
  • CPU和内存限制和保留
  • 滚动更新策略
  • 群中运行的映像副本的数量

source: https://docs.docker.com/engine/swarm/how-swarm-mode-works/services/#services-tasks-and-containers

beq87vna

beq87vna6#

  • docker run命令用于创建独立容器
  • docker service create命令用于创建在计算机(称为节点s)的集群(称为swarm)中运行的服务的示例(称为任务s)。这些任务当然是容器,但不是独立容器。在某种意义上,服务在示例化任务时充当模板。

例如

docker service create --name MY_SERVICE_NAME --replicas 3 IMAGE:TAG

创建基于IMAGE:TAG映像的MY_SERVICE_NAME服务的3个任务。
更多信息请参见here

相关问题