container (docker) orchestration tools
TRANSCRIPT
Docker ContainerOrchestration
@dhilipsiva
Tech Lead, Full-Stack & DevOps - @Appknox http://dhilipsiva.com [email protected]
Container DevelopersMeetup Bangalore
Meetup #3 - Dockerizing Applications
Docker Orchestration tools
https://www.meetup.com/Container-Developers-Meetup-Bangalore/events/233529360/
@dhilipsivaTech Lead, Full-Stack & DevOps - @Appknox
I code for Web, Mobile, Embedded & IoT. Open-Source Fanatic. Big Data & Machine LearningEnthusiast. Dad. Atheist
So primarily a Developer + little bit of this & that
Jack of all trades & Master of none
I have no idea what I amtalking about
If you think that I got something wrong, then Iprobably am. So please feel free to correct me
After all, it is the mistakes and the lessons welearn from it - are the very things that de�ne us
Constructive criticism is more than welcomed!
Orchestration
Orchestration (computing)Orchestration is the automated arrangement,coordination, and management of computer systems,middleware, and services (From Wikipedia)
Process Discovery
Scheduling
Cluster Management
Uni�ed way of installing backing services
Easy way to Update / rollback applications
Etc,.
Orchestration Tools
Container - Speci�c tools
Kubernetes, Marathon, Chef Ironfan, Rancher,Helios, Ansible Container, Swarm & SwarmKit,Shipper, Azk, maestro-ng, Maestro,
Others
Ansible, OpenStack Heat, Python Fabric, Chef,Puppet, Serf, Archipel, governor, Gru, Circuit, Rex
KubernetesThere is a detailed Hands-On sessions onKubernetes this Afternoon
Docker Basics is an absolute requirement.
If you are not comfortable with Basics of Docker,please attend Anand Gothe's Docker by exampleSession
MarathonApache Mesos (Or on Mesoshpere's DCOS)
Apache Zookeeper
Install Marathon on the Cluster
Create marathon-demo.json �le
run curl -X POST http://marthon-master:PORT/v2/apps [email protected] -H "Content-type:application/json"
basic-3.json
{ "id": "marathon-demo", "cmd": "python3 -m http.server 8080", "cpus": 0.5, "mem": 32.0, "container": { "type": "DOCKER", "docker": { "image": "python:3", "network": "BRIDGE", "portMappings": [ { "containerPort": 8080, "hostPort": 0 } ] } } }
RancherMostly GUI Based
You can experiment with it yourself by pulling theDocker Image & running it: docker run -d --restart=always -p 8080:8080rancher/server
HeliosInstallation
# install helios-solo on Debian/Ubuntu $ curl -sSL https://spotify.github.io/helios-apt/go | sudo sh -$ sudo apt-get install helios-solo # install helios-solo on OS X $ brew tap spotify/public && brew install helios-solo # launch a helios cluster in a Docker container $ helios-up # check if it worked and the solo agent is registered $ helios-solo hosts
# Create an nginx job using the nginx container image, # exposing it on the host on port 8080 $ helios create nginx:v1 nginx:1.7.1 -p http=80:8080 # Check that the job is listed $ helios jobs # List helios hosts $ helios hosts # Deploy the nginx job on one of the hosts $ helios deploy nginx:v1 <host> # Check the job status $ helios status # Curl the nginx container when it's started running $ curl <host>:8080 # Undeploy the nginx job $ helios undeploy -a nginx:v1 # Remove the nginx job $ helios remove nginx:v1
Ansible Container$ [sudo] pip install ansible-container $ ansible-container init $ ansible-container build $ ansible-container run $ ansible-container push $ ansible-container shipit
Swarm & SwarmKitBoth are very similar
Swarm is stand-alone
SwarmKit comes with Docker 1.12 (Swarm Mode)
# Creating a service $ swarmctl service create --name redis --image redis:3.0.5 $ swarmctl service ls $ swarmctl service inspect redis $ swarmctl service update redis --replicas 6 $ swarmctl service update redis --image redis:3.0.6 # Rolling update $ swarmctl service update redis --image redis:3.0.7 --update
Shippershipper is a fabric for docker - tool for orchestratingdocker containers. Supports parallel execution andcan generate command line interface
from shipper import Shipper, run, command @command def build(tag, path): s = Shipper() s.build(tag=tag, path=path) @command def ps(all=False, running=True): s = Shipper(["host-a", "host-b"]) print s.containers(pretty=True, all=all, running=running)
@command def start(image, command, ports=None): if ports: ports = ports.split(",") s = Shipper() s.run(image, command, ports=ports, once=True) @command def stop(image=None): s = Shipper() s.stop(*s.containers(image=image, running=True)) run()
$ python env.py ps --all $ python env.py build base ~/images/base $ python env.py build stop --image dev/.*
Maestrotemplates: nodejs: config: command: /usr/bin/node /var/www/app.js ports: - '80' environment: - PORT=80 buildspec: url: github.com/toscanini/docker-nodejs require: mongodb: port: '27017' mongodb: config: command: /usr/bin/mongod --config /etc/mongodb.conf buildspec: url: github.com/toscanini/docker-mongodb
Maestro provides the ability to easily launch,orchestrate and manage mulitple Docker containersas single unit.
maestro build maestro start [node_name] maestro stop [node_name] maestro run template [commandline] maestro ps maestro destroy
AzkUse azk and easily orchestrate developmentenvironments on your own machine and then justcode.
$ brew install azukiapp/azk/azk $ azk agent start $ azk init $ azk start -vv $ azk status # Access http://azkdemo.dev.azk.io
/** * Documentation: http://docs.azk.io/Azkfile.js */ // Adds the systems that shape your system systems({ azkdemo: { // Dependent systems depends: [], // More images: http://images.azk.io image: {"docker": "azukiapp/node:0.12"}, // Steps to execute before running instances provision: [ "npm install", ], workdir: "/azk/#{manifest.dir}", shell: "/bin/bash", command: ["npm", "start"], wait: {"retry": 20, "timeout": 1000}, mounts: { '/azk/#{manifest.dir}': path("."), '/azk/#{manifest.dir}/node_modules': persistent("node-modules-#{system.name}"
Other things that you mightbe interested inDokku, Deis, Flynn, Fabric8, Tsuru, Empire, PAZ,Paasta, Cocaine, AWSbox
Thanks!
https://github.com/dhilipsiva/talks
Copyright © 2016 dhilipsiva
This copy is released under the MIT License
Source Code
Questionshttp://dhilipsiva.com [email protected]