SlideShare a Scribd company logo
Docker and Maestro
For fun, development and profit
Maxime Petazzoni
Software Engineer at SignalFuse, Inc.
(also, Jérôme’s cousin)
!

max@signalfuse.com
Real-time monitoring, instrumentation,
observability and analytics
Still in “stealth” mode
Get updates at www.signalfuse.com
“Docker is awesome!”
–You, some time in the last hour (hopefully).
A versatile foundation
Service or application containment, security, software delivery, host
and environment isolation, …and so much more.
Power at your fingertips
Complete control through the remote API
Available programmatic clients like docker-py
docker:$ docker -d -H tcp://0.0.0.0:4243
!

client:$ cat << EOF | python import docker
from pprint import pprint as pp
pp(docker.client.Client(‘tcp://docker:4243')
.images('quay.io/signalfuse/maestro-base'))
EOF
!
!

[{u’Created': 1391202535,
u’Id': u’37de13d273eb9a02cd64…’,
u’Repository':
u'quay.io/signalfuse/maestro-base',
u'Size': 155663843,
u'Tag': u'0.1.6',
u'VirtualSize': 774767942}]
Docker’s Achilles:
orchestration
Single-host is alright with links, but multi-host just isn’t there.
How do I orchestrate the deployment
and control of a full, multi-host,
Docker-based environment?
(And more importantly:)

How do I make this process one and
the same for development, testing
and production environments?
Enter: Maestro
The totally not scalable, pet project that solved my use case.
(and maybe yours)
Maestro is actually MaestroNG,
a re-invention of Kimbro Staken’s Maestro
(formerly, dockermix)
Takes in a definition of services, their dependencies ,
configuration and target host…
!

…and automates the deployment (and control) of their
corresponding containers on these hosts.
Classic use case: a pool of “dumb” workers on your
favorite cloud/hosting provider that just run Docker.
!

No need to (ma)ssh into anything,
no need to pre-configure anything.
!

Everything is remote controlled.
Other typical use case: running all the components of
your stack in a single, local virtual machine.
!

Useful for development, integration testing, etc.
Philosophy: lightweight application/service containers.
!

Represent and control your software stack
and its dependencies.
!

Docker images are the output of your CI process
(automation!).
!

Start fast, fail faster.
Not for heavyweight, complex container “VMs”.
Each service instance (container) defines where it runs
and which ports it exposes, among other things.
!

Like Docker links, Maestro works by injecting this
information in the container’s environment about each
container’s service’s dependencies.
Let’s say broker-1 of kafka depends on ZooKeeper. Its
environment will contain:
MAESTRO_ENVIRONMENT_NAME = lspe
SERVICE_NAME = kafka
CONTAINER_NAME = broker-1
CONTAINER_HOST_ADDRESS = 192.168.10.2
!
ZOOKEEPER_ZK_NODE_1_HOST = 192.168.10.2
ZOOKEEPER_ZK_NODE_1_CLIENT_PORT = 2181
ZOOKEEPER_ZK_NODE_1_PEER_PORT = 2888
ZOOKEEPER_ZK_NODE_1_LEADER_ELECTION_PORT = 3888
!
KAFKA_BROKER_1_HOST = 192.168.10.2
KAFKA_BROKER_1_BROKER_INTERNAL_PORT = 9042
KAFKA_BROKER_1_BROKER_PORT = 9042
KAFKA_BROKER_1_JMX_INTERNAL_PORT = 7199
KAFKA_BROKER_1_JMX_PORT = 17199
<SERVICE_NAME>_<CONTAINER_NAME>_HOST
<SERVICE_NAME>_<CONTAINER_NAME>_PORT
<SERVICE_NAME>_<CONTAINER_NAME>_INTERNAL_PORT
Using this information, you can configure your
application at container start time.
!

If you like Python, Maestro helps you by providing a set
of guest helper functions in maestro.guestutils to easily
extract and use this data.
#!/usr/bin/env python
!

# This is my cool container’s “init script”
!

import os
from maestro.guestutils import *
!

os.execl(‘java’, ‘java’,
‘-jar’, ‘my-app.jar’,
‘-DlistenPort={}’.format(get_port(‘service’)),
‘-DzkServers={}’.format(
get_node_list(‘zookeeper’, ports=[‘peer’])))
Dependency order is respected on start;
inverse order on stop.
!

Can be overridden to stop individual services or
containers.
MyApp

Start order:
1. ZooKeeper
2. Kafka
3. MyApp

Kafka

ZK

Stop order:
1. MyApp
2. Kafka
3. ZooKeeper

Works on subsets of services too.
So how do you wield
this power?
A bit clunkily, with YAML (and a bit of Jinja2).
!
!
!

(sorry)
# Yay, YAML!
name: lspe
!

registries:
# Define custom image registries for
# private registries, with credentials.
!

ships:
# Declare each target host.
# (Docker daemon locations)
!

services:
# Declare each service, their
# instances, dependencies and
# configuration
registries:
# Quay.io with Maestro robot account
quay.io:
registry: https://quay.io/v1/
email: maestro@signalfuse.com
username: signalfuse+maestro
password: {{ env.SUPER_SECRET }}

When starting a container, Maestro will automatically
login and pull the image from the right place if the image
name matches a configured registry.
ships:
# Local virtual machine
vm:
ip: 192.168.10.2
docker_port: 4243
timeout: 10
# Slow VM is slow
# A shorter form…
vm2: {ip: 192.168.10.3, timeout: 5}

Ships carry containers and are referred to by name in the
configuration.
services:
# ZooKeeper
zookeeper:
image: quay.io/signalfuse/zookeeper:3.4.5
!

# Our zoo isn’t too wild,
# only one keeper is enough.
zk-node-1:
ship: vm
ports:
client: 2181
peer: 2888/tcp
leader_election: “3888/tcp:3888/tcp”
# Keep persistent data on the host.
volumes:
/var/lib/zookeeper: /data/zookeeper
# Environment can be passed-in too.
env:
JVM_FLAGS: “-Xmx1g”
# Kafka
kafka:
image: quay.io/signalfuse/kafka:0.8.0
requires: [ zookeeper ]
env:
ZOOKEEPER_BASE: /lspe/kafka
RETENTION_HOURS: 48
broker-1:
ship: vm
ports: {broker: 9092, jmx: “7199:17199”}
# Keep persistent data on the host.
volumes:
/var/lib/kafka: /data/kafka
env:
BROKER_ID: 0

More flexibility in port mappings, volume bindings, and
environment variables definition not shown here.
See README.md for full
syntax details and features
https://github.com/signalfuse/maestro-ng/blob/master/README.md
Demo time!
Be prepared for it to fail, because demos always do.
What’s next?
More flexible service status detection (not only port pinging)
Soft and hard service dependencies
Parallel startup of independent services and instances of a service
That’s it!
Thanks for listening! :)

github.com/dotcloud/docker-py
github.com/signalfuse/maestro-ng
SignalFuse is hiring
world class engineers!
jobs@signalfuse.com

More Related Content

PDF
Setup 3 Node Kafka Cluster on AWS - Hands On
PDF
Automation and Collaboration Across Multiple Swarms Using Docker Cloud - Marc...
PPTX
Container Monitoring with Sysdig
PPTX
DCUS17 : Docker networking deep dive
PDF
Introduction to ZooKeeper - TriHUG May 22, 2012
PDF
What's New in Docker 1.12?
PDF
Jacopo Nardiello - Monitoring Cloud-Native applications with Prometheus - Cod...
PPTX
Kubernetes Networking 101
Setup 3 Node Kafka Cluster on AWS - Hands On
Automation and Collaboration Across Multiple Swarms Using Docker Cloud - Marc...
Container Monitoring with Sysdig
DCUS17 : Docker networking deep dive
Introduction to ZooKeeper - TriHUG May 22, 2012
What's New in Docker 1.12?
Jacopo Nardiello - Monitoring Cloud-Native applications with Prometheus - Cod...
Kubernetes Networking 101

What's hot (20)

PDF
Fluentd and docker monitoring
PDF
Docker Online Meetup #28: Production-Ready Docker Swarm
PDF
runC: The little engine that could (run Docker containers) by Docker Captain ...
PDF
Docker storage designing a platform for persistent data
PDF
Kubernetes: Beyond Baby Steps
PDF
Docker swarm introduction
PDF
Docker Swarm 0.2.0
PDF
Running & Monitoring Docker at Scale
PPTX
Docker and kubernetes
PDF
The age of orchestration: from Docker basics to cluster management
PDF
Swarm docker bangalore_meetup
PDF
Beginning mesos
PDF
Kubernetes Networking
PPTX
Ansible presentation
PDF
PPTX
Docker Swarm Introduction
PDF
Deep dive in container service discovery
PDF
Scaling Microservices with Kubernetes
PDF
Container Performance Analysis
PDF
Docker Swarm 45-min Workshop (Mountain View Docker Meetup 2/24/2016)
Fluentd and docker monitoring
Docker Online Meetup #28: Production-Ready Docker Swarm
runC: The little engine that could (run Docker containers) by Docker Captain ...
Docker storage designing a platform for persistent data
Kubernetes: Beyond Baby Steps
Docker swarm introduction
Docker Swarm 0.2.0
Running & Monitoring Docker at Scale
Docker and kubernetes
The age of orchestration: from Docker basics to cluster management
Swarm docker bangalore_meetup
Beginning mesos
Kubernetes Networking
Ansible presentation
Docker Swarm Introduction
Deep dive in container service discovery
Scaling Microservices with Kubernetes
Container Performance Analysis
Docker Swarm 45-min Workshop (Mountain View Docker Meetup 2/24/2016)
Ad

Viewers also liked (12)

PDF
Docker {at,with} SignalFx
PDF
Orchestration for the rest of us
PPTX
Docker networking basics & coupling with Software Defined Networks
PDF
Docker at Spotify
PPTX
Docker Overview - AWS Tech Connect - Seattle 10/28
PPTX
Docker Budapest meetup 2016.02.09.
PDF
Tiad - Docker: Automation for the rest of us
PPTX
Egy .NET fejlesztő élete a Node.js világában
PDF
Containers, docker, and security: state of the union (Bay Area Infracoders Me...
PDF
Docker: automation for the rest of us
PDF
Docker, Linux Containers (LXC), and security
PDF
Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic - LinuxCon
Docker {at,with} SignalFx
Orchestration for the rest of us
Docker networking basics & coupling with Software Defined Networks
Docker at Spotify
Docker Overview - AWS Tech Connect - Seattle 10/28
Docker Budapest meetup 2016.02.09.
Tiad - Docker: Automation for the rest of us
Egy .NET fejlesztő élete a Node.js világában
Containers, docker, and security: state of the union (Bay Area Infracoders Me...
Docker: automation for the rest of us
Docker, Linux Containers (LXC), and security
Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic - LinuxCon
Ad

Similar to Docker and Maestro for fun, development and profit (20)

PPTX
When Docker Engine 1.12 features unleashes software architecture
PDF
Docker img-no-disclosure
PDF
Docker Internet Money Gateway
PDF
Higher order infrastructure: from Docker basics to cluster management - Nicol...
PDF
Agile Brown Bag - Vagrant & Docker: Introduction
PPTX
Docker container a-brief_introduction_2016-01-30
PDF
PPTX
Docker - Der Wal in der Kiste
PDF
Digital Forensics and Incident Response in The Cloud Part 3
PDF
Kubernetes Java Operator
PDF
JDO 2019: Tips and Tricks from Docker Captain - Łukasz Lach
PDF
Get you Java application ready for Kubernetes !
PPTX
Using the Azure Container Service in your company
PDF
Come costruire una Platform As A Service con Docker, Kubernetes Go e Java
PDF
Dessi docker kubernetes paas cloud
PDF
Practical Design Patterns in Docker Networking
PDF
Containers, Docker, and Microservices: the Terrific Trio
PDF
Codetainer: a Docker-based browser code 'sandbox'
PPTX
Docker Security
When Docker Engine 1.12 features unleashes software architecture
Docker img-no-disclosure
Docker Internet Money Gateway
Higher order infrastructure: from Docker basics to cluster management - Nicol...
Agile Brown Bag - Vagrant & Docker: Introduction
Docker container a-brief_introduction_2016-01-30
Docker - Der Wal in der Kiste
Digital Forensics and Incident Response in The Cloud Part 3
Kubernetes Java Operator
JDO 2019: Tips and Tricks from Docker Captain - Łukasz Lach
Get you Java application ready for Kubernetes !
Using the Azure Container Service in your company
Come costruire una Platform As A Service con Docker, Kubernetes Go e Java
Dessi docker kubernetes paas cloud
Practical Design Patterns in Docker Networking
Containers, Docker, and Microservices: the Terrific Trio
Codetainer: a Docker-based browser code 'sandbox'
Docker Security

Recently uploaded (20)

PPTX
SOPHOS-XG Firewall Administrator PPT.pptx
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PPTX
Big Data Technologies - Introduction.pptx
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Encapsulation_ Review paper, used for researhc scholars
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Accuracy of neural networks in brain wave diagnosis of schizophrenia
PDF
Getting Started with Data Integration: FME Form 101
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Electronic commerce courselecture one. Pdf
PDF
Machine learning based COVID-19 study performance prediction
PPTX
Tartificialntelligence_presentation.pptx
PPTX
Programs and apps: productivity, graphics, security and other tools
PPTX
Machine Learning_overview_presentation.pptx
PPTX
A Presentation on Artificial Intelligence
PDF
Empathic Computing: Creating Shared Understanding
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
cuic standard and advanced reporting.pdf
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
SOPHOS-XG Firewall Administrator PPT.pptx
NewMind AI Weekly Chronicles - August'25-Week II
Big Data Technologies - Introduction.pptx
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Encapsulation_ Review paper, used for researhc scholars
“AI and Expert System Decision Support & Business Intelligence Systems”
Diabetes mellitus diagnosis method based random forest with bat algorithm
Accuracy of neural networks in brain wave diagnosis of schizophrenia
Getting Started with Data Integration: FME Form 101
The Rise and Fall of 3GPP – Time for a Sabbatical?
Electronic commerce courselecture one. Pdf
Machine learning based COVID-19 study performance prediction
Tartificialntelligence_presentation.pptx
Programs and apps: productivity, graphics, security and other tools
Machine Learning_overview_presentation.pptx
A Presentation on Artificial Intelligence
Empathic Computing: Creating Shared Understanding
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
cuic standard and advanced reporting.pdf
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...

Docker and Maestro for fun, development and profit

  • 1. Docker and Maestro For fun, development and profit
  • 2. Maxime Petazzoni Software Engineer at SignalFuse, Inc. (also, Jérôme’s cousin) ! max@signalfuse.com
  • 3. Real-time monitoring, instrumentation, observability and analytics Still in “stealth” mode Get updates at www.signalfuse.com
  • 4. “Docker is awesome!” –You, some time in the last hour (hopefully).
  • 5. A versatile foundation Service or application containment, security, software delivery, host and environment isolation, …and so much more.
  • 6. Power at your fingertips Complete control through the remote API Available programmatic clients like docker-py
  • 7. docker:$ docker -d -H tcp://0.0.0.0:4243 ! client:$ cat << EOF | python import docker from pprint import pprint as pp pp(docker.client.Client(‘tcp://docker:4243') .images('quay.io/signalfuse/maestro-base')) EOF ! ! [{u’Created': 1391202535, u’Id': u’37de13d273eb9a02cd64…’, u’Repository': u'quay.io/signalfuse/maestro-base', u'Size': 155663843, u'Tag': u'0.1.6', u'VirtualSize': 774767942}]
  • 8. Docker’s Achilles: orchestration Single-host is alright with links, but multi-host just isn’t there.
  • 9. How do I orchestrate the deployment and control of a full, multi-host, Docker-based environment?
  • 10. (And more importantly:) How do I make this process one and the same for development, testing and production environments?
  • 11. Enter: Maestro The totally not scalable, pet project that solved my use case. (and maybe yours)
  • 12. Maestro is actually MaestroNG, a re-invention of Kimbro Staken’s Maestro (formerly, dockermix)
  • 13. Takes in a definition of services, their dependencies , configuration and target host… ! …and automates the deployment (and control) of their corresponding containers on these hosts.
  • 14. Classic use case: a pool of “dumb” workers on your favorite cloud/hosting provider that just run Docker. ! No need to (ma)ssh into anything, no need to pre-configure anything. ! Everything is remote controlled.
  • 15. Other typical use case: running all the components of your stack in a single, local virtual machine. ! Useful for development, integration testing, etc.
  • 16. Philosophy: lightweight application/service containers. ! Represent and control your software stack and its dependencies. ! Docker images are the output of your CI process (automation!). ! Start fast, fail faster. Not for heavyweight, complex container “VMs”.
  • 17. Each service instance (container) defines where it runs and which ports it exposes, among other things. ! Like Docker links, Maestro works by injecting this information in the container’s environment about each container’s service’s dependencies.
  • 18. Let’s say broker-1 of kafka depends on ZooKeeper. Its environment will contain: MAESTRO_ENVIRONMENT_NAME = lspe SERVICE_NAME = kafka CONTAINER_NAME = broker-1 CONTAINER_HOST_ADDRESS = 192.168.10.2 ! ZOOKEEPER_ZK_NODE_1_HOST = 192.168.10.2 ZOOKEEPER_ZK_NODE_1_CLIENT_PORT = 2181 ZOOKEEPER_ZK_NODE_1_PEER_PORT = 2888 ZOOKEEPER_ZK_NODE_1_LEADER_ELECTION_PORT = 3888 ! KAFKA_BROKER_1_HOST = 192.168.10.2 KAFKA_BROKER_1_BROKER_INTERNAL_PORT = 9042 KAFKA_BROKER_1_BROKER_PORT = 9042 KAFKA_BROKER_1_JMX_INTERNAL_PORT = 7199 KAFKA_BROKER_1_JMX_PORT = 17199
  • 20. Using this information, you can configure your application at container start time. ! If you like Python, Maestro helps you by providing a set of guest helper functions in maestro.guestutils to easily extract and use this data.
  • 21. #!/usr/bin/env python ! # This is my cool container’s “init script” ! import os from maestro.guestutils import * ! os.execl(‘java’, ‘java’, ‘-jar’, ‘my-app.jar’, ‘-DlistenPort={}’.format(get_port(‘service’)), ‘-DzkServers={}’.format( get_node_list(‘zookeeper’, ports=[‘peer’])))
  • 22. Dependency order is respected on start; inverse order on stop. ! Can be overridden to stop individual services or containers.
  • 23. MyApp Start order: 1. ZooKeeper 2. Kafka 3. MyApp Kafka ZK Stop order: 1. MyApp 2. Kafka 3. ZooKeeper Works on subsets of services too.
  • 24. So how do you wield this power? A bit clunkily, with YAML (and a bit of Jinja2). ! ! ! (sorry)
  • 25. # Yay, YAML! name: lspe ! registries: # Define custom image registries for # private registries, with credentials. ! ships: # Declare each target host. # (Docker daemon locations) ! services: # Declare each service, their # instances, dependencies and # configuration
  • 26. registries: # Quay.io with Maestro robot account quay.io: registry: https://quay.io/v1/ email: maestro@signalfuse.com username: signalfuse+maestro password: {{ env.SUPER_SECRET }} When starting a container, Maestro will automatically login and pull the image from the right place if the image name matches a configured registry.
  • 27. ships: # Local virtual machine vm: ip: 192.168.10.2 docker_port: 4243 timeout: 10 # Slow VM is slow # A shorter form… vm2: {ip: 192.168.10.3, timeout: 5} Ships carry containers and are referred to by name in the configuration.
  • 28. services: # ZooKeeper zookeeper: image: quay.io/signalfuse/zookeeper:3.4.5 ! # Our zoo isn’t too wild, # only one keeper is enough. zk-node-1: ship: vm ports: client: 2181 peer: 2888/tcp leader_election: “3888/tcp:3888/tcp” # Keep persistent data on the host. volumes: /var/lib/zookeeper: /data/zookeeper # Environment can be passed-in too. env: JVM_FLAGS: “-Xmx1g”
  • 29. # Kafka kafka: image: quay.io/signalfuse/kafka:0.8.0 requires: [ zookeeper ] env: ZOOKEEPER_BASE: /lspe/kafka RETENTION_HOURS: 48 broker-1: ship: vm ports: {broker: 9092, jmx: “7199:17199”} # Keep persistent data on the host. volumes: /var/lib/kafka: /data/kafka env: BROKER_ID: 0 More flexibility in port mappings, volume bindings, and environment variables definition not shown here.
  • 30. See README.md for full syntax details and features https://github.com/signalfuse/maestro-ng/blob/master/README.md
  • 31. Demo time! Be prepared for it to fail, because demos always do.
  • 32. What’s next? More flexible service status detection (not only port pinging) Soft and hard service dependencies Parallel startup of independent services and instances of a service
  • 33. That’s it! Thanks for listening! :) github.com/dotcloud/docker-py github.com/signalfuse/maestro-ng
  • 34. SignalFuse is hiring world class engineers! jobs@signalfuse.com