5. Stacks
Last updated
Last updated
Group of interrelated services that share dependencies, and can be orchestrated and scaled together.
Inter-related services all running in concert.
A single stack is capable of defining and coordinating the functionality of an entire application (though very complex applications may want to use multiple stacks).
It’s easy to add services to our docker-compose.yml
file. First, let’s add a free visualizer service that lets us look at how our swarm is scheduling containers.
Open up docker-compose.yml
in an editor and replace its contents with the following:
The only thing new here is the peer service to web
, named visualizer
. Notice two new things here: a volumes
key, giving the visualizer access to the host’s socket file for Docker, and a placement
key, ensuring that this service only ever runs on a swarm manager -- never a worker. That’s because this container, built from an open source project created by Docker, displays Docker services running on a swarm in a diagram.
We talk more about placement constraints and volumes in a moment.
Make sure your shell is configured to talk to myvm1
(full examples are here).
Run docker-machine ls
to list machines and make sure you are connected to myvm1
, as indicated by an asterisk next to it.
If needed, re-run docker-machine env myvm1
, then run the given command to configure the shell.
On Mac or Linux the command is:
On Windows the command is:
Re-run the docker stack deploy
command on the manager, and whatever services need updating are updated:
Take a look at the visualizer.
You saw in the Compose file that visualizer
runs on port 8080. Get the IP address of one of your nodes by running docker-machine ls
. Go to either IP address at port 8080 and you can see the visualizer running:
The single copy of visualizer
is running on the manager as you expect, and the 5 instances of web
are spread out across the swarm. You can corroborate this visualization by running docker stack ps <stack>
:
The visualizer is a standalone service that can run in any app that includes it in the stack. It doesn’t depend on anything else. Now let’s create a service that does have a dependency: the Redis service that provides a visitor counter.