【问题标题】:What is the difference between docker and docker-composedocker 和 docker-compose 有什么区别
【发布时间】:2016-10-24 07:23:43
【问题描述】:

dockerdocker-compose好像是在和同一个dockerFile交互,这两个工具有什么区别?

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    docker cli 用于在 docker 引擎上管理单个容器。它是访问 docker daemon api 的客户端命令行。

    docker-compose cli 可用于管理多容器应用程序。它还将您在docker run cli 中输入的许多选项移动到docker-compose.yml 文件中,以便于重用。它在docker 使用的同一个docker api 之上作为前端“脚本”工作,因此您可以使用docker 命令和大量shell 脚本来完成docker-compose 所做的一切。详情请见this documentation on docker-compose


    群模式更新

    自从发布此答案以来,docker 添加了对 docker-compose.yml 文件的第二次使用。从version 3 yml format 和 docker 1.13 开始,您可以将 yml 与 docker-compose 一起使用,也可以在 docker 的 swarm 模式下定义堆栈。要执行后者,您需要使用docker stack deploy -c docker-compose.yml $stack_name 而不是docker-compose up,然后使用docker 命令而不是docker-compose 命令管理堆栈。两种用途之间的映射是一对一的:

    • Compose Project -> Swarm Stack:一组用于特定目的的服务
    • Compose Service -> Swarm Service:一个图像及其配置,可能会放大。
    • Compose Container -> Swarm Task:服务中的单个容器

    有关 swarm 模式的更多详细信息,请参阅docker's swarm mode documentation

    【讨论】:

      【解决方案2】:

      docker 管理单个容器

      docker-compose管理多个容器应用

      docker-compose的使用需要3个步骤:

      1. 使用 Dockerfile 定义应用环境
      2. docker-compose.yml 中定义应用服务
      3. 运行docker-compose up来启动和运行应用程序

      下面是一个取自docker docsdocker-compose.yml示例:

      services:
        web:
          build: .
          ports:
          - "5000:5000"
          volumes:
          - .:/code
          - logvolume01:/var/log
          links:
          - redis
        redis:
          image: redis
      volumes:
        logvolume01: {}
      

      【讨论】:

      • 为清楚起见,web 部分中的行 build: . 指向在步骤 1 中创建的 Dockerfile 的位置。
      • 那么上面的yml会创建多少个容器呢?他们是否共享某些东西,例如 FS?
      【解决方案3】:

      Dockerfile 是一个文本文档,其中包含用户可以在命令行上调用以组装图像的所有命令/指令。

      Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Compose,您可以使用 YAML 文件来配置应用程序的服务。然后,使用一个命令,您可以从您的配置中创建并启动所有服务。默认情况下,docker-compose 期望 Compose 文件的名称为 docker-compose.ymldocker-compose.yaml。如果 compose 文件有不同的名称,我们可以使用 -f 标志指定它。

      Check here for more details

      【讨论】:

        【解决方案4】:

        当我们只想处理一个容器时使用 docker 或更具体地说是 docker 引擎,而当我们要处理多个容器时使用 docker-compose。当我们需要处理多个服务时,我们将需要多个容器,就像我们有一个具有客户端服务器模型的应用程序一样。我们需要一个用于服务器模型的容器和一个用于客户端模型的容器。 Docker compose 通常要求每个容器都有自己的 dockerfile,然后是一个包含所有容器的 yml 文件。

        【讨论】:

          猜你喜欢
          • 2016-02-16
          • 1970-01-01
          • 2018-10-18
          • 1970-01-01
          • 2018-05-12
          • 2021-05-24
          • 2015-04-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多