Discovering Volume Plugins with Applications using Docker Toolbox and VirtualBox
-
Upload
clinton-kitson -
Category
Technology
-
view
692 -
download
0
Transcript of 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
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.
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
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
Enter&Docker&Extensibility
• Volume
• Network
• Authoriza2on
• Composable8and8sustainable
• Consumed8solely8through8Docker8API
• Up8to8consuming8ecoAsystem8to8leverage8func2onality,8ie.8container8schedulers
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
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
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
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
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"
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"
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
docker'volume'create'.'tes0ng1
eval $(docker-machine env testing1)docker volumedocker volume create \ --driver=rexray --name=meetup1 --opt=size=2docker volume ls
docker'run'with'busybox
docker run -ti \ --volume-driver=rexray -v meetup1:/meetup1 \ busyboxdf /meetup1touch /meetup1/helloexit
docker'run'to'verify'with'busybox
docker run -ti \ --volume-driver=rexray -v meetup1:/meetup1 \ busyboxls /meetup1exit
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
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
Discovering+Apps+and+Volumes+using+postgres
• postgres)on)docker)hub
• Dockerfile)for)postgres)9.5
• VOLUME)/var/lib/postgresql/data
running&postgres&,&internal&data&volume
docker run --name some-postgres \ -e POSTGRES_PASSWORD=mysecretpassword -d \ postgresdocker rm -f some-postgres
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
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
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
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
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
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
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
THANK&YOUemccode.github.io