Container Placement

Controlling Container Placement

  • By default a Swarm Service spreads its tasks out over Nodes

    • Tries to also use the least-used node for a task

  • Swarm has multiple ways to control which node a container runs on

  • Can be used together for complex requirements

    • #1 Node Labels plus Service Constraints (<key>=<value>)

      • Hard requirement. Only schedules tasks if Swarm matches constraint

      • Add labels to nodes first, based on location, hardware, or purpose

      • Then use constraints when creating services

    • #2 Service Modes (replicated|global)

      • Global is good for monitoring/logging/proxy/security tools

      • Only set at service create time

    • #3 (new in 17.04+) Placement Preferences (spread)

      • Soft requirement. For now only used to spread across availability zones

    • #4 Node Availability (active|pause|drain)

    • #5 Resource Requirements (cpu|memory)

Requirements for the sub-section examples

  • Created a 3-node (or more) Swarm

  • Not all nodes are managers (1 manager and 2 workers is good)

  • Created the swarm Visualizer service

    • docker run -it -d -p 5000:8080 -v /var/run/docker.sock:/var/run/docker.sock dockersamples/visualizer

  • Visualizer looks like this:

Here manager2 was originally manager but I demoted it to worker for examples purposes.

Last updated

Was this helpful?