Docker Certified Associate Exam Course

Docker Swarm

Demo Service in Swarm Replicated Global Parallelism Placements

In this tutorial, you’ll learn how to optimize your Docker Swarm services by controlling update parallelism, scaling replicated services, running tasks globally, and enforcing placement constraints. Whether you’re rolling out updates or targeting specific nodes, these patterns will help you deploy reliably at scale.

We’ll cover:

  • Controlling update parallelism
  • Creating replicated services
  • Running services in global mode
  • Constraining services to specific nodes

1. Update Parallelism

By default, Swarm updates one task at a time. Adjusting the update parallelism speeds up rollouts or rollbacks across many tasks.

docker service inspect secondservice --pretty

Example output:

UpdateConfig:
  Parallelism:         1
  On failure:          pause
  Monitoring Period:   5s
  Max failure ratio:   0
  Update order:        stop-first

RollbackConfig:
  Parallelism:         1
  On failure:          pause
  Monitoring Period:   5s
  Max failure ratio:   0
  Rollback order:      stop-first

To upgrade two tasks at a time, use --update-parallelism:

docker service update \
  --image httpd:2 \
  --update-parallelism 2 \
  secondservice

Re-inspect to confirm the change:

docker service inspect secondservice --pretty

You’ll see UpdateConfig.Parallelism: 2 while the rollback parallelism remains unchanged.

Note

Increasing --update-parallelism accelerates rollouts but may spike resource usage. Tune based on your cluster capacity.


2. Replicated Service

A replicated service ensures a fixed number of identical tasks across the swarm.

docker service create \
  --name replicatedtest \
  --replicas 8 \
  redis:latest

Progress output:

overall progress: 8 out of 8 tasks
1/8: running    [==============>              ]
…
8/8: running    [==============================]
verify: Service converged

Verify service and mode:

docker service ls
docker service inspect replicatedtest --pretty | grep Mode

Output:

Mode: replicated
Replicas: 8

3. Global Service

Global mode deploys exactly one task per active node. When nodes join or leave, tasks are added or removed automatically.

docker service create \
  --mode global \
  --name globaltest \
  redis:latest

You’ll see a task scheduled on each node:

overall progress: 6 out of 6 tasks
a1b2c3d4e5f6: running [==============================>]
…
z9y8x7w6v5u4: running [==============================>]
verify: Service converged

Confirm:

docker service ls
docker node ls

4. Placement Constraints

Placement constraints let you target services to nodes with specific labels.

  1. Label the node (replace <NODE_ID>):

    docker node update --label-add env=dev <NODE_ID>
    
  2. Verify the label:

    docker node inspect <NODE_ID> --format '{{ .Spec.Labels }}'
    
  3. Create the constrained service:

    docker service create \
      --name placementtest \
      --constraint node.labels.env==dev \
      --replicas 3 \
      redis:latest
    

All three tasks will run only on the node labeled env=dev.

Warning

If no nodes match the constraint, the service remains pending. Always verify labels before deployment.


Service Mode Comparison

Service ModeDescriptionExample Flag
ReplicatedFixed number of tasks--replicas 8
GlobalOne task per active node--mode global
UpdateConfigControl rollout parallelism & order--update-parallelism

That concludes this demo on Docker Swarm update parallelism, service modes, and placement constraints.

Watch Video

Watch video content

Previous
Demo Service in Swarm Basic Operations