Tengo un servicio de cómputo de muestra en mi archivo docker-compose que funciona tan bien como se esperaba.
version: "3" services: compute-service: image: dummy/compute environment: - INPUT=2
Sin embargo, podría haber ocasiones en las que necesite ejecutar este servicio con entradas diferenciales (por ejemplo, INPUT = 4, 7, 9, 10, 12, etc.). No me gusta la idea de copiar y pegar el servicio varias veces para cada entrada. Escalar es una opción. Pero, ¿cómo puedo asegurarme de que cada instancia funcione en una variable de entrada única?
Soy consciente de que podría usar una variable env como esta. ¡Mi pregunta está más bien relacionada con cómo pasar valores únicos como parte de la escala!
version: "3" services: compute-service: image: dummy/compute environment: - INPUT=${INPUT}
Con docker-compose
, no creo que haya soporte para esto . Sin embargo, con el modo de enjambre, que puede usar un archivo de redacción similar, puede pasar {{.Task.Slot}}
como una variable de entorno usando plantillas de servicio . Puede implementar un clúster de enjambre de un solo nodo con docker swarm init
. En lugar de docker-compose up
, estoy implementando el siguiente ejemplo con docker stack deploy -c docker-compose.yml test
.
Y aquí hay un archivo docker-compose.yml de ejemplo que usa la funcionalidad {{.Task.Slot}}
:
version: '3' services: test: image: busybox command: /bin/sh -c "echo My task number is $$task_id && tail -f /dev/null" environment: task_id: "{{.Task.Slot}}" deploy: replicas: 5
Luego, revisando cada uno de estos contenedores en ejecución:
$ docker ps --filter label=com.docker.swarm.service.name=test_test CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ccd0dbebbcbe busybox:latest "/bin/sh -c 'echo My…" About a minute ago Up About a minute test_test.3.i3jg6qrg09wjmntq1q17690q4 bfaa22fa3342 busybox:latest "/bin/sh -c 'echo My…" About a minute ago Up About a minute test_test.5.iur5kg6o3hn5wpmudmbx3gvy1 a372c0ce39a2 busybox:latest "/bin/sh -c 'echo My…" About a minute ago Up About a minute test_test.4.rzmhyjnjk00qfs0ljpfyyjz73 0b47d19224f6 busybox:latest "/bin/sh -c 'echo My…" About a minute ago Up About a minute test_test.1.tm97lz6dqmhl80dam6bsuvc8j c968cb5dbb5f busybox:latest "/bin/sh -c 'echo My…" About a minute ago Up About a minute test_test.2.757e8evknx745120ih5lmhk34 $ docker ps --filter label=com.docker.swarm.service.name=test_test -q | xargs -n 1 docker logs My task number is 3 My task number is 5 My task number is 4 My task number is 1 My task number is 2