¿Cuál es la diferencia entre docker y docker-compose?

237

dockery docker-composeparece estar interactuando con el mismo dockerFile, ¿cuál es la diferencia entre las dos herramientas?

Hafiz
fuente

Respuestas:

270

El dockercli se usa al administrar contenedores individuales en un motor acoplable. Es la línea de comando del cliente para acceder a la api docker daemon.

El docker-composecli se puede usar para administrar una aplicación de contenedores múltiples. También mueve muchas de las opciones que ingresaría en el docker runcli al docker-compose.ymlarchivo para una reutilización más fácil. Funciona como un "script" front-end en la parte superior de la misma API de Docker utilizada docker, por lo que puede hacer todo lo que docker-composehace con dockercomandos y una gran cantidad de scripts de shell. Consulte esta documentación en docker-compose para obtener más detalles.


Actualización para el modo Enjambre

Desde que se publicó esta respuesta, docker ha agregado un segundo uso de los archivos docker-compose.yml. Comenzando con el formato yml de la versión 3 y docker 1.13, puede usar el yml con docker-compose y también para definir una pila en el modo enjambre de docker. Para hacer esto último, debe usar en docker stack deploy -c docker-compose.yml $stack_namelugar de docker-compose upy luego administrar la pila con dockercomandos en lugar de docker-composecomandos. El mapeo es uno por uno entre los dos usos:

  • Redactar proyecto -> Pila de enjambre: un grupo de servicios para un propósito específico
  • Servicio de redacción -> Servicio de enjambre: una imagen y su configuración, posiblemente ampliada.
  • Redactar contenedor -> Tarea de enjambre: un único contenedor en un servicio

Para obtener más detalles sobre el modo enjambre, consulte la documentación del modo enjambre de Docker .

BMitch
fuente
76

docker gestiona contenedores individuales

docker-compose gestiona múltiples aplicaciones de contenedores

El uso de docker-compose requiere 3 pasos:

  1. Defina el entorno de la aplicación con un Dockerfile
  2. Defina los servicios de la aplicación en docker-compose.yml
  3. Ejecutar docker-compose uppara iniciar y ejecutar la aplicación

docker-componer

A continuación se muestra un ejemplo de docker-compose.yml tomado de los documentos de docker :

services:
  web:
    build: .
    ports:
    - "5000:5000"
    volumes:
    - .:/code
    - logvolume01:/var/log
    links:
    - redis
  redis:
    image: redis
volumes:
  logvolume01: {}
JSON C11
fuente
3
En aras de la claridad, la línea build: .en la websección apunta a la ubicación del Dockerfile creado en el paso 1.
AndrewGentry