--- description: Setup for voting app example keywords: multi-container, services, swarm mode, cluster, voting app title: Create a swarm --- Now, we'll add our Docker machines to a [swarm](/engine/swarm/index.md). ## Initialize the swarm 1. Log into the manager. ```none $ docker-machine ssh manager ## . ## ## ## == ## ## ## ## ## === /"""""""""""""""""\___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~ \______ o __/ \ \ __/ \____\_______/ _ _ ____ _ _ | |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __ | '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__| | |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ | |_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_| WARNING: this is a build from test.docker.com, not a stable release. Boot2Docker version 1.13.0-rc7, build HEAD : b2cde29 - Sat Jan 14 00:29:39 UTC 2017 Docker version 1.13.0-rc7, build 48a9e53 ``` 2. Initialize a swarm. The command to initialize a swarm is: ```none docker swarm init --advertise-addr ``` >**Tip**: To get the IP address of the manager, use a terminal window that is not `ssh`'ed into a virtual machine (or exit out of a current one), and type either `docker-machine ip manager` or `docker-machine ls`. Look back at [Verify machines are running and get IP addresses](node-setup.md#verify-machines-are-running-and-get-ip-addresses)) for examples. ```none docker@manager:~$ docker swarm init --advertise-addr 192.168.99.100 Swarm initialized: current node (2tjrasfqfu945b7n4753374sw) is now a manager. To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-144pfsupfo25h43zzr6b6bghjson8uedxjsndo5vuehqlyarsk-9k4q84axm008whv9zl4a8m8ct \ 192.168.99.100:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions. ``` >**Tip**: The next step is to log into the worker machine. You can either open a new shell, or exit out of the manager in the current shell by typing `exit`. ### Add a worker node to the swarm 1. Log into the worker machine. ```none $ docker-machine ssh worker ## . ## ## ## == ## ## ## ## ## === /"""""""""""""""""\___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~ \______ o __/ \ \ __/ \____\_______/ _ _ ____ _ _ | |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __ | '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__| | |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ | |_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_| WARNING: this is a build from test.docker.com, not a stable release. Boot2Docker version 1.13.0-rc7, build HEAD : b2cde29 - Sat Jan 14 00:29:39 UTC 2017 Docker version 1.13.0-rc7, build 48a9e53 ``` 2. On the worker, run the `join` command given as the output of the `swarm init` command you ran on the manager. ```none docker@worker:~$ docker swarm join \ > --token SWMTKN-1-144pfsupfo25h43zzr6b6bghjson8uedxjsndo5vuehqlyarsk-9k4q84axm008whv9zl4a8m8ct \ > 192.168.99.100:2377 This node joined a swarm as a worker. ``` If you don't have the command, run `docker swarm join-token worker` on a manager node to retrieve the `join` command for a worker for this swarm. ### List the nodes in the swarm Log into the manager (e.g., `docker-machine ssh manager`) and run `docker node ls`. ```none docker@manager:~$ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS 2tjrasfqfu945b7n4753374sw * manager Ready Active Leader syc46yimgtyz9ljcsfqiurvp0 worker Ready Active ``` ## What's next? In the next step, we'll [deploy the voting app](deploy-app.md).