Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Container (Docker) Orchestration Tools

dhilipsiva
September 24, 2016

Container (Docker) Orchestration Tools

CLI-Based open source Docker / Container Orchestration Tools

dhilipsiva

September 24, 2016
Tweet

More Decks by dhilipsiva

Other Decks in Programming

Transcript

  1. Container Developers Meetup Bangalore Meetup #3 - Dockerizing Applications Docker

    Orchestration tools https://www.meetup.com/Container-Developers- Meetup-Bangalore/events/233529360/
  2. @dhilipsiva Tech Lead, Full-Stack & DevOps - @Appknox I code

    for Web, Mobile, Embedded & IoT. Open- Source Fanatic. Big Data & Machine Learning Enthusiast. Dad. Atheist So primarily a Developer + little bit of this & that Jack of all trades & Master of none
  3. I have no idea what I am talking about If

    you think that I got something wrong, then I probably am. So please feel free to correct me After all, it is the mistakes and the lessons we learn from it - are the very things that de ne us Constructive criticism is more than welcomed!
  4. 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,.
  5. 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
  6. Kubernetes There is a detailed Hands-On sessions on Kubernetes this

    Afternoon Docker Basics is an absolute requirement. If you are not comfortable with Basics of Docker, please attend Anand Gothe's Docker by example Session
  7. Marathon Apache 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 -d @marathon-demo.json -H "Content-type: application/json"
  8. 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 } ] } } }
  9. Rancher Mostly GUI Based You can experiment with it yourself

    by pulling the Docker Image & running it: docker run -d --restart=always -p 8080:8080 rancher/server
  10. Helios Installation # 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
  11. # 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
  12. Ansible Container $ [sudo] pip install ansible-container $ ansible-container init

    $ ansible-container build $ ansible-container run $ ansible-container push $ ansible-container shipit
  13. Swarm & SwarmKit Both 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
  14. Shipper shipper is a fabric for docker - tool for

    orchestrating docker containers. Supports parallel execution and can 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)
  15. @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/.*
  16. Maestro templates: 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
  17. Maestro provides the ability to easily launch, orchestrate and manage

    mulitple Docker containers as single unit. maestro build maestro start [node_name] maestro stop [node_name] maestro run template [commandline] maestro ps maestro destroy
  18. Azk Use azk and easily orchestrate development environments on your

    own machine and then just code. $ brew install azukiapp/azk/azk $ azk agent start $ azk init $ azk start -vv $ azk status # Access http://azkdemo.dev.azk.io
  19. /** * 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-modu
  20. Other things that you might be interested in Dokku, Deis,

    Flynn, Fabric8, Tsuru, Empire, PAZ, Paasta, Cocaine, AWSbox