added more steps to app walkthrough

Signed-off-by: Victoria Bialas <victoria.bialas@docker.com>
This commit is contained in:
Victoria Bialas 2017-01-13 18:21:31 -08:00 committed by Misty Stanley-Jones
parent 4dad83c742
commit 58220bcf61
5 changed files with 274 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

View File

@ -38,8 +38,282 @@ The voting app you are about to deploy is composed of several services:
Each service will run in its own container. Using swarm mode, we can also scale the application to deploy replicas of containerized services distributed across multiple nodes.
## docker-stack.yml
For this tutorial, you need only have Docker running and the copy of `docker-stack.yml` we provide here.
This file defines all the services, their base images, and provides . You will use this file to deploy the app.
```
version: "3"
services:
redis:
image: redis:alpine
ports:
- "6379"
networks:
- frontend
deploy:
replicas: 2
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
db:
image: postgres:9.4
volumes:
- db-data:/var/lib/postgresql/data
networks:
- backend
deploy:
placement:
constraints: [node.role == manager]
vote:
image: dockersamples/examplevotingapp_vote:before
ports:
- 5000:80
networks:
- frontend
depends_on:
- redis
deploy:
replicas: 2
update_config:
parallelism: 2
restart_policy:
condition: on-failure
result:
image: dockersamples/examplevotingapp_result:before
ports:
- 5001:80
networks:
- backend
depends_on:
- db
deploy:
replicas: 2
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
worker:
image: dockersamples/examplevotingapp_worker
networks:
- frontend
- backend
deploy:
mode: replicated
replicas: 1
labels: [APP=VOTING]
restart_policy:
condition: on-failure
delay: 10s
max_attempts: 3
window: 120s
visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
networks:
frontend:
backend:
volumes:
db-data:
```
## Set up Dockerized hosts
1. Create `manager1` and `worker1` machines:
```
$ docker-machine create --driver virtualbox manager1
Running pre-create checks...
Creating machine...
(manager1) Copying /Users/victoriabialas/.docker/machine/cache/boot2docker.iso to /Users/victoriabialas/.docker/machine/machines/manager1/boot2docker.iso...
(manager1) Creating VirtualBox VM...
(manager1) Creating SSH key...
(manager1) Starting the VM...
(manager1) Check network to re-create if needed...
(manager1) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env manager1
```
2. Get the IP addresses of the machines.
```
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
manager1 * virtualbox Running tcp://192.168.99.100:2376 v1.13.0-rc6
worker1 - virtualbox Running tcp://192.168.99.101:2376 v1.13.0-rc6
```
## Create a swarm
1. Log on to the manager.
```
$ docker-machine ssh manager
## .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/
_ _ ____ _ _
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
WARNING: this is a build from test.docker.com, not a stable release.
Boot2Docker version 1.13.0-rc6, build HEAD : 5ab2289 - Wed Jan 11 23:37:52 UTC 2017
Docker version 1.13.0-rc6, build 2f2d055
```
2. Initialize a swarm.
```
docker@manager:~$ docker swarm init --advertise-addr 192.168.99.100
Swarm initialized: current node (ro5ak9ybe5qa62h7r81q29z0k) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-4bk4romozl9ap5xpt0it6gzdwabtezs399go3fyaw1hy8t1kam-0xnovvmchc4wfe7xmh85faiwe \
192.168.99.100:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
```
### Add a worker node to the swarm
1. Log into the worker machine.
```
$ docker-machine ssh worker
## .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/
_ _ ____ _ _
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
WARNING: this is a build from test.docker.com, not a stable release.
Boot2Docker version 1.13.0-rc6, build HEAD : 5ab2289 - Wed Jan 11 23:37:52 UTC 2017
Docker version 1.13.0-rc6, build 2f2d055
```
2. On the worker, run the join command given as the output of the `swarm init` command you ran on the manager.
```
docker@worker:~$ docker swarm join \
> --token SWMTKN-1-4bk4romozl9ap5xpt0it6gzdwabtezs399go3fyaw1hy8t1kam-0xnovvmchc4wfe7xmh85faiwe \
> 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 and run `docker node ls`.
```
docker@manager:~$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
dlosx9b74cgu4lh2qy54ebfp8 worker Ready Active
ro5ak9ybe5qa62h7r81q29z0k * manager Ready Active Leader
```
## Deploy the app
In these steps, you'll use the `docker-stack.yml` file to deploy the application to the swarm you just created. To deploy an app deployed to a swarm You'll run the deploy command from the manager.
The `docker-stack.yml` file must be located on a manager for the swarm where you want to deploy the application stack.
1. Get `docker-stack.yml` either from the lab or by copying it from the example given here.
2. Copy `docker-stack.yml` from your host machine onto the manager.
```
$ docker-machine scp ~/sandbox/voting-app/docker-stack.yml manager:/home/docker/.
docker-stack.yml 100% 1558 1.5KB/s 00:00
```
3. Log onto the manager.
```
$ docker-machine ssh manager1
```
4. Check to make sure the `.yml` file is there.
```
docker@manager:~$ ls
docker-stack.yml log.log
```
You can use `vi` or other text editor to inspect it.
5. Deploy the application stack based on the `.yml`.
```
docker@manager:~$ docker stack deploy --compose-file docker-stack.yml vote
Creating network vote_default
Creating network vote_backend
Creating network vote_frontend
Creating service vote_result
Creating service vote_worker
Creating service vote_visualizer
Creating service vote_redis
Creating service vote_db
Creating service vote_vote
```
6. Verify that the stack deployed as expected with `docker stack services <appName>`.
```
docker@manager:~$ docker stack services vote
ID NAME MODE REPLICAS IMAGE
0y3q6lgc0drn vote_result replicated 2/2 dockersamples/examplevotingapp_result:before
fvsaqvuec4yw vote_redis replicated 2/2 redis:alpine
igev2xk5s3zo vote_worker replicated 1/1 dockersamples/examplevotingapp_worker:latest
vpfjr9b0qc01 vote_visualizer replicated 1/1 dockersamples/visualizer:stable
wctxjnwl22k4 vote_vote replicated 2/2 dockersamples/examplevotingapp_vote:before
zp0zyvgaguox vote_db replicated 1/1 postgres:9.4
```
## Next topic
TBD