Diferencia entre servicio y contenedor en docker compose


Estaba pasando por la opción volumes_from en docker compose. Al parecer, puede importar volúmenes desde un contenedor o un servicio. De la documentación de docker compose es:

Volumes_from

Monte todos los volúmenes desde otro servicio o contenedor, opcionalmente especificando acceso de solo lectura (ro) o lectura-escritura(rw).

volumes_from:
 - service_name
 - service_name:ro
 - container:container_name
 - container:container_name:rw

Nota: El contenedor:... los formatos solo son compatibles con la versión 2 formato de archivo. En la versión 1, puede utilizar nombres de contenedores sin marcas como tales:

- service_name
- service_name:ro
- container_name
- container_name:rw

Estoy confundido aquí ¿cuál es la diferencia entre contenedores y servicios aquí?

Author: Muhammad Raihan Muhaimin, 2016-02-23

2 answers

Los servicios y el contenedor están relacionados, pero ambos son cosas diferentes.

Un servicio puede ser ejecutado por uno o varios contenedores. Con docker puede manejar contenedores y con docker-compose puede manejar servicios.

Por ejemplo:

Digamos que tenemos este docker-compose.yml archivo:

web:
  image: example/my_web_app:latest
  expose:
    - 80
  links:
    - db 

db:
  image: postgres:latest

Este archivo de composición define dos servicios, web y db.

Cuando ejecute docker-compose up, asumiendo que el directorio del proyecto es test1, compose iniciará 2 contenedores con el nombre myapp_db_1 y myapp_web_1.

$ docker ps -a
CONTAINER ID   IMAGE        COMMAND          ...      NAMES
1c1683e871dc   test1_web    "nginx -g"       ...      test1_web_1
a41360558f96   test1_db     "postgres -d"    ...      test1_db_1

Entonces, en este punto tienes 2 servicios y 1 contenedor para cada uno.

Pero podría escalar el servicio llamado web para usar 5 contenedores.

$ docker-compose scale web=5
Creating and starting 2 ... done
Creating and starting 3 ... done
Creating and starting 4 ... done
Creating and starting 5 ... done

En este punto tienes 2 servicios y 6 contenedores

$ docker ps -a  
CONTAINER ID   IMAGE        COMMAND         ...      NAMES
1bf4c939263f   test1_web    "nginx -g"      ...      test1_web_3
d3033964a44b   test1_web    "nginx -g"      ...      test1_web_4
649bbda4d0b0   test1_web    "nginx -g"      ...      test1_web_5
a265ea406727   test1_web    "nginx -g"      ...      test1_web_2
1c1683e871dc   test1_web    "nginx -g"      ...      test1_web_1
a41360558f96   test1_db     "postgres -d'   ...      test1_db_1

Además, con docker-compose puede ejecutar subcomando contra uno o más servicios.

$docker-compose stop web
 44
Author: Hemerson Varela,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-23 18:57:02

No puedo responder completamente a su pregunta ya que yo mismo no entiendo acerca de los servicios. Sin embargo, entiendo volumes_from en relación con los contenedores y por lo que esto responderá a la mitad de su pregunta :) Una respuesta parcial es mejor que nada?

CONTENEDOR A

volumes: /my/shared/directory
container_name:ca

CONTENEDOR B

volumes_from:ca

Ahora el contenedor B tendrá un nuevo directorio en el directorio /my/shared/que está montado desde el contenedor A - el contenido del directorio en el contenedor B será exactamente el mismo que el contenido de el directorio en el contenedor A

Si usted descubre acerca de los servicios por favor hágamelo saber

 2
Author: danday74,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-23 14:20:41