docker和docker-compose似乎都在使用同一个dockerFile,这两个工具之间有什么区别?


当前回答

Docker管理单个容器

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

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

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

下面是一个码头组成。来自docker文档的Yml示例:

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

其他回答

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

docker-compose cli可用于管理多容器应用程序。它还将您在docker run cli中输入的许多选项移动到docker-compose中。Yml文件,便于重用。它作为一个前端“脚本”,位于docker使用的相同docker api之上,所以你可以用docker命令和大量shell脚本完成docker-compose所做的一切。更多细节请参见docker-compose文档。


蜂群模式更新

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

Compose Project -> Swarm Stack:用于特定目的的一组服务 群服务:一个镜像和它的配置,可能会放大。 Compose Container -> Swarm Task:服务中的单个容器

有关群模式的更多细节,请参阅docker的群模式文档。

docker or more specifically docker engine is used when we want to handle only one container whereas the docker-compose is used when we have multiple containers to handle. We would need multiple containers when we have more than one service to be taken care of, like we have an application that has a client server model. We need a container for the server model and one more container for the client model. Docker compose usually requires each container to have its own dockerfile and then a yml file that incorporates all the containers.

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

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

点击这里了解更多细节

Docker管理单个容器

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

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

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

下面是一个码头组成。来自docker文档的Yml示例:

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