docker swarm 45-min workshop (mountain view docker meetup 2/24/2016)
TRANSCRIPT
Swarm:Simplicity,Flexibility,EaseofSetup
• WhatisSwarm?• SetupaSwarmcluster• Samplemicroservice applicationonSwarmwithdemo
dockerdaemon(node-1)
Container
Container
>_Docker CLI
SwarmmanagerdockerDockerComposeKitematicJenkinsplugin
dockerdaemon(node-0)
Container
Container
dockerdaemon(node-2)
Container
Container
SwarmFeatures
• Scheduling• Reschedulingonfailure• HA(multiplemasters)• Labels,affinitiesandconstraintstocontrolschedulingdecisions• DNS-basedservicediscovery
Threestepstocreateacluster
1. CreateaKV(Consul,etcd,zk)2. RunSwarmManagercontainer3. RestartyourDockerdaemonswithclusterarguments
Step1:CreateaKVKVisfornodediscoveryandlibnetwork IPallocation(Consul,etcd,orzk)
docker run
--restart=unless-stopped
-d
-p 8500:8500
--name consul
-h consul
progrium/consul -server -bootstrap
-ui-dir /ui
Refs:https://www.consul.io/docs/agent/options.html
WebUIon:http://192.168.33.11:8500/ui/
Single-node Consul cluster
HostnameContainernameMap Consul port to hostDaemonize container processRestart policy
Step2:StartSwarmmanager
docker run -d -p 3375:2375 swarm manage --discovery-opt="kv.path=docker/nodes"consul://192.168.33.10:8500/
Refs:https://docs.docker.com/swarmhttps://docs.docker.com/swarm/install-manual/
Step3:Addsomeargstoyourdaemons
RestartDockerdaemonswith:
DOCKER_OPTS=-H=tcp://0.0.0.0:2375--cluster-store=consul://192.168.33.10:8500--cluster-advertise=eth1:2375
Refs:https://docs.docker.com/swarmhttps://docs.docker.com/swarm/install-manual/
ExampleRepo:MicroserviceApponSwarm
https://github.com/mgoelzer/swarm-demo-voting-app(thenfollowHOWTO.txt)
Demonstratesamicroservice apponSwarmincluding:• Vagrantfile +AWSCloudFormationtemplatetodeploythecluster• Loadbalancedwebfrontend• DNS-basedservicediscovery
Interlock(nginxorha_proxy)
frontend01
redis01
frontend02
redis02
frontend03
redis03
frontend04
redis04
frontend05
redis05
pg results-app
Interlock(nginxorha_proxy)
frontend01
redis01
frontend02
redis02
frontend03
redis03
frontend04
redis04
frontend05
redis05
pg results-app
Interlock(nginxorha_proxy)
frontend01
redis01
frontend02
redis02
frontend03
redis03
frontend04
redis04
frontend05
redis05
pg results-app
10.0.0.4
10.0.0.3
36.36.36.36
10.0.0.100
10.0.0.6
10.0.0.5
10.0.0.7
10.0.0.6
10.0.0.9
10.0.0.8
10.0.0.11
10.0.0.10
10.0.0.101
Interlock(nginxorha_proxy)
frontend01
redis01
frontend02
redis02
frontend03
redis03
frontend04
redis04
frontend05
redis05
pg results-app
10.0.0.4
10.0.0.3
36.36.36.36
10.0.0.100
10.0.0.6
10.0.0.5
10.0.0.7
10.0.0.6
10.0.0.9
10.0.0.8
10.0.0.11
10.0.0.10
10.0.0.101
192.168.33.11 192.168.33.12
.20 .21 .22 .23 .24
.200 .201
.251
Consul
Manager
Host
Container
10.0.0.4 ContainerIPs192.168.33.11 NodeIP
for (int i = min; i <= max; i++) {
String hostname = String.format(“redis%02d.mynet”,i);
try {
InetAddress inetAddress = InetAddress.getByName(hostname);
String addr = inetAddress.getHostAddress();
queues.add(new RedisQueue(hostname, addr));
} catch (UnknownHostException e) {
// No such host
}
}
return queues;
“redis01.mynet””redis02.mynet”etc.
e.g.,“10.0.0.23”
WorkerdiscoversRedis’satruntimebyDNS
queuesredis01.mynet 10.0.0.23
redis02.mynet 10.0.0.24
redis03.mynet 10.0.0.25
DemoTofollowalongathome:1. Clonehttps://github.com/mgoelzer/swarm-demo-voting-app2. FollowinstructionsinHOWTO.txt file(inrootofrepo).3. Screencastsofthedemo:
• Step1:VagrantUp(https://www.youtube.com/watch?v=gKiEveAjgU8)• Step2:CreateSwarmCluster(https://www.youtube.com/watch?v=IskSZC5wv7A)• Step3:Builddemoappimages(https://www.youtube.com/watch?v=ZRFtNQB-VY8)• Step4:Startdemoappcontainers(https://www.youtube.com/watch?v=jlrpWrsvB2Q)• Step5:Usethedemoapp(https://www.youtube.com/watch?v=_Pc07ThTbzs)
Jérôme’sExample:CoinMiner
Slides:http://view.dckr.info/Repo:https://github.com/jpetazzo/orchestration-workshop
Demonstrates:• Chaos-monkeyproofcluster• HowtodobatchworkloadsonSwarm• ELKstackforlogging andmetrics• Otherloadbalancingpatternsbeyond Interlock
(anotherSwarmexampleapp)
MikeGoelzer|[email protected] | GH:@mgoelzer |@mikegoelzer