docker and vagrant usage in openi
TRANSCRIPT
Developer Perspective
War of Mobile OS
APIs Market Proliferation
Source: Musser, J. (2012) Open APIs: What's Hot, What's Not?. http://www.slideshare.net/jmusser/j-musser-apishotnotgluecon2012
Service Providers Perspective
Applications as cost centres
Concerns for disruption of business models
• An open-source cloud platform that will allow Users to instantiate, deploy and manage their own Cloudlet.
• An API framework that will allow Developers to build applications that integrate dynamically a broader spectrum of cloud-based services and at the same time can access User Cloudlets to store and retrieve content and data.
• A set of value adding services, that will allow Developers to easily access and use the content and data stored in the Cloudlets across several applications and devices.
Key Results
API Framework
• User-centric, «Graph» API based on REST & JSON• Abstracts functionality of Cloud-based Services
into uniquely identified objects• Accompanied by a developers’community-based platform
Cloudlet
Cloudlet
• Each cloudlet is addressable• API Component embedded in Cloudlet• All communication via REST/JSON• Portability, security, privacy, ownership
We discovered Vagrant..
• What is Vagrant?
• Created by Mitchell Hasimoto
• Provisioning Tools for Dev, Production & Test Environments
• Syntactic sugar around VMs and Containers
• Syntactic sugar around provisioning
• Why use Vagrant?
• Quick
• Easily replicate production on a Dev box
• Easily go production from a Dev box
• Mature, stable, proven
Step 1: Install Vagrant
• http://www.vagrantup.com/downloads.html
• Mac OSX
• Windows
• Debian/Ubuntu
• CentosOS/Redhat/Fedora
Step 3: Select a Box
• http://www.vagrantbox.es
• Ubuntu, OpenSuse, OpenBSD, CentOS, Debian..
• Select Provider (VM or Container)
Step 4: Show/Edit Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = “precise64“
config.vb.box_url = “http://bit.ly/1gLmNF0”
end
More Commands
• status : status of the machine
• halt : stop machine
• suspend : suspend machine
• reload : restar machine (load new vagrantfile)
• resume : resume suspended machine
• provision : force provisionning machine
• destroy : stop and delete machine
• box : manages boxes
• …
More Providers (native or plugin)
• VMs:
• VirtualBox, KVM, Hyper-V, VMware, libvirt
• Containers:
• lxc, docker
• Services:
• AWS, DigitalOcean, HP Cloud, Joyent, Rackspace, OpenStack, CloudStack, vSphere…
Customize
• config.vm.box* : Box information
• config.vm.network* : Network
• config.ssh* : SSH connection
• config.vm.synced_folder : Share folder
• config.vm.provider* : Custom provider settings
• config.vm.provision* : Provisioning (Puppet, Chef, Docker, Shell…)
Provisioning?
• Automatically install software, alter configuration and more
• Shell Scripts
• File
• Puppet (Standalone & Agent)
• Chef (Solo & Client)
• Ansible
• Salt
• Docker!!!
• Open-Source Container for Dummies
• Create lightweight, portable, self-sufficient container from any app.
• Build once… run anywhere
• Configure once… run anything
• Ecosystems! OS, VM’s, PaaS, IaaS…
• Base: LXC, OpenVZ, systemd-nspawn, libvirt-lxc, libvirt-sandbox, qemu/kvm, Jails, Solaris Zones, chroot (0.9*)
Vagrant and Docker
• BOX = Machine
• Docker = Container (App package inside the Box)
• Functions: Pull, Build, Run
• Allow others provisioning (Shell, puppet, chef)
Docker in Vagrantfile
Vagrant.configure("2") do |config|
v = config.vm
v.box = "precise64"
v.box_url = "http://bit.ly/1gLmNF0"
v.network "forwarded_port", guest: 5000, host: 9292
v.provision "docker", images: [“dg/docker-sample"]
v.provision “docker“ do |d| d.run “dg/docker-sample”, args: "-p 5000:5000“ end
end
Want to learn more?
• www.vagrantup.com
• GitHub mitchellh/vagrant
• Twitter @vagrantup @mitchellh
• www.docker.io
• GitHub dotcloud/docker
• Twitter @docker
• OPENi
• GitHub OPENi-ict/
• Twitter @openi_ict