Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

27
Discovering Volume Plugins with Applica7ons using Docker Toolbox and VirtualBox Clint Kitson * Developer Advocate Leader emccode.github.io

Transcript of Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

Page 1: Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

Discovering+Volume+Plugins+with+

Applica7ons+using+Docker+Toolbox+and+

VirtualBox

Clint&Kitson&*&Developer&Advocate&Leader

emccode.github.io

Page 2: Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

descrip(on

There%are%right%and%wrong%ways%to%use%containers%with%persistent%applica4ons.%Lucky%for%you,%doing%it%the%right%way%is%much%easier%nowadays%with%Docker%Volume%Plugins.%This%talk%will%focus%on%doing%some%basic%educa4on%including%mostly%live%demos%to%show%how%you%can%take%advantage%of%these%new%capabili4es%for%expanding%how%you%leverage%containers.%We%will%be%going%through%a%workflow%that%you%can%do%yourself%using%boot2docker.

Page 3: Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

Agenda

• Docker(Volume(Plugin(overview

• Volume(Plugins(with(VirtualBox(in(ac9on

• Inves9ga9ng(applica9ons(and(running(with(Volume(Plugin

• Thinking(about(availability

• Performing(failAover(of(a(container(to(another(container(host

Page 4: Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

Situa&on/Problem

• When&I&run&a&persistent&applica1on&in&a&container,&where&does&my&data&get&stored?

• Possibly&a&data&volume

• Possibly&container&volume

• Possibly&an&exis1ng&private&mounted&volume&from&networked&storage

• ..&howto&build&a&snowflake

• Container&hosts&should&be&immutable

Page 5: Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

Enter&Docker&Extensibility

• Volume

• Network

• Authoriza2on

• Composable8and8sustainable

• Consumed8solely8through8Docker8API

• Up8to8consuming8ecoAsystem8to8leverage8func2onality,8ie.8container8schedulers

Page 6: Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

What%are%Docker%Volume%Plugins

• Drama&cally*simplifies*external*storage*for*usage*with*containers

• Service*that*runs*alongside*Docker*daemon*receiving*Plugin*requests

• Extensible*storage*orchestra&on

• Lunch*is*ready*at*/var/lib/plugin/volumes/vol1/data

• Serves*requests*for*Volume*Create/Remove/Mount/Unmount/Path

Page 7: Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

How$do$we$play?

• VirtualBox,can,be,used,similar,to,explore

• VirtualBox,is,popular,and,works,well,on,laptops

• Provides,shared,storage,pla;orm,through,Virtual,Media

• or,GCE,,AWS,EC2,,Openstack,Cinder,,EMC,ScaleIO/XtremIO/Isilon/VMAX

• or,other,Volume,Plugins

• MulIple,container,hosts,(VMs),to,ensure,failover,and,immutability

Page 8: Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

Typical(Install(and(Configure

• Installcurl -sSL https://dl.bintray.com/emccode/rexray/install | sh -

• /etc/rexray/config.ymlrexray: logLevel: warn storageDrivers: - virtualbox mount: volume: preempt: falsevirtualbox: endpoint: http://10.0.2.2:18083 tls: false volumePath: "/Users/clintonkitson/Repos/vagrant-rexray/Volumes" controllerName: SATA

Page 9: Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

Super&Simple&Example&using&Docker&Toolbox

• Requires

• Docker-Toolbox-1.9.1+

• VirtualBox-5.0.10+

• VBoxManage setproperty websrvauthlibrary null

• vboxwebsrv -H 0.0.0.0 -v -b

Page 10: Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

Docker'Machine'example'1'tes4ng1

docker-machine create --driver=virtualbox testing1

docker-machine ssh testing1 \ "wget http://tinycorelinux.net/6.x/x86_64/tcz/udev-extra.tcz \ && tce-load -i udev-extra.tcz && sudo udevadm trigger"docker-machine ssh testing1 \ "curl -sSL https://dl.bintray.com/emccode/rexray/install | sh -"

// optional instead of curl-bashcurl -ssL \ https://dl.bintray.com/emccode/rexray/stable/latest/rexray-Linux-x86_64.tar.gz \ -o rexray.tar.gz && tar -zxvf rexray.tar.gzdocker-machine scp rexray testing1:~/.docker-machine ssh testing1 \ "sudo mv ~/rexray /usr/bin/. && \ sudo rexray install"// end optional

docker-machine ssh testing1 \ "sudo tee -a /etc/rexray/config.yml << EOFrexray: storageDrivers: - virtualbox volume: mount: preempt: falsevirtualbox: endpoint: http://10.0.2.2:18083 tls: false volumePath: /Users/clintonkitson/VirtualBox Volumes controllerName: SATA"

docker-machine ssh testing1 "sudo rexray start"

Page 11: Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

Docker'Machine'example'1'tes4ng2

docker-machine create --driver=virtualbox testing2

docker-machine ssh testing2 \ "wget http://tinycorelinux.net/6.x/x86_64/tcz/udev-extra.tcz \ && tce-load -i udev-extra.tcz && sudo udevadm trigger"docker-machine ssh testing2 \ "curl -sSL https://dl.bintray.com/emccode/rexray/install | sh -"

// optional instead of curl-bashcurl -ssL \ https://dl.bintray.com/emccode/rexray/stable/latest/rexray-Linux-x86_64.tar.gz \ -o rexray.tar.gz && tar -zxvf rexray.tar.gzdocker-machine scp rexray testing2:~/.docker-machine ssh testing2 \ "sudo mv ~/rexray /usr/bin/. && \ sudo rexray install"// end optional

docker-machine ssh testing2 \ "sudo tee -a /etc/rexray/config.yml << EOFrexray: storageDrivers: - virtualbox volume: mount: preempt: falsevirtualbox: endpoint: http://10.0.2.2:18083 tls: false volumePath: /Users/clintonkitson/VirtualBox Volumes controllerName: SATA"

docker-machine ssh testing2 "sudo rexray start"

Page 12: Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

Discover)REX-Ray)and)VirtulBox)on)tes8ng1

docker-machine ssh testing1sudo surexrayrexray volume --helprexray volume lsrexray volume create --volumename=testvol1 --size=1rexray volume mount --volumename=testvol1ls /var/lib/rexray/volumes/testvol1/datarexray volume unmount --volumename=testvol1rexray stoprexray startexit

Page 13: Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

docker'volume'create'.'tes0ng1

eval $(docker-machine env testing1)docker volumedocker volume create \ --driver=rexray --name=meetup1 --opt=size=2docker volume ls

Page 14: Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

docker'run'with'busybox

docker run -ti \ --volume-driver=rexray -v meetup1:/meetup1 \ busyboxdf /meetup1touch /meetup1/helloexit

Page 15: Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

docker'run'to'verify'with'busybox

docker run -ti \ --volume-driver=rexray -v meetup1:/meetup1 \ busyboxls /meetup1exit

Page 16: Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

docker'run'with'sharing'volume

docker run -tid --name=container1 \ --volume-driver=rexray -v meetup1:/meetup1 busyboxdocker run -ti --volumes-from=container1 busyboxls /meetup1exitdocker exec container1 ls /meetup1docker stop container1

Page 17: Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

Discovering+Volumes+and+Container+Images

• REX%Ray(Docs(on(Applica2ons

• Dockerfile(includes(a(VOLUME(instruc2on

• VOLUME(["/data"]

• Up(to(container(image(maintainer(to(properly(designate(appropriate(loca2on(of(persistent(data

• Makes(a(container(workload(portable

• Enables(immutable(hosts

Page 18: Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

Discovering+Apps+and+Volumes+using+postgres

• postgres)on)docker)hub

• Dockerfile)for)postgres)9.5

• VOLUME)/var/lib/postgresql/data

Page 19: Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

running&postgres&,&internal&data&volume

docker run --name some-postgres \ -e POSTGRES_PASSWORD=mysecretpassword -d \ postgresdocker rm -f some-postgres

Page 20: Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

running&postgres&,&external&data&volume

docker volume create \ --driver=rexray --name=pdata --opt=size=3docker run --name some-postgres \ -e POSTGRES_PASSWORD=mysecretpassword -d \ --volume-driver=rexray -v pdata:/var/lib/postgresql/data \ postgresdocker-machine ssh testing1 sudo ls /var/lib/rexray/volumes/pdata/datadocker logs some-postgres

Page 21: Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

Thinking'About'Availability

• Always(sharing(isn't(the(answer

• Safety(first(for(ext4/xfs

• Failure(scenarios?

• Container(dies?

• Container(run>me(borks?

• Kernel(problems?

• Host(unresponsive?

• ..(volumes(are(typically(aGached(and(locked(to(hosts

Page 22: Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

try$a$failover$,$on$tes/ng2

eval $(docker-machine env testing2)docker run --name some-postgres \ -e POSTGRES_PASSWORD=mysecretpassword -d \ --volume-driver=rexray -v pdata:/var/lib/postgresql/data \ postgres

Page 23: Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

turn%on%volume%mount%pre,emp-on

• docker-machine ssh testing2

• sudo vi /etc/rexray/config.yml

• set%rexray.volume.mount.preempt: true

• sudo rexray stop

• sudo rexray start

• exit

Page 24: Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

do#a#failover#+#on#tes/ng2

docker rm some-postgresdocker run --name some-postgres \ -e POSTGRES_PASSWORD=mysecretpassword -d \ --volume-driver=rexray -v pdata:/var/lib/postgresql/data \ postgres

Page 25: Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

Summary

• Volume(plugins(are(great

• Keep(container(hosts(immutable

• Persistent(volumes(can(be(orchestrated(for(containers

• Container(images(with(volumes(specified(are(easy(to(make(persistent

Page 26: Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

EMC${code}$+$emccode.github.io

• Looking(for(folks(that(are(passionate(about(Containers,(Open(Source,(and(DevOps

• REX?Ray

• RackHD

• mesos?module?dvdi

• OSS(ContribuCon(?(Docker,(Mesos,(others

Page 27: Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox

THANK&YOUemccode.github.io