Docker Service和Docker Container有什么区别?

时间:2017-04-14 09:05:37

标签: docker docker-compose dockerfile

我们何时使用docker service create命令,何时使用docker run命令?

6 个答案:

答案 0 :(得分:23)

简而言之: Docker服务主要用于使用Docker swarm配置主节点,以便Docker容器将在分布式环境中运行,并且可以轻松管理

Docker运行: docker run命令首先在指定的映像上创建一个可写容器层,然后使用指定的命令启动它。

也就是说,docker run相当于API / containers / create then / containers /(id)/ start

来源:https://docs.docker.com/engine/reference/commandline/run/#parent-command

Docker服务: Docker服务将成为某些大型应用程序环境中微服务的映像。服务示例可能包括HTTP服务器,数据库或您希望在分布式环境中运行的任何其他类型的可执行程序。

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

  • 群组将在群组外提供服务的端口
  • 用于连接群组中其他服务的服务的覆盖网络
  • CPU和内存限制和预留
  • 滚动更新政策
  • 要在群组中运行的图像的副本数

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

答案 1 :(得分:13)

您可能需要阅读" docker service is the new docker run"

根据这些幻灯片," docker service create"就像一个进化的"码头运行。你需要创建一个"服务"如果你想要deploy a container to Docker Swarm

答案 2 :(得分:11)

Docker服务就像"蓝图"用于容器。你可以,例如将一个简单的worker定义为一个服务,然后将该服务扩展到20个容器,以便快速通过队列。然后再次将该服务缩减到3个容器。此外,通过Swarm,这些容器可以部署到您的swarm的不同节点。

但是,我也建议阅读文档,就像@Tristan建议的那样。

答案 3 :(得分:8)

Docker run将启动一个容器。

使用泊坞窗服务,您可以管理一组容器(来自同一图像)。您可以缩放它们(启动多个容器)或更新它们。

答案 4 :(得分:3)

  • docker run 用于创建独立容器
  • docker service create 用于创建在群集(称为 swarm )的计算机中运行的服务的实例(称为 task ) (称为 node s)。这些任务是库尔的容器,但不是独立容器。从某种意义上说,服务在实例化任务时充当模板。

例如

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

基于IMAGE:TAG图像创建MY_SERVICE_NAME服务的3个任务。

可以找到更多信息here

答案 5 :(得分:3)

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

独立模式


当你使用独立模式时,你只在一台机器上安装了 docker daemon。在这里,您可以在单台机器上创建/销毁/运行单个容器或多个容器。

所以当你运行 Price Ratios; docker rundocker-cli 守护进程创建 API 查询以运行指定的容器。

因此,您对 dockerd 命令所做的操作只会影响您运行该命令的单个节点/机器/主机。如果您使用容器添加卷或网络,则这些资源将仅在您运行 docker run 命令的单个节点中可用。

群模式(或集群模式)


当您想要或需要利用集群计算的优势,例如高可用性、容错性、水平可扩展性时,您可以使用 swarm 模式。使用 swarm 模式,您的集群中可以有多个节点/机器/主机,并且您可以在整个集群中分配工作负载。您甚至可以在单节点集群中启动 swarm 模式,以后可以添加更多节点。

示例


您可以免费重新创建场景here。 假设此时我们只有一个名为 docker run 的节点,我们在其中发起了以下命令,

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.

但是,如果您需要扩展您的 app1,则无法扩展,因为您已使用独立模式创建了容器。