What is the difference between docker and docker-compose

后端 未结 2 1215
清歌不尽
清歌不尽 2020-12-07 07:30

docker and docker-compose seem to be interacting with the same dockerFile, what is the difference between the two tools?

相关标签:
2条回答
  • 2020-12-07 07:57

    The docker cli is used when managing individual containers on a docker engine. It is the client command line to access the docker daemon api.

    The docker-compose cli can be used to manage a multi-container application. It also moves many of the options you would enter on the docker run cli into the docker-compose.yml file for easier reuse. It works as a front end "script" on top of the same docker api used by docker, so you can do everything docker-compose does with docker commands and a lot of shell scripting. See this documentation on docker-compose for more details.


    Update for Swarm Mode

    Since this answer was posted, docker has added a second use of docker-compose.yml files. Starting with the version 3 yml format and docker 1.13, you can use the yml with docker-compose and also to define a stack in docker's swarm mode. To do the latter you need to use docker stack deploy -c docker-compose.yml $stack_name instead of docker-compose up and then manage the stack with docker commands instead of docker-compose commands. The mapping is a one for one between the two uses:

    • Compose Project -> Swarm Stack: A group of services for a specific purpose
    • Compose Service -> Swarm Service: One image and it's configuration, possibly scaled up.
    • Compose Container -> Swarm Task: A single container in a service

    For more details on swarm mode, see docker's swarm mode documentation.

    0 讨论(0)
  • 2020-12-07 08:08

    docker manages single containers

    docker-compose manages multiple container applications

    Usage of docker-compose requires 3 steps:

    1. Define the app environment with a Dockerfile
    2. Define the app services in docker-compose.yml
    3. Run docker-compose up to start and run app

    Below is a docker-compose.yml example taken from the docker docs:

    services:
      web:
        build: .
        ports:
        - "5000:5000"
        volumes:
        - .:/code
        - logvolume01:/var/log
        links:
        - redis
      redis:
        image: redis
    volumes:
      logvolume01: {}
    
    0 讨论(0)
提交回复
热议问题