Vagrant, Docker
Salvo Zappalà
Google I/O 2016 – Catania
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
THE PROBLEM
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Scenario 1
Plain LAMP suite
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Every person has to install his enviroment from scratch
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
The software is different for every stack
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
No provisioning: manual configuration for each person
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Scenario 2
Setup script
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
my application $ -> ./setup.sh
Problems!
Installing some server...
Installing some software...
Configuring it all...
Some people use dumb OSes without even a shell to run scripts
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Your MAC / Windows / Wathever is different from the production environment
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Unlikely all the software will work all in the same way in different computers
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Unlikely the software will be configured the same way in all the computers
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Requires special manteinance (different scripts for different OSes)
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Scenario 3
Mega README
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
The possibility that something goes wrong in a long installation are pretty high
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Heavy manteinance, time consuming, platform specific
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Problems
- Not repeatable
- Not verifiably correct
- Not isolated
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
"Vagrant is a tool for creating, managing and distributing portable development environments"
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
$ vagrant up :
VM creation, VM configuration, provisioning, all in one command!
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Repeatable
Correct
Isolated
Understandable
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Open Source.
Runs on Mac, Windows, Linux
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Using VirtualBox, VMWare, AWS, OpenStack...
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
One command for every project
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
You can replicate the same production environment
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Golden use case: You can use same provisioning (Puppet)
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
$ vagrant up
$ vagrant ssh
$ vagrant suspend
$ vagrant halt
$ vagrant destroy
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Once it's configured, the other developers don't need to know how it works
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
HOW IT WORKS
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Primitives
- Boxes
- Vagrantfile
- Provisioning script
- Vagrant CLI
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Boxes
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Vagrantfile
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Provisioning script
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Vagrant CLI
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
$ vagrant up
Reads the Vagrantfile
Builds virtual machine using the box template
Runs provisioning script
Synced folder (using API, NFS, rsync)
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Automated networking (NAT, host-only, bridged)
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Advanced provisioning (Chef, Puppet, etc.)
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Testing environments
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
MY SETUP
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
https://github.com/salvozappa/vagrant-lamp
Vagrantfile
bootstrap.sh
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
CONS
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Resource overhead
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Slow reprovisioning
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
"Docker is an open platform for developing, shipping, and running applications"
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
HOW IT WORKS
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Same advantages we saw before: repeatable, isolated, etc...
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Plus more portable: ready for deployment
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Lighter, faster:
less performance overhead
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Awesome with cloud computing
(eg. kubernetes)
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Cons: harder to understand
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
union file system, two networking layers, etc...
Primitives
- docker-machine
- docker-engine
- docker images
- many more...
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
docker-machine
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
MY SETUP
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Single command
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp python:3 python your-daemon-or-script.py
BEST PRACTICES
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Containers should be ephemeral
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Run only one process per container
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Avoid installing unnecessary packages
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Build cache
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Use VOLUME only for the mutable components
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
even better: don't use it at all
PROS
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Better performances
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Ready to deploy
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
CONS
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
More moving parts
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
CONCLUSIONS
What should I use?
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Vagrant is easier and simpler. Good for starters
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Use Vagrant for complex monolithic systems
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Use Vagrant when writing low level software
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
slides.com/salvozappa/vagrant-docker twitter: @salvozappa
Use Docker for pretty much anything else
Happy practicing!
slides.com/salvozappa/vagrant-docker
Follow me: @salvozappa
Vagrant, Docker
By salvozappa
Vagrant, Docker
Vagrant, Docker. What are them, how to use them, differences, tips.
- 696