SlideShare ist ein Scribd-Unternehmen logo
1 von 18
Downloaden Sie, um offline zu lesen
VAGRANT
VIRTUALIZANDO ENTORNOS
     DE DESARROLLO




                  Daniel Vigueras
                  daniel@scalia.es
                  @danielvigueras
ESCENARIO 1
Desarrollador de varios proyectos con diferentes entornos conflictivos
entre sí




  Ruby 1.8         PHP 5.2                         Ruby 1.9                            PHP 5.3
  Rails 1.2        CodeIgniter                     Rails 3.2                           Vevui
  MySQL 4.1        MySQL 5.0                       MySQL 5.5                           MongoDB 2.2



                        Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
ESCENARIO 2

Equipo de desarrollo con diferentes sistemas operativos
XAMP, WAMP, MAMP, LAMP, Apache, Nginx...
Instalar librerías y servicios (Memcached, Redis, MongoDB, Sphinx...)




                        Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
SOLUCIÓN
¡ Usar máquinas virtuales para cada entorno de desarrollo !




                        Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
PROBLEMAS
¿Qué entorno de virtualización elijo?
   ¿VMWare? ¿VirtualBox? ¿KVM? ¿Xen?
¿Cómo creo una máquina virtual?
Me da pereza instalar un nuevo sistema operativo...
¿Cómo comparto el entorno con otras personas?
¿Y si quiero cambiar de entorno de virtualización ?




Usar herramienta independiente del entorno de virtualización que nos
oculte los detalles


                        Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
SOLUCIÓN: VAGRANT



Crear, iniciar, detener y eliminar VMs de manera sencilla
Escrito en ruby
Open source ( http://github.com/mitchellh/vagrant )
Actualmente sólo es capaz de controlar Oracle VM VirtualBox
En el futuro soportará cualquier entorno mediante plugins
Está siendo usado por varias empresas importantes



          « ¡¡ En mi ordenador funciona !! »

                        Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
OBTENER VAGRANT
Descargar e instalar Oracle VM VirtualBox de http://www.virtualbox.org (Última versión 4.2)
Descargar e instalar Vagrant de http://vagrantup.com (Última versión 1.0.4)
Mac (DMG), Linux (DEB, RPM), Windows (MSI)




                                Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
INICIO RÁPIDO (I)

Añadir una primera imagen como base

 $	
  vagrant	
  box	
  add	
  base	
  http://files.vagrantup.com/lucid32.box



Crear fichero de configuración inicial ( Vagrantfile )

 $	
  vagrant	
  init



Iniciar máquina virtual

 $	
  vagrant	
  up




                                Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
INICIO RÁPIDO (II)
Resultado de ejecución
 $	
  vagrant	
  box	
  add	
  base	
  http://files.vagrantup.com/lucid32.box
 [vagrant]	
  Downloading	
  with	
  Vagrant::Downloaders::HTTP...
 [vagrant]	
  Downloading	
  box:	
  http://files.vagrantup.com/lucid32.box
 [vagrant]	
  Extracting	
  box...
 [vagrant]	
  Verifying	
  box...
 [vagrant]	
  Cleaning	
  up	
  downloaded	
  box...

 $	
  vagrant	
  init
 A	
  `Vagrantfile`	
  has	
  been	
  placed	
  in	
  this	
  directory.	
  You	
  are	
  now
 ready	
  to	
  `vagrant	
  up`	
  your	
  first	
  virtual	
  environment!	
  Please	
  read
 the	
  comments	
  in	
  the	
  Vagrantfile	
  as	
  well	
  as	
  documentation	
  on
 `vagrantup.com`	
  for	
  more	
  information	
  on	
  using	
  Vagrant.
 $	
  vagrant	
  up
 [default]	
  VM	
  already	
  created.	
  Booting	
  if	
  it's	
  not	
  already	
  running...
 [default]	
  Clearing	
  any	
  previously	
  set	
  forwarded	
  ports...
 [default]	
  Forwarding	
  ports...
 [default]	
  -­‐-­‐	
  22	
  =>	
  2222	
  (adapter	
  1)
 [default]	
  Creating	
  shared	
  folders	
  metadata...
 [default]	
  Clearing	
  any	
  previously	
  set	
  network	
  interfaces...
 [default]	
  Booting	
  VM...
 [default]	
  Waiting	
  for	
  VM	
  to	
  boot.	
  This	
  can	
  take	
  a	
  few	
  minutes.
 [default]	
  VM	
  booted	
  and	
  ready	
  for	
  use!
 [default]	
  Mounting	
  shared	
  folders...
 [default]	
  -­‐-­‐	
  v-­‐root:	
  /vagrant
                                   Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
INICIO RÁPIDO (III)
Accediendo por SSH

 $	
  vagrant	
  ssh
 Linux	
  lucid32	
  2.6.32-­‐38-­‐generic	
  #83-­‐Ubuntu	
  SMP	
  Wed	
  Jan	
  4	
  11:13:04	
  UTC	
  
 2012	
  i686	
  GNU/Linux
 Ubuntu	
  10.04.4	
  LTS
 Welcome	
  to	
  Ubuntu!
 	
  *	
  Documentation:	
  	
  https://help.ubuntu.com/
 New	
  release	
  'precise'	
  available.
 Run	
  'do-­‐release-­‐upgrade'	
  to	
  upgrade	
  to	
  it.
 Welcome	
  to	
  your	
  Vagrant-­‐built	
  virtual	
  machine.
 Last	
  login:	
  Fri	
  Sep	
  14	
  07:26:29	
  2012	
  from	
  10.0.2.2
 vagrant@lucid32:~$	
  ifconfig	
  eth0|grep	
  inet
 	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  inet	
  addr:10.0.2.15	
  	
  Bcast:10.0.2.255	
  	
  Mask:255.255.255.0
 	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  inet6	
  addr:	
  fe80::a00:27ff:feb5:756c/64	
  Scope:Link
 vagrant@lucid32:~$	
  ping	
  -­‐c	
  1	
  www.google.es
 PING	
  www.google.es	
  (173.194.34.216)	
  56(84)	
  bytes	
  of	
  data.
 64	
  bytes	
  from	
  mad01s08-­‐in-­‐f24.1e100.net	
  (173.194.34.216):	
  icmp_seq=1	
  
 ttl=63	
  time=85.0	
  ms
 -­‐-­‐-­‐	
  www.google.es	
  ping	
  statistics	
  -­‐-­‐-­‐
 1	
  packets	
  transmitted,	
  1	
  received,	
  0%	
  packet	
  loss,	
  time	
  0ms
 rtt	
  min/avg/max/mdev	
  =	
  85.038/85.038/85.038/0.000	
  ms


                                        Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
INICIO RÁPIDO (IV)
Suspender, despertar, detener y destruir la VM

 $	
  vagrant	
  suspend
 [default]	
  Saving	
  VM	
  state	
  and	
  suspending	
  execution...
 $	
  vagrant	
  resume
 [default]	
  Resuming	
  suspended	
  VM...
 [default]	
  Booting	
  VM...
 [default]	
  Waiting	
  for	
  VM	
  to	
  boot.	
  This	
  can	
  take	
  a	
  few	
  minutes.
 [default]	
  VM	
  booted	
  and	
  ready	
  for	
  use!
 $	
  vagrant	
  halt
 [default]	
  Attempting	
  graceful	
  shutdown	
  of	
  VM...

 $	
  vagrant	
  destroy
 Are	
  you	
  sure	
  you	
  want	
  to	
  destroy	
  the	
  'default'	
  VM?	
  [Y/N]	
  Y
 [default]	
  Destroying	
  VM	
  and	
  associated	
  drives...




                                       Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
CONFIGURACIÓN

Elementos importantes del fichero Vagrantfile
Vagrant::Config.run	
  do	
  |config|
	
  	
  #	
  Alias	
  local	
  de	
  la	
  VM	
  base
	
  	
  config.vm.box	
  =	
  "base"

	
  	
  #	
  URL	
  de	
  dónde	
  descargar	
  la	
  VM	
  en	
  caso	
  de	
  no	
  tenerla
	
  	
  config.vm.box_url	
  =	
  "http://files.vagrantup.com/lucid32.box"

	
  	
  #	
  Tipo	
  de	
  arranque	
  (Podría	
  ser	
  :gui)
	
  	
  config.vm.boot_mode	
  =	
  :headless

	
  	
  #	
  Modo	
  de	
  red	
  (Podría	
  ser	
  :bridged)
	
  	
  config.vm.network	
  :hostonly,	
  "192.168.33.10"

	
  	
  #	
  Redirigir	
  puerto	
  8000	
  en	
  host	
  hacia	
  el	
  puerto	
  80	
  en	
  VM
	
  	
  config.vm.forward_port	
  80,	
  8000
	
  	
  #	
  Directorio	
  compartido
	
  	
  config.vm.share_folder("v-­‐root",	
  "/vagrant",	
  ".")
end
                                          Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
AUTOMATIZACIÓN (I)

Una VM vacía no nos sirve de mucho
Para empezar un proyecto necesitamos ciertas herramientas
A mitad del proyecto es muy probable que necesitemos más
Es necesario automatizar la instalación y configuración de software




                       Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
AUTOMATIZACIÓN (II)




Declarativo                                     Imperativo (ruby)
Clases y módulos                                Recetas
Maduro (2005)                                   Más reciente (2009)
Extendido                                       Menos extendido



                   Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
EJEMPLO CON PUPPET (I)
Vagrant::Config.run	
  do	
  |config|
	
  	
  #	
  Alias	
  local	
  de	
  la	
  VM	
  base
	
  	
  config.vm.box	
  =	
  "base"

	
  	
  #	
  URL	
  de	
  dónde	
  descargar	
  la	
  VM	
  en	
  caso	
  de	
  no	
  tenerla
	
  	
  config.vm.box_url	
  =	
  "http://files.vagrantup.com/lucid32.box"

	
  	
  #	
  Modo	
  de	
  red	
  (Podría	
  ser	
  :bridged)
	
  	
  config.vm.network	
  :hostonly,	
  "192.168.33.10"

	
  	
  #	
  Directorio	
  compartido
	
  	
  config.vm.share_folder("v-­‐root",	
  "/vagrant",	
  ".")
	
  	
  
	
  	
  #	
  Usar	
  puppet/ejemplo.pp	
  como	
  fichero	
  de	
  manifiesto	
  puppet
	
  	
  config.vm.provision	
  :puppet	
  do	
  |puppet|
	
  	
  	
  	
  puppet.manifests_path	
  =	
  "puppet"
	
  	
  	
  	
  puppet.manifest_file	
  =	
  "ejemplo.pp"
	
  	
  end
end


                                      Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
EJEMPLO CON PUPPET (II)
Contenido de puppet/ejemplo.pp


 exec	
  {"apt-­‐get-­‐update":"apt-­‐get-­‐update":
 	
  	
  	
  	
  creates	
  =>	
  "/tmp/apt-­‐get-­‐updated",
 	
  	
  	
  	
  command	
  =>	
  "/usr/bin/apt-­‐get	
  update	
  &&	
  /usr/bin/touch	
  /tmp/apt-­‐
 get-­‐updated"
 }

 package	
  {"apache2":
 	
  	
  	
  	
  ensure	
  =>	
  present,
 	
  	
  	
  	
  require	
  =>	
  Exec["apt-­‐get-­‐update"],
 }

 $php	
  =	
  ["php5-­‐cli",	
  "php5-­‐mysql",	
  "libapache2-­‐mod-­‐php5"]
 package	
  {	
  $php:
 	
  	
  	
  	
  ensure	
  =>	
  present,
 	
  	
  	
  	
  notify	
  =>	
  Service["apache2"],
 	
  	
  	
  	
  require	
  =>	
  Exec["apt-­‐get-­‐update"]
 }



                                       Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
EJEMPLO CON PUPPET (III)
Agregando soporte a MySQL
 $mysql	
  =	
  ["mysql-­‐server",	
  "mysql-­‐client"]
 package	
  {	
  $mysql:
 	
  	
  	
  	
  ensure	
  =>	
  present,
 	
  	
  	
  	
  require	
  =>	
  Exec["apt-­‐get-­‐update"]
 }

 file	
  {"/etc/mysql/my.cnf":
 	
   ensure	
   =>	
  file,
 	
   owner	
  =>	
  "root",
 	
   group	
  =>	
  "root",
 	
   mode	
   =>	
  644,
 	
   source	
   =>	
  "/vagrant/puppet/files/mysql/my.cnf",
 	
   require	
   =>	
  Package[$mysql],
 	
   notify	
   =>	
  Service["mysql"],
 }

 service	
  {"mysql":
 	
   enable	
   =>	
  true,
 	
   ensure	
   =>	
  running,
 	
   require	
   =>	
  Package[$mysql],
 }
                                    Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
RESUMEN



Vagrant es una herramienta muy potente

Réplica en desarrollo del entorno de producción

Si aún no la usas estás perdiendo tiempo y dinero...




                        Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

Weitere ähnliche Inhalte

Was ist angesagt?

Vagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de usoVagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de usoSergio Zambrano Delfa
 
Orquestadores para las cuatro estaciones (swarm, kubernetes, mesos y rancher)
Orquestadores para las cuatro estaciones (swarm, kubernetes, mesos y rancher)Orquestadores para las cuatro estaciones (swarm, kubernetes, mesos y rancher)
Orquestadores para las cuatro estaciones (swarm, kubernetes, mesos y rancher)Adrian Garcia Casas
 
Docker: la revolución en virtualización
Docker: la revolución en virtualizaciónDocker: la revolución en virtualización
Docker: la revolución en virtualizaciónMarcelo Ochoa
 
De desarrollo a producción usando docker
De desarrollo a producción usando dockerDe desarrollo a producción usando docker
De desarrollo a producción usando dockerChristian Rodriguez
 
Un recorrido por las herramientas de software libre que uso cada día, en los ...
Un recorrido por las herramientas de software libre que uso cada día, en los ...Un recorrido por las herramientas de software libre que uso cada día, en los ...
Un recorrido por las herramientas de software libre que uso cada día, en los ...Christian Rodriguez
 
Una introducción a vagrant
Una introducción a vagrantUna introducción a vagrant
Una introducción a vagrantLaura Gimenoide
 
Introducción a Docker
Introducción a DockerIntroducción a Docker
Introducción a DockerOpen Canarias
 
Presentación nubes de contenedores con docker swarm
Presentación nubes de contenedores con docker swarmPresentación nubes de contenedores con docker swarm
Presentación nubes de contenedores con docker swarmAlejandro Escanero Blanco
 
Docker - Sysmana 2014
Docker - Sysmana 2014Docker - Sysmana 2014
Docker - Sysmana 2014quaip
 
Dev ops infraestructura agil con open source
Dev ops   infraestructura agil con open sourceDev ops   infraestructura agil con open source
Dev ops infraestructura agil con open sourcescrumecuador
 
Sandbox para ejercicios de programación
Sandbox para ejercicios de programaciónSandbox para ejercicios de programación
Sandbox para ejercicios de programaciónMario Garcia-Valdez
 
Usando Django con Docker
Usando Django con DockerUsando Django con Docker
Usando Django con DockerErnesto Crespo
 
Java y sus caracteristicas
Java y sus caracteristicasJava y sus caracteristicas
Java y sus caracteristicasAny Saula
 
Orquestando Contenedores En La Nube - Enrique Tejeda - Sloth 2019
Orquestando Contenedores En La Nube - Enrique Tejeda - Sloth 2019Orquestando Contenedores En La Nube - Enrique Tejeda - Sloth 2019
Orquestando Contenedores En La Nube - Enrique Tejeda - Sloth 2019Luis Enrique Tejeda Rodriguez
 

Was ist angesagt? (20)

Introduccion A Docker
Introduccion A DockerIntroduccion A Docker
Introduccion A Docker
 
Vagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de usoVagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de uso
 
Vagrant
VagrantVagrant
Vagrant
 
Orquestadores para las cuatro estaciones (swarm, kubernetes, mesos y rancher)
Orquestadores para las cuatro estaciones (swarm, kubernetes, mesos y rancher)Orquestadores para las cuatro estaciones (swarm, kubernetes, mesos y rancher)
Orquestadores para las cuatro estaciones (swarm, kubernetes, mesos y rancher)
 
Docker: la revolución en virtualización
Docker: la revolución en virtualizaciónDocker: la revolución en virtualización
Docker: la revolución en virtualización
 
De desarrollo a producción usando docker
De desarrollo a producción usando dockerDe desarrollo a producción usando docker
De desarrollo a producción usando docker
 
Un recorrido por las herramientas de software libre que uso cada día, en los ...
Un recorrido por las herramientas de software libre que uso cada día, en los ...Un recorrido por las herramientas de software libre que uso cada día, en los ...
Un recorrido por las herramientas de software libre que uso cada día, en los ...
 
Una introducción a vagrant
Una introducción a vagrantUna introducción a vagrant
Una introducción a vagrant
 
Introducción a Docker
Introducción a DockerIntroducción a Docker
Introducción a Docker
 
Gestionando servidores con Puppet
Gestionando servidores con PuppetGestionando servidores con Puppet
Gestionando servidores con Puppet
 
Presentación nubes de contenedores con docker swarm
Presentación nubes de contenedores con docker swarmPresentación nubes de contenedores con docker swarm
Presentación nubes de contenedores con docker swarm
 
Docker - Sysmana 2014
Docker - Sysmana 2014Docker - Sysmana 2014
Docker - Sysmana 2014
 
FROM lost to the docker
FROM lost to the dockerFROM lost to the docker
FROM lost to the docker
 
Virtualenv y buildout
Virtualenv y buildoutVirtualenv y buildout
Virtualenv y buildout
 
Docker y PostgreSQL
Docker y PostgreSQLDocker y PostgreSQL
Docker y PostgreSQL
 
Dev ops infraestructura agil con open source
Dev ops   infraestructura agil con open sourceDev ops   infraestructura agil con open source
Dev ops infraestructura agil con open source
 
Sandbox para ejercicios de programación
Sandbox para ejercicios de programaciónSandbox para ejercicios de programación
Sandbox para ejercicios de programación
 
Usando Django con Docker
Usando Django con DockerUsando Django con Docker
Usando Django con Docker
 
Java y sus caracteristicas
Java y sus caracteristicasJava y sus caracteristicas
Java y sus caracteristicas
 
Orquestando Contenedores En La Nube - Enrique Tejeda - Sloth 2019
Orquestando Contenedores En La Nube - Enrique Tejeda - Sloth 2019Orquestando Contenedores En La Nube - Enrique Tejeda - Sloth 2019
Orquestando Contenedores En La Nube - Enrique Tejeda - Sloth 2019
 

Ähnlich wie Vagrant: virtualizando entornos de desarrollo

Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]Keopx
 
Curso Kubernetes CodeURJC
Curso Kubernetes CodeURJCCurso Kubernetes CodeURJC
Curso Kubernetes CodeURJCMicael Gallego
 
Oracle VM VirtualBox Hacked
Oracle VM VirtualBox HackedOracle VM VirtualBox Hacked
Oracle VM VirtualBox HackedV. Javierf Fdez
 
Entornos de desarrollo portables, reproducibles y ligeros
Entornos de desarrollo portables, reproducibles y ligerosEntornos de desarrollo portables, reproducibles y ligeros
Entornos de desarrollo portables, reproducibles y ligerosbetabeers
 
03 de Marzo 2015: Andrés Villarreal - Herramientas del Desarrollador Moderno
03 de Marzo 2015: Andrés Villarreal - Herramientas del Desarrollador Moderno03 de Marzo 2015: Andrés Villarreal - Herramientas del Desarrollador Moderno
03 de Marzo 2015: Andrés Villarreal - Herramientas del Desarrollador Modernowpargentina
 
Ponencia virtualización sl alejandro vázquez 2
Ponencia virtualización sl alejandro vázquez 2Ponencia virtualización sl alejandro vázquez 2
Ponencia virtualización sl alejandro vázquez 2José Vázquez
 
Ponencia virtualización sl alejandro vázquez 2
Ponencia virtualización sl alejandro vázquez 2Ponencia virtualización sl alejandro vázquez 2
Ponencia virtualización sl alejandro vázquez 2José Vázquez
 
Cuckoo sandbox
Cuckoo sandboxCuckoo sandbox
Cuckoo sandboxTensor
 
Cuckoosandbox
CuckoosandboxCuckoosandbox
CuckoosandboxTensor
 
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARLa Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARPablo Godel
 
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - QuaipWordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaipquaip
 
Cuckoo sandbox
Cuckoo sandboxCuckoo sandbox
Cuckoo sandboxTensor
 
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...Micael Gallego
 

Ähnlich wie Vagrant: virtualizando entornos de desarrollo (20)

Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
 
Curso Kubernetes CodeURJC
Curso Kubernetes CodeURJCCurso Kubernetes CodeURJC
Curso Kubernetes CodeURJC
 
Oracle VM VirtualBox Hacked
Oracle VM VirtualBox HackedOracle VM VirtualBox Hacked
Oracle VM VirtualBox Hacked
 
Exprime al máximo la capacidad de tus servidores gracias a la virtualización ...
Exprime al máximo la capacidad de tus servidores gracias a la virtualización ...Exprime al máximo la capacidad de tus servidores gracias a la virtualización ...
Exprime al máximo la capacidad de tus servidores gracias a la virtualización ...
 
Entornos de desarrollo portables, reproducibles y ligeros
Entornos de desarrollo portables, reproducibles y ligerosEntornos de desarrollo portables, reproducibles y ligeros
Entornos de desarrollo portables, reproducibles y ligeros
 
VIRTUALBOX
VIRTUALBOX VIRTUALBOX
VIRTUALBOX
 
Jug málaga docker 101 - final
Jug málaga   docker 101 - finalJug málaga   docker 101 - final
Jug málaga docker 101 - final
 
03 de Marzo 2015: Andrés Villarreal - Herramientas del Desarrollador Moderno
03 de Marzo 2015: Andrés Villarreal - Herramientas del Desarrollador Moderno03 de Marzo 2015: Andrés Villarreal - Herramientas del Desarrollador Moderno
03 de Marzo 2015: Andrés Villarreal - Herramientas del Desarrollador Moderno
 
Ponencia virtualización sl alejandro vázquez 2
Ponencia virtualización sl alejandro vázquez 2Ponencia virtualización sl alejandro vázquez 2
Ponencia virtualización sl alejandro vázquez 2
 
Ponencia virtualización sl alejandro vázquez 2
Ponencia virtualización sl alejandro vázquez 2Ponencia virtualización sl alejandro vázquez 2
Ponencia virtualización sl alejandro vázquez 2
 
Docker
DockerDocker
Docker
 
Cuckoo sandbox
Cuckoo sandboxCuckoo sandbox
Cuckoo sandbox
 
Drupal 8, de cero a producción en minutos.
Drupal 8, de cero a producción en minutos.Drupal 8, de cero a producción en minutos.
Drupal 8, de cero a producción en minutos.
 
Cuckoosandbox
CuckoosandboxCuckoosandbox
Cuckoosandbox
 
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARLa Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
 
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - QuaipWordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
 
Cuckoo sandbox
Cuckoo sandboxCuckoo sandbox
Cuckoo sandbox
 
Docker desde cero
Docker desde ceroDocker desde cero
Docker desde cero
 
Meetup V.E.No.M. y docker
Meetup V.E.No.M. y dockerMeetup V.E.No.M. y docker
Meetup V.E.No.M. y docker
 
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
 

Kürzlich hochgeladen

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 

Kürzlich hochgeladen (13)

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 

Vagrant: virtualizando entornos de desarrollo

  • 1. VAGRANT VIRTUALIZANDO ENTORNOS DE DESARROLLO Daniel Vigueras daniel@scalia.es @danielvigueras
  • 2. ESCENARIO 1 Desarrollador de varios proyectos con diferentes entornos conflictivos entre sí Ruby 1.8 PHP 5.2 Ruby 1.9 PHP 5.3 Rails 1.2 CodeIgniter Rails 3.2 Vevui MySQL 4.1 MySQL 5.0 MySQL 5.5 MongoDB 2.2 Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  • 3. ESCENARIO 2 Equipo de desarrollo con diferentes sistemas operativos XAMP, WAMP, MAMP, LAMP, Apache, Nginx... Instalar librerías y servicios (Memcached, Redis, MongoDB, Sphinx...) Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  • 4. SOLUCIÓN ¡ Usar máquinas virtuales para cada entorno de desarrollo ! Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  • 5. PROBLEMAS ¿Qué entorno de virtualización elijo? ¿VMWare? ¿VirtualBox? ¿KVM? ¿Xen? ¿Cómo creo una máquina virtual? Me da pereza instalar un nuevo sistema operativo... ¿Cómo comparto el entorno con otras personas? ¿Y si quiero cambiar de entorno de virtualización ? Usar herramienta independiente del entorno de virtualización que nos oculte los detalles Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  • 6. SOLUCIÓN: VAGRANT Crear, iniciar, detener y eliminar VMs de manera sencilla Escrito en ruby Open source ( http://github.com/mitchellh/vagrant ) Actualmente sólo es capaz de controlar Oracle VM VirtualBox En el futuro soportará cualquier entorno mediante plugins Está siendo usado por varias empresas importantes « ¡¡ En mi ordenador funciona !! » Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  • 7. OBTENER VAGRANT Descargar e instalar Oracle VM VirtualBox de http://www.virtualbox.org (Última versión 4.2) Descargar e instalar Vagrant de http://vagrantup.com (Última versión 1.0.4) Mac (DMG), Linux (DEB, RPM), Windows (MSI) Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  • 8. INICIO RÁPIDO (I) Añadir una primera imagen como base $  vagrant  box  add  base  http://files.vagrantup.com/lucid32.box Crear fichero de configuración inicial ( Vagrantfile ) $  vagrant  init Iniciar máquina virtual $  vagrant  up Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  • 9. INICIO RÁPIDO (II) Resultado de ejecución $  vagrant  box  add  base  http://files.vagrantup.com/lucid32.box [vagrant]  Downloading  with  Vagrant::Downloaders::HTTP... [vagrant]  Downloading  box:  http://files.vagrantup.com/lucid32.box [vagrant]  Extracting  box... [vagrant]  Verifying  box... [vagrant]  Cleaning  up  downloaded  box... $  vagrant  init A  `Vagrantfile`  has  been  placed  in  this  directory.  You  are  now ready  to  `vagrant  up`  your  first  virtual  environment!  Please  read the  comments  in  the  Vagrantfile  as  well  as  documentation  on `vagrantup.com`  for  more  information  on  using  Vagrant. $  vagrant  up [default]  VM  already  created.  Booting  if  it's  not  already  running... [default]  Clearing  any  previously  set  forwarded  ports... [default]  Forwarding  ports... [default]  -­‐-­‐  22  =>  2222  (adapter  1) [default]  Creating  shared  folders  metadata... [default]  Clearing  any  previously  set  network  interfaces... [default]  Booting  VM... [default]  Waiting  for  VM  to  boot.  This  can  take  a  few  minutes. [default]  VM  booted  and  ready  for  use! [default]  Mounting  shared  folders... [default]  -­‐-­‐  v-­‐root:  /vagrant Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  • 10. INICIO RÁPIDO (III) Accediendo por SSH $  vagrant  ssh Linux  lucid32  2.6.32-­‐38-­‐generic  #83-­‐Ubuntu  SMP  Wed  Jan  4  11:13:04  UTC   2012  i686  GNU/Linux Ubuntu  10.04.4  LTS Welcome  to  Ubuntu!  *  Documentation:    https://help.ubuntu.com/ New  release  'precise'  available. Run  'do-­‐release-­‐upgrade'  to  upgrade  to  it. Welcome  to  your  Vagrant-­‐built  virtual  machine. Last  login:  Fri  Sep  14  07:26:29  2012  from  10.0.2.2 vagrant@lucid32:~$  ifconfig  eth0|grep  inet                    inet  addr:10.0.2.15    Bcast:10.0.2.255    Mask:255.255.255.0                    inet6  addr:  fe80::a00:27ff:feb5:756c/64  Scope:Link vagrant@lucid32:~$  ping  -­‐c  1  www.google.es PING  www.google.es  (173.194.34.216)  56(84)  bytes  of  data. 64  bytes  from  mad01s08-­‐in-­‐f24.1e100.net  (173.194.34.216):  icmp_seq=1   ttl=63  time=85.0  ms -­‐-­‐-­‐  www.google.es  ping  statistics  -­‐-­‐-­‐ 1  packets  transmitted,  1  received,  0%  packet  loss,  time  0ms rtt  min/avg/max/mdev  =  85.038/85.038/85.038/0.000  ms Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  • 11. INICIO RÁPIDO (IV) Suspender, despertar, detener y destruir la VM $  vagrant  suspend [default]  Saving  VM  state  and  suspending  execution... $  vagrant  resume [default]  Resuming  suspended  VM... [default]  Booting  VM... [default]  Waiting  for  VM  to  boot.  This  can  take  a  few  minutes. [default]  VM  booted  and  ready  for  use! $  vagrant  halt [default]  Attempting  graceful  shutdown  of  VM... $  vagrant  destroy Are  you  sure  you  want  to  destroy  the  'default'  VM?  [Y/N]  Y [default]  Destroying  VM  and  associated  drives... Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  • 12. CONFIGURACIÓN Elementos importantes del fichero Vagrantfile Vagrant::Config.run  do  |config|    #  Alias  local  de  la  VM  base    config.vm.box  =  "base"    #  URL  de  dónde  descargar  la  VM  en  caso  de  no  tenerla    config.vm.box_url  =  "http://files.vagrantup.com/lucid32.box"    #  Tipo  de  arranque  (Podría  ser  :gui)    config.vm.boot_mode  =  :headless    #  Modo  de  red  (Podría  ser  :bridged)    config.vm.network  :hostonly,  "192.168.33.10"    #  Redirigir  puerto  8000  en  host  hacia  el  puerto  80  en  VM    config.vm.forward_port  80,  8000    #  Directorio  compartido    config.vm.share_folder("v-­‐root",  "/vagrant",  ".") end Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  • 13. AUTOMATIZACIÓN (I) Una VM vacía no nos sirve de mucho Para empezar un proyecto necesitamos ciertas herramientas A mitad del proyecto es muy probable que necesitemos más Es necesario automatizar la instalación y configuración de software Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  • 14. AUTOMATIZACIÓN (II) Declarativo Imperativo (ruby) Clases y módulos Recetas Maduro (2005) Más reciente (2009) Extendido Menos extendido Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  • 15. EJEMPLO CON PUPPET (I) Vagrant::Config.run  do  |config|    #  Alias  local  de  la  VM  base    config.vm.box  =  "base"    #  URL  de  dónde  descargar  la  VM  en  caso  de  no  tenerla    config.vm.box_url  =  "http://files.vagrantup.com/lucid32.box"    #  Modo  de  red  (Podría  ser  :bridged)    config.vm.network  :hostonly,  "192.168.33.10"    #  Directorio  compartido    config.vm.share_folder("v-­‐root",  "/vagrant",  ".")        #  Usar  puppet/ejemplo.pp  como  fichero  de  manifiesto  puppet    config.vm.provision  :puppet  do  |puppet|        puppet.manifests_path  =  "puppet"        puppet.manifest_file  =  "ejemplo.pp"    end end Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  • 16. EJEMPLO CON PUPPET (II) Contenido de puppet/ejemplo.pp exec  {"apt-­‐get-­‐update":"apt-­‐get-­‐update":        creates  =>  "/tmp/apt-­‐get-­‐updated",        command  =>  "/usr/bin/apt-­‐get  update  &&  /usr/bin/touch  /tmp/apt-­‐ get-­‐updated" } package  {"apache2":        ensure  =>  present,        require  =>  Exec["apt-­‐get-­‐update"], } $php  =  ["php5-­‐cli",  "php5-­‐mysql",  "libapache2-­‐mod-­‐php5"] package  {  $php:        ensure  =>  present,        notify  =>  Service["apache2"],        require  =>  Exec["apt-­‐get-­‐update"] } Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  • 17. EJEMPLO CON PUPPET (III) Agregando soporte a MySQL $mysql  =  ["mysql-­‐server",  "mysql-­‐client"] package  {  $mysql:        ensure  =>  present,        require  =>  Exec["apt-­‐get-­‐update"] } file  {"/etc/mysql/my.cnf":   ensure   =>  file,   owner  =>  "root",   group  =>  "root",   mode   =>  644,   source   =>  "/vagrant/puppet/files/mysql/my.cnf",   require   =>  Package[$mysql],   notify   =>  Service["mysql"], } service  {"mysql":   enable   =>  true,   ensure   =>  running,   require   =>  Package[$mysql], } Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  • 18. RESUMEN Vagrant es una herramienta muy potente Réplica en desarrollo del entorno de producción Si aún no la usas estás perdiendo tiempo y dinero... Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras