【问题标题】:Difference between service and container in docker composedocker compose中服务和容器的区别
【发布时间】:2016-02-22 23:11:06
【问题描述】:

我正在通过 docker compose 中的 volumes_from 选项。显然,您可以从容器或服务中导入卷。从 docker compose 文档中可以看出:

volumes_from

挂载其他服务或容器中的所有卷(可选) 指定只读访问(ro)或读写(rw)。

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

注意:container:... 格式仅在版本 2 中受支持 文件格式。在版本 1 中,您可以使用容器名称而无需标记 他们是这样的:

- service_name
- service_name:ro
- container_name
- container_name:rw

我在这里很困惑,这里的容器和服务有什么区别?

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    服务和容器是相关的,但两者是不同的东西。

    一项服务可以由一个或多个容器运行。 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会启动两个容器,分别命名为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
    

    【讨论】:

    • 这个答案太好了,我实际上也通过竖起大拇指打破了你完美的“69”票
    【解决方案2】:

    我无法完全回答您的问题,因为我自己也不了解服务。 但是,我确实了解 volumes_from 与容器的关系,因此这将回答您的一半问题:) 部分答案总比没有好?

    容器 A

    volumes: /my/shared/directory
    container_name:ca
    

    容器 B

    volumes_from:ca
    

    现在容器 B 中将有一个新目录 /my/shared/directory 从容器 A 挂载 - 容器 B 中目录的内容将与容器 A 中目录的内容完全相同

    如果您发现有关服务的信息,请告诉我

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-16
      • 2018-03-29
      • 2016-10-24
      • 1970-01-01
      • 2015-06-23
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多