From 4dad83c742aeb99bd95fe49e2a7c681b68bb194b Mon Sep 17 00:00:00 2001 From: Victoria Bialas Date: Tue, 10 Jan 2017 19:49:07 -0800 Subject: [PATCH] tutorial on multi-container apps w/voting app Signed-off-by: Victoria Bialas --- .../images/architecture.png | Bin 0 -> 54824 bytes engine/getstarted-voting-app/index.md | 63 ++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 engine/getstarted-voting-app/images/architecture.png create mode 100644 engine/getstarted-voting-app/index.md diff --git a/engine/getstarted-voting-app/images/architecture.png b/engine/getstarted-voting-app/images/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..6bbd6ca119f86e71453004cb2d9c15c4b49e359d GIT binary patch literal 54824 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

c)BZ?YCnD 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 literal 0 HcmV?d00001 diff --git a/engine/getstarted-voting-app/index.md b/engine/getstarted-voting-app/index.md new file mode 100644 index 0000000000..805e74ccab --- /dev/null +++ b/engine/getstarted-voting-app/index.md @@ -0,0 +1,63 @@ +--- +description: Getting started with multi-container Docker apps +keywords: docker, container, multi-container, services, swarm mode, cluster, stack deploy, compose, voting app +title: Get started with multi-container apps and services in swarm mode +--- + +This tutorial is built around a web-based voting application that collects, tallies, and returns the results of votes (for cats and dogs, or other choices you specify). The voting app includes several services. We'll deploy the app as a _stack_ to introduce some new concepts surfaced in [Compose v.3](/compose/compose-file.md), and also use [swarm mode](/engine/swarm/index.md), which is built into Docker Engine. + +## Got Docker? + +If you haven't yet downloaded Docker or installed it, go to [Get Docker](https://www.docker.com/) and grab Docker for your platform. Once you have Docker installed, you can run `docker hello-world` or other commands described in the newcomer tutorial to [verify your installation](/engine/getstarted/step_one.md#step-3-verify-your-installation). If you are totally new to Docker, you might try the quick [newcomer tutorial](/engine/getstarted/index.md) first, then come back. + +## What you'll learn and do + +You'll learn how to: + +* Use `docker machine` to create multiple virtual local hosts or dockerized cloud servers +* Use `docker` commands to set up and run a swarm with manager and worker nodes +* Deploy the `vote` app by feeding our example `docker-stack.yml` file to `docker stack deploy` +* Test the app by voting for cats and dogs, and viewing the results +* Use the `visualizer` to explore and understand the runtime app and services +* Update the `docker-stack.yml` and re-deploy the app using a different `vote` image to implement a vote on different choices + + +## Anatomy of the voting app + +The voting app you are about to deploy is composed of several services: + + +| Service | Description | Base Image | +| ------------- |--------------| -----| +| `vote` | Presents the voting interface via port `5000`. Viewable at `:5000` | Based on a Python image, `dockersamples/examplevotingapp_vote` | +| `result` | Displays the voting results via port 5001. Viewable at `:5001` | Based on a Node.js image, `dockersamples/examplevotingapp_result` | +| `visualizer` | A web app that shows a map of the deployment of the various services across the available nodes via port `8080`. Viewable at `:8080` | Based on a .NET image, `dockersamples/examplevotingapp_worker` | +| `redis` | Collects raw voting data and stores it in a key/value queue | Based on a `redis` image, `redis:alpine` | +| `db` | A PostgreSQL service which provides permanent storage on a host volume | Based on a `postgres` image, `postgres:9.4` | +| `worker` | A background service that transfers votes from the queue to permanent storage | Based on a .NET image, `dockersamples/examplevotingapp_worker` | + +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. + +For this tutorial, you need only have Docker running and the copy of `docker-stack.yml` we provide here. + +## Next topic + +TBD + +## Next topic + +TBD + +## Where to go next + +The voting app is also available as a [lab on +GitHub](https://github.com/docker/labs/blob/master/beginner/chapters/votingapp.md) +along with the complete [source +code]((https://github.com/docker/example-voting-app). + +The lab is a deeper dive, and includes a few more tasks, like cloning a GitHub +repository, manually changing source code, and rebuilding an image instead of +using the ready-baked images referenced here. + + +