Compare commits

...

4 Commits

Author SHA1 Message Date
Jérôme Petazzoni
58e76b81f2 Fixing missing stack name 2017-06-12 17:41:55 +02:00
Jérôme Petazzoni
a1adc2292f Merge pull request #81 from soulshake/devopscon-compose-version
Fix docker-compose version
2017-06-11 23:01:33 +02:00
AJ Bowen
8d6421ddea Fix docker-compose version 2017-06-11 23:00:22 +02:00
Jérôme Petazzoni
63b6db4843 First round of updates for devopscon 2017-06-10 21:40:05 +02:00
2 changed files with 126 additions and 95 deletions

View File

@@ -107,9 +107,9 @@ Docker <br/> Orchestration <br/> Workshop
class: title, in-person
.small[
Deploying and scaling containerized Microservices with Docker and Swarm
Deploy and scale containers with Docker native, open source orchestration
<!--
.small[.small[
@@ -126,7 +126,8 @@ Thank you!
]
]
]
-->
---
@@ -134,11 +135,18 @@ class: in-person
## Intros
<!--
- Hello! We are
AJ ([@s0ulshake](https://twitter.com/s0ulshake))
&
Jérôme ([@jpetazzo](https://twitter.com/jpetazzo))
-->
- Hello! I am
Jérôme ([@jpetazzo](https://twitter.com/jpetazzo)) 🇫🇷 🇺🇸 .small[🇩🇪]
--
class: in-person
@@ -161,35 +169,29 @@ class: in-person
## Agenda
<!--
- Agenda:
-->
- 09:30-11:00 part 1
- 11:00-11:30 coffee break
- 11:30-13:00 part 2
- 13:00-14:00 lunch break
- 14:00-15:30 part 3
- 15:30-16:00 coffee break
- 16:00-17:30 part 4
- 17:30-17:42 Q&A
<!--
.small[
- 09:00-10:30 part 1
- 10:30-11:00 coffee break
- 11:00-12:30 part 2
- 12:00-13:00 lunch break
- 13:00-14:30 part 3
- 14:30-14:45 coffee break
- 14:45-16:00 part 4
- 16:00-16:01 Q&A
]
-->
- The tutorial will run from 9:00am to 12:20pm
- This will be fast-paced, but DON'T PANIC!
- All the content is publicly available (slides, code samples, scripts)
- There will be a coffee break at 10:30am
<br/>
(please remind me if I forget about it!)
-->
- All the content is publicly available (slides, code samples, scripts)
- Feel free to interrupt for questions at any time
- Live feedback, questions, help on [Gitter](chat)
@@ -290,8 +292,6 @@ class: in-person
- Creating our first Swarm
- Docker Machine
- Running our first Swarm service
- Deploying a local registry
@@ -316,7 +316,7 @@ class: in-person
- Rolling updates
- (Secrets management and encryption at rest)
- Secrets management
- [Centralized logging](#logging)
@@ -598,9 +598,9 @@ You are welcome to use the method that you feel the most comfortable with.
## Brand new versions!
- Engine 17.05
- Engine 17.06-rc
- Compose 1.12
- Machine 0.11
- Machine 0.12
.exercise[
@@ -615,7 +615,7 @@ You are welcome to use the method that you feel the most comfortable with.
---
## Wait, what, 17.05 ?!?
## Wait, what, 17.06 ?!?
--
@@ -636,7 +636,7 @@ You are welcome to use the method that you feel the most comfortable with.
---
class: extra-details
class: in-person, x-extra-details
## Docker CE vs Docker EE
@@ -652,6 +652,10 @@ class: extra-details
- available through Docker Mac, Docker Windows, and major Linux distros
- perfect for individuals and small organizations
- Want more details? Check my talk tomorrow, 15:00, in Maritim A
.small["Use the Source or join the Dark Side: The Differences between Docker Community and Enterprise Edition"]
---
class: extra-details
@@ -779,12 +783,15 @@ class: pic
- How DockerCoins works:
- `worker` asks to `rng` to give it random bytes
- `worker` feeds those random bytes into `hasher`
- each hash starting with `0` is a DockerCoin
- DockerCoins are stored in `redis`
- `redis` is also updated every second to track speed
- you can see the progress with the `webui`
- `worker` asks to `rng` to generate a few random bytes
- `worker` feeds these random bytes into `hasher`
- and repeat for ever!
- every second, `worker` updates `redis` to indicate how many loops were done
- `webui` queries `redis`, and computes and exposes "hashing speed" in your browser
---
@@ -2148,7 +2155,7 @@ class: self-paced
(New in Docker Engine 17.05)
If you are running Docker 17.05, you will see the following message:
If you are running Docker 17.05 or 17.06, you will see the following message:
```
Since --detach=false was not specified, tasks will be created in the background.
@@ -4104,118 +4111,138 @@ However, when you run the second one, only `#` will show up.
---
# Rolling updates
# Updating services
- We want to release a new version of the worker
- We want to make changes to the web UI
- We will edit the code ...
- The process is as follows:
- ... build the new image ...
- edit code
- ... push it to the registry ...
- build new image
- ... update our service to use the new image
- ship new image
- run new image
---
class: extra-details
## Updating a single service
## But first...
- To update a single service, we can do the following:
- Restart the workers
.exercise[
- Just scale back to 10 replicas:
```bash
docker service update dockercoins_worker --replicas 10
REGISTRY=localhost:5000 TAG=v0.2
IMAGE=$REGISTRY/dockercoins_webui:$TAG
docker build -t $IMAGE webui/
docker push $IMAGE
docker service update dockercoins_webui --image $IMAGE
```
- Check that they're running:
```bash
docker service ps dockercoins_worker
```
- We need to update the `TAG` variable at each iteration
]
- Updating the `TAG` variable is necessary to force the nodes to pull the new version
(Otherwise, a node which already has image tag `v0.2` will not download the new version,
because it's not aware that this version has changed on the registry)
---
## Making changes
## Updating all the services that have changed
.exercise[
- With the Compose integration, all we have to do is:
- Edit `~/orchestration-workshop/dockercoins/worker/worker.py`
```bash
export TAG=v0.2
docker-compose -f composefile.yml build
docker-compose -f composefile.yml push
docker stack deploy -c composefile.yml nameofstack
```
- Locate the line that has a `sleep` instruction
--
- Increase the `sleep` from `0.1` to `1.0`
- That's exactly the commands that we used earlier to deploy the app
- Save your changes and exit
]
- We don't need to learn new commands!
---
## Building and pushing the new image
## Updating the web UI
- Let's make the numbers on the Y axis bigger!
.exercise[
- Go to the `stacks` directory:
```bash
cd ~/orchestration-workshop/stacks
```
- Edit the file `webui/files/index.html`
- Build and ship the new image:
- Locate the `font-size` CSS attribute and increase it (at least double it)
- Save and exit
- Build, ship, and run:
```bash
export TAG=v0.2
docker-compose -f dockercoins.yml build
docker-compose -f dockercoins.yml push
docker stack deploy -c dockercoins.yml dockercoins
```
]
Note how the build and push were fast (because caching).
---
## Watching the deployment process
## Viewing our changes
- We will need to open a new terminal for this
- Wait at least 10 seconds (for the new version to be deployed)
.exercise[
- Then reload the web UI
- Look at our service status:
```bash
watch -n1 "docker service ps dockercoins_worker | grep -v Shutdown.*Shutdown"
```
]
- `docker service ps worker` gives us all tasks
<br/>(including the one whose current or desired state is `Shutdown`)
- Then we filter out the tasks whose current **and** desired state is `Shutdown`
- There is also a `--filter` option, but it doesn't allow (yet) to specify that filter
- The legend on the left should now be bigger!
---
## Updating to our new image
## Rolling updates
- Keep the `watch ...` command running!
- Let's change a scaled service: `worker`
.exercise[
- Update our application stack:
- Edit `worker/worker.py`
- Locate the `sleep` instruction and change the delay
- Build, ship, and run our changes:
```bash
docker stack deploy dockercoins -c dockercoins.yml
export TAG=v0.3
docker-compose -f dockercoins.yml build
docker-compose -f dockercoins.yml push
docker stack deploy -c dockercoins.yml dockercoins
```
]
If you had stopped the workers earlier, this will automatically restart them.
---
## Viewing our update as it rolls out
.exercise[
- Check the status of the `dockercoins_worker` service:
```bash
watch docker service ps dockercoins_worker
```
- Don't display the tasks that are shutdown:
```bash
watch "docker service ps dockercoins_worker | grep -v Shutdown.*Shutdown"
```
]
By default, SwarmKit does a rolling upgrade, one instance at a time.
We should therefore see the workers being updated one by one.
---
## Changing the upgrade policy
@@ -4254,6 +4281,8 @@ The current upgrade will continue at a faster pace.
---
class: extra-details
## Rolling back
- At any time (e.g. before the upgrade is complete), we can rollback:
@@ -4275,6 +4304,8 @@ What happens with the web UI graph?
---
class: extra-details
## The fine print with rollback
- Rollback reverts to the previous service definition
@@ -6553,7 +6584,7 @@ class: prom-auto
```bash
docker-compose -f prometheus.yml build
docker-compose -f prometheus.yml push
docker stack deploy -c prometheus.yml
docker stack deploy -c prometheus.yml prometheus
```
]
@@ -7518,8 +7549,8 @@ AJ ([@s0ulshake](https://twitter.com/s0ulshake)) — *For hire!*
var slideshow = remark.create({
ratio: '16:9',
highlightSpans: true,
excludedClasses: ["in-person", "elk-auto", "prom-auto"]
//excludedClasses: ["self-paced", "extra-details", "advertise-addr", "docker-machine", "netshoot", "sbt", "ipsec", "node-info", "swarmtools", "secrets", "encryption-at-rest", "elk-manual", "snap", "prom-manual"]
//excludedClasses: ["in-person", "elk-auto", "prom-auto"]
excludedClasses: ["self-paced", "extra-details", "advertise-addr", "docker-machine", "netshoot", "sbt", "encryption-at-rest", "elk-manual", "snap", "prom-manual"]
});
</script>
</body>

View File

@@ -28,6 +28,6 @@ footer: >
url: http://container.training/
engine_version: test
compose_version: 1.12
compose_version: 1.12.0
machine_version: 0.12.0
swarm_version: latest