Slide 1

Slide 1 text

Compose: More than just development environments

Slide 2

Slide 2 text

Previously known as Fig

Slide 3

Slide 3 text

Multi-container apps are a hassle. • Build images from Dockerfiles • Pull images from the Hub or a private registry • Configure and create containers • Start and stop containers • Stream their logs

Slide 4

Slide 4 text

Multi-container apps are a hassle. $ docker pull redis:latest $ docker build -t web . $ docker run -d --name=db redis:latest redis-server --appendonly yes $ docker run -d --name=web --link db:db -p 5000:5000 -v `pwd`:/code web python app.py

Slide 5

Slide 5 text

Docker Compose:
 Get an app running in one command. $ docker-compose up Text file

Slide 6

Slide 6 text

app.py from flask import Flask from redis import Redis app = Flask(__name__) redis = Redis(host="redis", port=6379) @@app.route('/') def hello(): redis.incr('hits') return 'Hello World! I have been seen %s times.\n' % redis.get('hits') if __name__ == "__main__": app.run(host="0.0.0.0", debug=True)

Slide 7

Slide 7 text

requirements.txt flask redis

Slide 8

Slide 8 text

Dockerfile FROM python:2.7 ADD . /code WORKDIR /code RUN pip install -r requirements.txt CMD python app.py

Slide 9

Slide 9 text

docker-compose.yml web: build: . ports: - "5000:5000" volumes: - .:/code links: - redis redis: image: redis

Slide 10

Slide 10 text

Demo

Slide 11

Slide 11 text

Compose in CI

Slide 12

Slide 12 text

$ docker-compose run web ./tests.sh

Slide 13

Slide 13 text

Compose in CI • Just run your development environment in your CI script • Includes all of your dependencies • Completely self-contained

Slide 14

Slide 14 text

Compose in production

Slide 15

Slide 15 text

$ git pull $ docker-compose up -d

Slide 16

Slide 16 text

/etc/init/myapp.conf chdir /opt/myapp exec docker-compose up

Slide 17

Slide 17 text

Swarm • Docker-native clustering • Treat multiple Docker hosts as a single Docker host – same API, same tools • Pluggable backends for scheduling and discovery

Slide 18

Slide 18 text

docker client | swarm / \ node1 node2 | | docker engine docker engine Swarm

Slide 19

Slide 19 text

Compose is just a Docker client

Slide 20

Slide 20 text

compose | swarm / \ node1 node2 | | docker engine docker engine Compose + Swarm

Slide 21

Slide 21 text

• Currently minimal • Automatic co-scheduling of dependent containers • Steady improvement • Difficult parts: networking, volumes, builds Compose + Swarm

Slide 22

Slide 22 text

Swarm + Powerstrip + Weave + Flocker

Slide 23

Slide 23 text

Swarm + Powerstrip + Weave + Flocker + Compose!

Slide 24

Slide 24 text

• Swarm creates a single virtual Docker host out of several hosts • Weave networks them together • Flocker stores the data • Powerstrip ties all this together • Compose defines and runs your app Swarm + Powerstrip + Weave + Flocker + Compose!

Slide 25

Slide 25 text

docker client | swarm / \ node1 node2 disk SSD | | powerstrip powerstrip flocker flocker weave weave | | docker engine docker engine

Slide 26

Slide 26 text

compose | swarm / \ node1 node2 disk SSD | | powerstrip powerstrip flocker flocker weave weave | | docker engine docker engine

Slide 27

Slide 27 text

Demo

Slide 28

Slide 28 text

Thanks! https://clusterhq.com/blog/migration-database- container-docker-swarm/ https://github.com/bfirsh/powerstrip-swarm-demo @bfirsh [email protected]