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í?
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
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
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