docker
和 docker-compose
看起来都与同一个 Dockerfile 交互,这两个工具有什么区别?
docker
和 docker-compose
看起来都与同一个 Dockerfile 交互,这两个工具有什么区别?
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
命令来管理堆栈。两种用途之间的映射是一对一的:
有关 swarm 模式的更多详细信息,请参见 docker 的 swarm 模式文档。
docker
管理单个容器
docker-compose
管理多个容器应用程序
使用 docker-compose 需要三个步骤:
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: {}
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文件。
web
部分中的build: .
行指向第一步创建的Dockerfile的位置。 - AndrewGentry