Docker服务和Docker容器的区别

4

我可以通过命令创建一个Docker容器

docker run <<image_name>>

我可以通过命令创建一个服务。

docker service create <<image_name>>

这两者的行为有什么区别?

何时需要创建服务而不是容器?

2个回答

5

docker service命令在docker swarm中替代了docker rundocker run是为单个主机解决方案构建的。它的整个想法是专注于本地容器在它所讲话的系统上。而在群集中,个别容器是无关紧要的。我们只需使用swarm服务来管理群集中的多个容器。Swarm将为我们编排服务的容器。

docker service create主要用于docker swarm modedocker run没有缩放的概念。使用--replicas命令,您可以指定要创建的副本数量。这将在许多不同的节点上创建和管理容器的多个副本。有几个这样的选项可使用docker service create和其他docker service ...命令来管理多个容器。

请注意:Docker服务是用于容器编排系统(Swarm)的。它具有内置的故障恢复功能,即在失败时重新创建容器。如果使用docker run,则不会在容器失败时重新创建容器。当使用docker service命令时,我们并不是直接要求执行“创建单个容器”等操作,而是告诉编排系统:“将此作业放入您的队列中,当您可以执行Swarm上的该操作时,请执行它”。这意味着它具有回滚设施、故障缓解和大量内置智能。
在Swarm模式下考虑使用docker service create,而在非Swarm模式下使用docker run。您可以查阅有关Docker Swarm的资料以了解Docker服务。

我可以在创建服务时加入sworm吗? - Shiva
Swarm默认处于未激活状态。您需要通过docker swarm init进行初始化,然后创建的服务将在Swarm中运行。请查询有关Swarm的信息以了解服务。 - Riyafa Abdul Hameed
你的回答很好,但是关于“docker run不会在容器失败时重新创建容器”的说法是错误的。使用“docker run --restart on-failue”命令可以实现这一点。 - Chiptus
那么,Docker服务是否包含多个Docker容器?如果是这样的话,给定一个服务ID或名称,我该如何找出哪些Docker容器在该服务中?反之亦然,给定一个容器ID,我该如何找出该容器属于哪个服务?我问这个问题是因为,给定一个服务名称,我想要ssh进入该服务内的任何一个容器。谢谢。 - therobyouknow

2
没有实质上的区别。你可以在官方文档中读到"服务在生产环境中真的只是容器"。
服务可以在 "docker-compose.yml" 中声明并从中启动。一旦启动,它们将作为容器运行。
这只是一种常见的命名方式,用于命名堆栈的不同组成部分。

同意这部分内容,但是那些是通过 docker stack deploy 创建的。我更具体地说,我也可以通过命令创建服务。那么,我是否有使用 docker service create 命令的用例呢? - Shiva
docker stack deploy 只能在集群 swarm 上运行。如果您没有任何集群 swarm,它将无法运行。但是,如果您的 docker-compose 文件中有许多服务,您可以通过调用 docker-compose 命令来启动它们,该命令将为您创建服务。 然而,并不是所有的操作都可以在 docker-compose 中完成。例如,如果您想声明要启动一个服务的副本数量,它将无法运行。这就需要使用 docker stack。 - OlivierTerrien
让我们来看一下官方文档:https://docs.docker.com/compose/overview/。 示例docker-compose文件声明了2个服务“web”和“redis”。要一起启动它们或逐个启动,可以使用docker-compose命令。 但是如果您想自己创建服务,您的命令也是正确的。 - OlivierTerrien
@OlivierTerrien 基于“服务在生产中实际上只是容器”的前提,那么我该如何ssh进入该容器呢?要ssh进入Docker容器,可以执行例如docker exec -it docker exec -it 1a2b3c4d5e6 /bin/bash的命令,其中1a2b3c4d5e6是Docker容器的十六进制ID。服务ID是字母数字混合的,例如qshbw3hciwv1,如果我尝试使用该命令,则会出现错误。所以请问您能否给予建议? - therobyouknow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接