docker和docker-compose有什么区别?

371

dockerdocker-compose 看起来都与同一个 Dockerfile 交互,这两个工具有什么区别?

4个回答

366
docker 命令行界面用于管理 docker 引擎上的单个容器。它是客户端命令行,用于访问 docker 守护进程 api。 docker-compose 命令行界面可用于管理多个容器应用程序。它还将许多您在 docker run 命令行中输入的选项移动到 docker-compose.yml 文件中,以便更轻松地重复使用。它作为同一 docker api 上的前端“脚本”与 docker 使用,因此您可以使用 docker 命令和大量 shell 脚本执行 docker-compose 所做的所有操作。有关详细信息,请参见 docker-compose 的此文档

Swarm 模式更新

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

  • Compose 项目 -> Swarm 堆栈:用于特定目的的服务组
  • Compose 服务 -> Swarm 服务:一个镜像及其配置,可能会进行缩放。
  • Compose 容器 -> Swarm 任务:服务中的单个容器

有关 swarm 模式的更多详细信息,请参见 docker 的 swarm 模式文档


130

docker 管理单个容器

docker-compose 管理多个容器应用程序

使用 docker-compose 需要三个步骤:

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

docker-compose up

下面是从docker文档中引用的一个 docker-compose.yml 示例:

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

11
为了清晰起见,在web部分中的build: .行指向第一步创建的Dockerfile的位置。 - AndrewGentry
2
那么使用上述yml文件会创建多少个容器?它们是否共享某些内容,例如文件系统? - AlikElzin-kilaka

5

Dockerfile 是一个文本文件,它包含了用户能够在命令行上调用的所有指令/命令来组装镜像。

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

点击这里查看更多细节


4

Docker 或者更具体地说Docker引擎是用于处理单个容器的,而 Docker Compose 则用于处理多个容器。我们需要多个容器来处理不止一个服务的情况,比如我们有一个应用程序,它具有客户端服务器模型。我们需要一个容器用于服务器模型,还需要一个容器用于客户端模型。Docker Compose 通常要求每个容器有自己的 dockerfile,然后再有一个包含所有容器的yml文件。


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