Docker Compose中服务和容器之间的区别

46

我正在学习Docker Compose中的volumes_from选项。显然,您可以从容器或服务导入卷。根据Docker Compose文档:

volumes_from

从另一个服务或容器挂载所有卷,可以选择只读访问(ro)或读写访问(rw)。

volumes_from:
 - service_name
 - service_name:ro
 - container:container_name
 - container:container_name:rw

注意:容器格式仅在版本2文件格式中受支持。 在版本1中,您可以使用容器名称而无需将其标记为容器:

- service_name
- service_name:ro
- container_name
- container_name:rw
我在这里有些困惑,容器和服务之间有什么区别?

2个回答

114

服务和容器之间有关联但是它们是不同的东西。

一个服务可以由一个或多个容器运行。使用 docker 可以处理容器,使用 docker-compose 可以处理服务。

比如:

假设我们有这个 docker-compose.yml 文件:

web:
  image: example/my_web_app:latest
  expose:
    - 80
  links:
    - db 

db:
  image: postgres:latest

这个 compose 文件定义了两个服务,webdb

当你运行 docker-compose up 命令时,假设项目文件夹名为 test1,compose 将会启动 2 个容器,分别命名为 test1_db_1test1_web_1

$ docker ps -a
CONTAINER ID   IMAGE        COMMAND          ...      NAMES
1c1683e871dc   test1_web    "nginx -g"       ...      test1_web_1
a41360558f96   test1_db     "postgres -d"    ...      test1_db_1

因此,在这个点上,您有2个服务,每个服务有1个容器。

但是,您可以将名为 web 的服务扩展到使用5个容器。

$ docker-compose scale web=5
Creating and starting 2 ... done
Creating and starting 3 ... done
Creating and starting 4 ... done
Creating and starting 5 ... done

在此时,您有2个服务和6个容器。

$ docker ps -a  
CONTAINER ID   IMAGE        COMMAND         ...      NAMES
1bf4c939263f   test1_web    "nginx -g"      ...      test1_web_3
d3033964a44b   test1_web    "nginx -g"      ...      test1_web_4
649bbda4d0b0   test1_web    "nginx -g"      ...      test1_web_5
a265ea406727   test1_web    "nginx -g"      ...      test1_web_2
1c1683e871dc   test1_web    "nginx -g"      ...      test1_web_1
a41360558f96   test1_db     "postgres -d'   ...      test1_db_1

使用docker-compose,您可以针对一个或多个服务运行子命令。

$docker-compose stop web

3
这个回答太好了,我点了个赞,结果打破了你完美的“69”赞数。 - Valdrinium

1

我无法完全回答你的问题,因为我自己不了解服务方面的情况。然而,我理解容器中的volumes_from,因此这将回答你问题的一半 :) 部分回答总比没有好吧?

容器A

volumes: /my/shared/directory
container_name:ca

容器 B

volumes_from:ca

现在,容器B将在其中有一个新目录/my/shared/directory,该目录是从容器A挂载的-容器B中的目录内容将与容器A中的目录内容完全相同。
如果您发现有关服务的信息,请告诉我。

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