github.com/simonferquel/app@v0.6.1-0.20181012141724-68b7cccf26ac/examples/voting-app/README.md (about) 1 ## The Docker voting app 2 3 ### Initialize project 4 5 In this example, we will create an app from the existing Docker sample `example-voting-app`. First download the `docker-stack.yml` [here](https://github.com/dockersamples/example-voting-app) ([direct link](https://raw.githubusercontent.com/dockersamples/example-voting-app/master/docker-stack.yml) 6 7 Initialize the project using `docker-app init voting-app --compose-file docker-stack.yml`. 8 9 ### Edit metadata 10 11 Go to `voting-app.dockerapp/` and open `metadata.yml` and fill the following fields: 12 - description 13 - maintainers 14 - namespace 15 16 ### Add variables to the compose file 17 18 Open `docker-compose.yml` and start by changing the version to `3.2` (generated docker-compose are version 3.2+ compatible). Change constants you want by variables, e.g.: 19 20 Change the images used, from: 21 - `dockersamples/examplevotingapp_vote:before` to `${vote.image.name}:${vote.image.tag}` 22 - `dockersamples/examplevotingapp_result:before` to `${result.image.name}:${result.image.tag}` 23 - `dockersamples/examplevotingapp_worker:before` to `${worker.image.name}:${worker.image.tag}` 24 - `dockersamples/examplevotingapp_visualizer:before` to `${visualizer.image.name}:${visualizer.image.tag}` 25 26 Change exposed ports, from: 27 - `<value:5000>` to `${vote.port}` 28 - `<value:5001>` to `${result.port}` 29 - `<value:8080>` to `${visualizer.port}` 30 31 Change default replicas, from: 32 - `<value:2>` to `${vote.replicas}` 33 - `<value:1>` to `${result.replicas}` 34 - `<value:1>` to `${worker.replicas}` 35 36 --- 37 38 [voting-app.dockerapp/docker-compose.yml](voting-app.dockerapp/docker-compose.yml): 39 ```yml 40 [...] 41 vote: 42 image: ${vote.image.name}:${vote.image.tag} 43 ports: 44 - ${vote.port}:80 45 networks: 46 - frontend 47 depends_on: 48 - redis 49 deploy: 50 replicas: ${vote.replicas} 51 update_config: 52 parallelism: 2 53 restart_policy: 54 condition: on-failure 55 56 result: 57 image: ${result.image.name}:${result.image.tag} 58 ports: 59 - ${result.port}:80 60 networks: 61 - backend 62 depends_on: 63 - db 64 deploy: 65 replicas: ${result.replicas} 66 update_config: 67 parallelism: 2 68 delay: 10s 69 restart_policy: 70 condition: on-failure 71 72 worker: 73 image: ${worker.image.name}:${worker.image.tag} 74 networks: 75 - frontend 76 - backend 77 deploy: 78 mode: replicated 79 replicas: ${worker.replicas} 80 labels: [APP=VOTING] 81 restart_policy: 82 condition: on-failure 83 delay: 10s 84 max_attempts: 3 85 window: 120s 86 placement: 87 constraints: [node.role == manager] 88 89 visualizer: 90 image: ${visualizer.image.name}:${visualizer.image.tag} 91 ports: 92 - ${visualizer.port}:8080 93 stop_grace_period: 1m30s 94 volumes: 95 - "/var/run/docker.sock:/var/run/docker.sock" 96 deploy: 97 placement: 98 constraints: [node.role == manager] 99 [...] 100 ``` 101 102 ### Give variables their default value 103 104 Open `settings.yml` and add every variables with the default value you want, e.g.: 105 106 --- 107 108 [voting-app.dockerapp/settings.yml](voting-app.dockerapp/settings.yml): 109 ```yml 110 # Vote. 111 vote: 112 image: 113 name: dockersamples/examplevotingapp_vote 114 tag: latest 115 port: 8080 116 replicas: 1 117 118 # Result. 119 result: 120 image: 121 name: dockersamples/examplevotingapp_result 122 tag: latest 123 port: 8181 124 replicas: 1 125 126 # Visualizer. 127 visualizer: 128 image: 129 name: dockersamples/visualizer 130 tag: latest 131 port: 8282 132 133 # Worker. 134 worker: 135 image: 136 name: dockersamples/examplevotingapp_worker 137 tag: latest 138 replicas: 1 139 ``` 140 141 Test your application by running `docker-app render`. 142 143 ### Add settings for production and development environments 144 145 Create `settings/development.yml` and `settings/production.yml` and add your target-specific variables. 146 147 --- 148 149 [voting-app.dockerapp/settings/development.yml](voting-app.dockerapp/settings/development.yml): 150 ```yml 151 # Vote. 152 vote: 153 image: 154 name: vote 155 156 # Result. 157 result: 158 image: 159 name: result 160 ``` 161 --- 162 163 [voting-app.dockerapp/settings/production.yml](voting-app.dockerapp/settings/production.yml): 164 ```yml 165 # Vote. 166 vote: 167 port: 80 168 replicas: 3 169 170 # Result. 171 result: 172 port: 80 173 replicas: 5 174 ``` 175 176 ### Wrap everything in a Makefile 177 178 Add a Makefile to simplify rendering, deploying and killing your app, see [Makefile](Makefile).