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