【发布时间】:2016-10-24 07:23:43
【问题描述】:
docker和docker-compose好像是在和同一个dockerFile交互,这两个工具有什么区别?
【问题讨论】:
标签: docker docker-compose
docker和docker-compose好像是在和同一个dockerFile交互,这两个工具有什么区别?
【问题讨论】:
标签: docker docker-compose
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 命令管理堆栈。两种用途之间的映射是一对一的:
有关 swarm 模式的更多详细信息,请参阅docker's swarm mode documentation。
【讨论】:
docker 管理单个容器
docker-compose管理多个容器应用
docker-compose的使用需要3个步骤:
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: {}
【讨论】:
web 部分中的行 build: . 指向在步骤 1 中创建的 Dockerfile 的位置。
Dockerfile 是一个文本文档,其中包含用户可以在命令行上调用以组装图像的所有命令/指令。
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Compose,您可以使用 YAML 文件来配置应用程序的服务。然后,使用一个命令,您可以从您的配置中创建并启动所有服务。默认情况下,docker-compose 期望 Compose 文件的名称为 docker-compose.yml 或 docker-compose.yaml。如果 compose 文件有不同的名称,我们可以使用 -f 标志指定它。
【讨论】:
当我们只想处理一个容器时使用 docker 或更具体地说是 docker 引擎,而当我们要处理多个容器时使用 docker-compose。当我们需要处理多个服务时,我们将需要多个容器,就像我们有一个具有客户端服务器模型的应用程序一样。我们需要一个用于服务器模型的容器和一个用于客户端模型的容器。 Docker compose 通常要求每个容器都有自己的 dockerfile,然后是一个包含所有容器的 yml 文件。
【讨论】: