Slide 1

Slide 1 text

1 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 [email protected] bee42 solutions gmbh be(e) not perfect...

Slide 2

Slide 2 text

2 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 From monolith to microservices

Slide 3

Slide 3 text

3 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 Marc Andressen - 2010

Slide 4

Slide 4 text

4 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 Adrian Cockcroft - 2014

Slide 5

Slide 5 text

5 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 Make software faster available Produce higher quality Make your services globally available Improve your service with customer feedback Reduce your cost

Slide 6

Slide 6 text

6 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 Work together (DevOps) Automate your Delivery Pipeline Use Orchestration Tools Use a DataCenter Operating System Migrate Services to the Cloud Integrate more monitoring into your apps

Slide 7

Slide 7 text

7 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 <=>

Slide 8

Slide 8 text

8 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 Build, Ship and Run Any App, Anywhere

Slide 9

Slide 9 text

9 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 deliver prepackage software

Slide 10

Slide 10 text

10 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 Docker works locally and in the cloud with the same binary with the same functionality with the same version with the same filesystem layout with the same dependencies but with different Linux kernels! This dream is now reality... => Infrastructur First

Slide 11

Slide 11 text

11 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015

Slide 12

Slide 12 text

12 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015

Slide 13

Slide 13 text

13 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 Use Linux at bare metal, instead a virtual machine provider

Slide 14

Slide 14 text

14 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 but there exists a lot of competitors CoreOS Rocket | pure LXC | Ubuntu joyent | SmartOS | ...

Slide 15

Slide 15 text

15 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 Docker Engine 1.6 Docker Machine 0.2 Docker Swarm 0.2 Docker Compose (fig.sh) 1.2 && 1.3 RC1 Docker Network Docker Plugins with Powerstrip Mesos and Marathon

Slide 16

Slide 16 text

16 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 Management Docker Host Native Windows Docker Client available Fast Image Loading ( Registry 2.0) Daemon add IPv6 support Resource Limit Management Access Container stats

Slide 17

Slide 17 text

17 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015

Slide 18

Slide 18 text

18 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015

Slide 19

Slide 19 text

19 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 Create and manage machines Use libmachine framework for easier driver integration Docker swarm support Regenerate Certs after IP-address is changed Use current Docker 1.6 engine release Docker engine upgrade support First presentation at second docker hackday end of Oct- 2014 Product offering at DockerConf Amsterdam Dec-2014 Second release v0.2 Apr-2015 is avaliable https://github.com/docker/machine

Slide 20

Slide 20 text

20 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 https://github.com/docker/machine/releases $ URL=https://github.com/docker/machine/releases/download $ curl -L ${URL}/v0.2.0/docker-machine_darwin-amd64 \ >~/bin/docker-machine_darwin-amd64 $ cd ~/bin $ ln -s docker-machine_darwin-amd64 docker-machine $ chmod +x docker-machine_darwin-amd64 $ export PATH=~/bin:$PATH

Slide 21

Slide 21 text

21 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 $ git clone https://github.com/docker/machine.git $ cd machine $ boot2docker start $ eval $(boot2docker shellinit) $ script/build -osarch="darwin/amd64" $ cp docker-machine_darwin_amd64 ~/bin/ $ cd ~/bin $ ln -s docker-machine_darwin-amd64 docker-machine $ chmod +x docker-machine_darwin-amd64 Crosscompile with golang, inside a build container!

Slide 22

Slide 22 text

22 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 $ cd ~/bin $ docker-machine ls INFO[0000] Creating CA: /Users/peter/.docker/machine/certs/ca.pem INFO[0001] Creating client certificate: /Users/peter/.docker/machine/certs/c NAME ACTIVE DRIVER STATE URL $ ls -a .docker/machine/certs ca-key.pem ca.pem cert.pem key.pem server-key.pem server.pem Build your own docker-machine CA!

Slide 23

Slide 23 text

23 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 $ time docker-machine create -d virtualbox dev INFO[0000] Downloading boot2docker.iso to /Users/peter/.docker/images/boot2d INFO[0019] Creating SSH key... INFO[0020] Creating VirtualBox VM... INFO[0027] Starting VirtualBox VM... INFO[0027] Waiting for VM to start... INFO[0061] "dev" has been created and is now the active machine INFO[0061] To point your Docker client at it, run this in your shell: eval real 1m1.937s user 0m6.904s sys 0m6.231s

Slide 24

Slide 24 text

24 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 $ time docker-machine create -d virtualbox dev2 INFO[0000] Creating SSH key... INFO[0000] Creating VirtualBox VM... INFO[0008] Starting VirtualBox VM... INFO[0008] Waiting for VM to start... INFO[0042] "dev2" has been created and is now the active machine. INFO[0042] To point your Docker client at it, run this in your shell: eval real 0m42.850s user 0m6.031s sys 0m5.960s Use Image-Cache

Slide 25

Slide 25 text

25 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 $ docker-machine ls NAME ACTIVE DRIVER STATE URL dev virtualbox Running tcp://192.168.99.100:2376 dev2 * virtualbox Running tcp://192.168.99.101:2376 $ docker-machine config dev2 --tlsverify --tlscacert="/Users/peter/.docker/machine/machines/dev2/ca.pem" --tlscert="/Users/peter/.docker/m $ docker $(docker-machine config dev) ps Start a Container $ docker $(docker-machine config dev2) run \ --rm busybox /bin/sh -c "echo hello machine $(hostname)" Unable to find image 'busybox:latest' locally busybox:latest: The image you are pulling has been verified 511136ea3c5a: Pull complete df7546f9f060: Pull complete ea13149945cb: Pull complete 4986bf8c1536: Pull complete Status: Downloaded newer image for busybox:latest hello machine 117ade53e1d6 $ docker $(docker-machine config dev2) ps -a REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE busybox latest 4986bf8c1536 5 weeks ago 2.433 MB

Slide 26

Slide 26 text

26 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015

Slide 27

Slide 27 text

27 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 $ docker-machine ssh dev ## . ## ## ## == ## ## ## ## ## === /"""""""""""""""""\___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~ \______ o __/ \ \ __/ \____\_______/ _ _ ____ _ _ | |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __ | '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__| | |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ | |_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_| Boot2Docker version 1.6.0, build master : a270c71 - Thu Apr 16 19:50:36 UTC 2015 Docker version 1.6.0, build 47496 Really easy peasy...

Slide 28

Slide 28 text

28 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 Works now as proposed... Generating a machine in a minute... A lot of pull requests exists to support more providers CenturyLink, CloudStack Parallels, QCloud, Gandi, Linode...:-) Swarm support Manage your machine infrastructure Simple CLI Missing a machine description file

Slide 29

Slide 29 text

29 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015

Slide 30

Slide 30 text

30 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 https://github.com/docker/swarm Scheduling docker containers at multiple machines Maintain docker machine cluster Support multiple discovery services Support filtering Open API and first batteries included First presentation at second docker hackday end of October 2014 Product offering at DockerConf Amsterdam 2014 Second Release Apr 2015 Current Release 0.2.0

Slide 31

Slide 31 text

31 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015

Slide 32

Slide 32 text

32 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015

Slide 33

Slide 33 text

33 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 $ docker pull swarm $ docker run --rm swarm create $ docker run -d -p 3376:2376 swarm manage \ token:// $ docker run -d swarm join \ --addr= token://

Slide 34

Slide 34 text

34 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 docker run docker create docker inspect docker kill docker logs docker start docker info docker ps

Slide 35

Slide 35 text

35 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 docker hub swarm discovery simple file or cmdline nodes agent based consul etcd zookeeper http://discovery-stage.hub.docker.com https://github.com/docker/swarm/tree/master/discovery

Slide 36

Slide 36 text

36 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 Spread Bin Packing Random Rescheduling container is planned! http://en.wikipedia.org/wiki/Bin_packing_problem

Slide 37

Slide 37 text

37 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 Memory based docker run -m 1g ... CPU CORE based docker run -c 1 ... Port based docker run -p 80:80 ...

Slide 38

Slide 38 text

38 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 $ docker run -c 1 -p 9082:8080 -d tomcat:8.0 35d50a29ed0fde780c0826ef16ff24d2582609f877ee092c780d9aeb6f27fc75 $ docker ps CONTAINER ID IMAGE COMMAND CREATED \ STATUS PORTS NAMES 35d50a29ed0f tomcat:8.0 "catalina.sh run" 16 minutes ago\ Up Less than a second 192.168.33.89:9082->8080/tcp \ dockerhost1/insane_brattain 9c79ad1c4958 nginx:latest "nginx -g 'daemon of 5 hours ago\ Up 5 hours 443/tcp, 192.168.33.90:8080->80/tcp \ dockerhost2/multiple-machine_nginx_1421067200 $ docker run -c 1 -p 9083:8080 -d tomcat:8.0 f5bc6a274e82426df98eaca5e88fb01f43e03455dfebdb9ee4a3b00a7eab202e $ docker ps CONTAINER ID IMAGE COMMAND CREATED\ STATUS PORTS NAMES f5bc6a274e82 tomcat:8.0 "catalina.sh run" 16 minutes ago\ Up Less than a second 192.168.33.90:9083->8080/tcp \ dockerhost2/stupefied_albattani 35d50a29ed0f tomcat:8.0 "catalina.sh run" 17 minutes ago\ Up Less than a second 192.168.33.89:9082->8080/tcp \ dockerhost1/insane_brattain 9c79ad1c4958 nginx:latest "nginx -g 'daemon of 5 hours ago\ Up 5 hours 443/tcp, 192.168.33.90:8080->80/tcp \ dockerhost2/multiple-machine_nginx_1421067200 ...

Slide 39

Slide 39 text

39 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 lsb_release -a DOCKER_OPTS="--label region=de-berlin \ --label storage=ssd-vdi \ --label role=loadbalancer" docker -d ${DOCKER_OPTS} --label stage=prod Usage of the label with constraints docker run -e "constraint:operatingsystem==fedora" ... docker run -e "constraint:storagedriver==aufs" ... docker run -e "constraint:region==de-berlin" ... docker run -e "constraint:node!=dev2" ... Provision to loaded image or named container docker run -d -p 80:80 --name front nginx docker run -e "affinity:container==front" logger docker run -e "affinity:image==redis" redis

Slide 40

Slide 40 text

40 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 Shared volumes: --volumes-from=dependency Links: --link=dependency:alias Shared network stack: --net=container:dependency

Slide 41

Slide 41 text

41 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 DOT=XYZ docker pull swarm SWARM_TOKEN=$(docker run --rm swarm create) echo $SWARM_TOKEN >token.txt docker-machine create \ --driver digitalocean \ --digitalocean-region fra1 \ --digitalocean-size 512mb \ --digitalocean-access-token $DOT \ --digitalocean-private-networking \ --swarm \ --swarm-master \ --swarm-discovery token://$SWARM_TOKEN \ jax-swarm docker-machine create \ --driver digitalocean \ --digitalocean-region fra1 \ --digitalocean-size 2gb \ --digitalocean-access-token $DOT \ --digitalocean-private-networking \ --swarm \ --swarm-discovery token://$SWARM_TOKEN \ jax-swarm-001

Slide 42

Slide 42 text

42 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 Container Scheduler Docker Proxy Supports TLS Up and Running Nice docker-machine swarm support exists Like It!

Slide 43

Slide 43 text

43 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015

Slide 44

Slide 44 text

44 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 Integration with Swarm - multi host support Applications spanning multiple teams/hubs An even better tool for development environments Extend configs

Slide 45

Slide 45 text

45 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 command description build Build or rebuild services help Get help on a command kill Kill containers logs View output from containers port Print the public port for a port binding ps List containers pull Pulls service images rm Remove stopped containers run Run a one-off command scale Set number of containers for a service start Start services stop Stop services restart Restart services up Create and start containers

Slide 46

Slide 46 text

46 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 common.yml tomcat: image: infrabricks/tomcat:8 ports: - "8080" volumes: - tomcat-users.xml:/opt/tomcat/conf/tomcat-users.xml environment: constraint: zone==dev constraint: disk==ssd SERVICE_8080_NAME: status-http SERVICE_REGION: bee42.1 SERVICE_8080_CHECK_HTTP: /status/ping.jsp SERVICE_8080_CHECK_INTERVAL: 30s

Slide 47

Slide 47 text

47 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 status: image: infrabricks/status tomcatblue: extends: file: common.yml service: tomcat volumes_from: - status environment: SERVICE_TAGS: tomcat,blue

Slide 48

Slide 48 text

48 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 status: image: infrabricks/status tomcatgreen: extends: file: common.yml service: tomcat volumes_from: - status environment: SERVICE_TAGS: tomcat,green

Slide 49

Slide 49 text

49 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 shipyardrethinkdbdata: image: shipyard/rethinkdb entrypoint: /bin/bash command: -l rethinkdb: image: shipyard/rethinkdb expose: - "8080" - "28015" - "29015" volumes_from: - shipyardrethinkdbdata shipyard: image: shipyard/shipyard ports: - "5080:8080" links: - rethinkdb:rethinkdb

Slide 50

Slide 50 text

50 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015

Slide 51

Slide 51 text

51 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 $ eval $(docker-machine env dev2) $ docker-compose up -d $ open http://$(docker-machine ip dev2):5080 $ docker run --rm -it shipyard/shipyard-cli Default Credentials: admin/shipyard More about the project http://shipyard-project.com/

Slide 52

Slide 52 text

52 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015

Slide 53

Slide 53 text

53 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 crane maestro-ng rancher-os shipyard dockerui decking CoreOS fleet Kubernetes Marathon vagrant saltstack ansible puppet chef

Slide 54

Slide 54 text

54 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 https://clusterhq.com/blog/docker-extensions

Slide 55

Slide 55 text

55 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 You can write your own proprietary clients. Add tracking Add your own auth control Add functionality like weave or flocker Split up the big docker daemon project container management network storage and image management ...

Slide 56

Slide 56 text

56 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 $ cat > powerstrip-demo/adapters.yml <

Slide 57

Slide 57 text

57 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 $ docker run -d --name powerstrip-slowreq \ --expose 80 \ clusterhq/powerstrip-slowreq:v0.0.1 $ docker run -d --name powerstrip \ -v /var/run/docker.sock:/var/run/docker.sock \ -v $PWD/powerstrip-demo/adapters.yml:/etc/powerstrip/adapters.yml \ --link powerstrip-slowreq:slowreq \ -p 2375:2375 \ clusterhq/powerstrip:v0.0.1 https://github.com/ClusterHQ/powerstrip-slowreq.git

Slide 58

Slide 58 text

58 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 Use Local unix socket RPC's to extend go daemon functionality See my powerstrip TLS experiment https://github.com/docker/swarm/pull/347 https://github.com/chanwit/swarm/tree/plugin-system https://github.com/infrabricks/powerstrip-demo

Slide 59

Slide 59 text

59 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015

Slide 60

Slide 60 text

60 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 ipv6 support at docker 1.5 socketplane weave de-wire pipework flannel openVSwitch https://speakerdeck.com/aschmidt75/docker-networking https://speakerdeck.com/aschmidt75/docker-network- playground http://www.infrabricks.de

Slide 61

Slide 61 text

61 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015

Slide 62

Slide 62 text

62 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 Distributed key value store Service Registry Multi-Datacenter Support ACL HTTP and DNS Discovery support Simple: curl'able user facing API (HTTP+JSON) Secure: optional SSL client cert authentication Reliable: properly distributed using Raft Written in go Use the Find more info at website RAFT Protocol Consul

Slide 63

Slide 63 text

63 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 Registrator automatically registers/deregisters services for Docker containers published ports published metadata from the container environment Consul (Tags, Healthcheck) Blog explain registrator Github registrator Consul ETCD

Slide 64

Slide 64 text

64 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015

Slide 65

Slide 65 text

65 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015

Slide 66

Slide 66 text

66 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 Twitter AirBnB Apple (Siri) Google Cloud Plattform Amazon AWS Digital Ocean Sloppy.io

Slide 67

Slide 67 text

67 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 Tasks-Scheduler Docker Support Deployment Groups Auto Rescheduler Schedule Groups of Apps Swarm Support planned!

Slide 68

Slide 68 text

68 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015

Slide 69

Slide 69 text

69 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015

Slide 70

Slide 70 text

70 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015

Slide 71

Slide 71 text

71 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015

Slide 72

Slide 72 text

72 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015

Slide 73

Slide 73 text

73 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015

Slide 74

Slide 74 text

74 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015

Slide 75

Slide 75 text

75 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 View the slides as a docker container $ docker run -d -p 8000:80 rossbachp/docker-orchestration:devopscon-2015 $ open http://:8000/docker-orchestration Slides at speakerdeck https://speakerdeck.com/rossbachp Available at 2.06.2015* [email protected] @PRossbach Infrabricks Blog bee42

Slide 76

Slide 76 text

76 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 DevOpsCon 1-3.6 2015 - Berlin DockerConf 20-23.6 2015 - San Fransisco DevOpsDays at 2-6.11 WJax 2015 - Munich Find my training offerings at http://www.bee42.com/training/ http://devops-training.de/2015

Slide 77

Slide 77 text

77 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 17.11.2014 Docker Sonderheft

Slide 78

Slide 78 text

78 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 Q1 2016 www.dpunkt.de/docker

Slide 79

Slide 79 text

79 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 Work with the beekeeper!

Slide 80

Slide 80 text

80 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 Service benefit Lab: use my IT-brick knowledge to be faster informed Consulting: use my expertise to start smarter Training: let me help you to get a docker-brick expert Products: use my knowledge of the docker ecosystem [email protected]

Slide 81

Slide 81 text

81 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015

Slide 82

Slide 82 text

82 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 bee42 solutions gmbh starts the implementation of an Infrabricks line! Peter Rossbach DevOps, Docker-enthusiast and infra-coder with passion Systemarchitect Java Developer Apache Tomcat Committer Member of the Apache Software Foundation Founder of the bee42 solutions gmbh Author starts writing the german docker microservice handbook! We're hiring!

Slide 83

Slide 83 text

83 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015

Slide 84

Slide 84 text

84 / 84 © 2015 , @PRossbach, DevOpsCon Berlin 2015 DockerConf Amsterdam 2014 videos https://blog.docker.com/2014/12/dockercon-eu-keynote-on-orchestration/ http://de.slideshare.net/d0cent/orchestrating-docker-containersatscale https://github.com/docker/machine https://github.com/docker/swarm https://github.com/docker/docker/issues/9459 http://de.slideshare.net/Docker/docker-swarm-by-victor-vieux http://blog.docker.com/2014/12/announcing-docker-machine-swarm-and- compose-for-orchestrating-distributed-apps/ https://community.runabove.com/kb/en/instances/docker-in-5-minutes-on- runabove-with-docker-machine.html https://github.com/docker/machine/pull/73 http://blogs.vmware.com/cloudnative/docker-machine-deployment-vm-fusion- vsphere-vcloud-air/ https://github.com/cloudnativeapps/machine/releases/tag/vmw_tech_preview http://technolo-g.com/intro-to-docker-swarm-pt1-overview/ https://github.com/technolo-g/docker-swarm-demo http://technolo-g.com/intro-to-docker-swarm-pt2-config-options-requirements/