docker 和 docker-compose 有什么区别

What is the difference between docker and docker-compose

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

在 docker 引擎上管理单个容器时使用 docker cli。是访问docker守护进程api.

的客户端命令行

docker-compose cli 可用于管理多容器应用程序。它还将您在 docker run cli 上输入的许多选项移动到 docker-compose.yml 文件中,以便于重复使用。它作为前端 "script" 在 docker 使用的相同 docker api 之上工作,所以你可以用 dockerdocker-compose 做的所有事情] 命令和大量 shell 脚本。有关详细信息,请参阅 this documentation on docker-compose


集群模式更新

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

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

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

docker 管理单个容器

docker-compose 管理多个容器应用

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

  1. 使用 Dockerfile
  2. 定义应用程序环境
  3. docker-compose.yml
  4. 中定义应用服务
  5. 运行 docker-compose up 开始和 运行 应用程序

下面是取自 docker docs:

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

Docker文件是一个文本文档,其中包含用户可以在命令行上调用以assemble图像的所有commands/Instruction。

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

Check here for more details

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