jueves, 11 de junio de 2015

¿Qué es?


Vagrant: "es una herramienta para la creación y configuración de entornos de desarrollo virtualizados. Originalmente se desarrolló para VirtualBox y sistemas de configuración tales como Chef, Salt y Puppet. Vagrant es capaz de trabajar con múltiples proveedores, como VMware, Amazon EC2, LXC, DigitalOcean, etc. Aunque Vagrant se ha desarrollado en Ruby se puede usar en multitud de proyectos escritos en otros lenguajes, tales como PHP, Python, Java, C# y JavaScript" 1


Docker: "es un proyecto de código abierto que automatiza el despliegue de aplicaciones dentro de software de contenedores, proporcionando una capa adicional de abstracción y automatización de virtualización a nivel de sistema operativo de Linux. Docker utiliza características de aislamiento de recursos del kernel de Linux , tales como cgroups y espacios de nombres para permitir que "contenedores" independientes se ejecuten dentro de un solo caso de Linux, para evitar la sobrecarga de iniciar las máquinas virtuales cuando esa máquina virtual carece de la tecnología que se bifurcan máquina virtual" 2


1.http://es.wikipedia.org/wiki/Vagrant_(software)
2.http://en.wikipedia.org/wiki/Docker_(software)

¿Para qué sirve?




  • Vagrant:
  • Sirve para crear un entorno aislado (maquina virtual) de desarrollo como por ejemplo- LAMP (GNU/Linux); Apache; MySQL y PHP) y poder compartir con el equip de trabajo y así dejar a un lado los problemas de compatibilidad de Sistemas Operativos dependientes, entre otros.

  • Docker:
  • Sirve para ejecutar maquinas virtuales (emula) las cuales están conformadas por módulos. Uno de los principales objetivos es disminuir las infraestructuras de aplicaciones, en pocas palabras el usar o implementar Docker permite el distribuir esos contenedores entre otros desarrolladores, no importando el sistema operativo en uso, disminuye los tiempos de poder implementar.



¿Cuáles son sus características?

Características
Vagrant
Docker
Multiplataforma, funciona perfectamente tanto en Linux, MAC y Windows
Portabilidad.

El contenedor Docker podremos desplegarlo en cualquier otro sistema (que soporte esta tecnología), con lo que nos ahorraremos el tener que instalar en este nuevo entorno todas aquellas aplicaciones que normalmente usemos
Entornos genéricos de los proyectos que son replicables en cualquier sistema operativo, es decir, cualquier desarrollador con sus herramientas y sus costumbres podrá desarrollar sobre el mismo entorno que sus compañeros.
Ligereza.

El peso de este sistema no tiene comparación con cualquier otro sistema de virtualización más convencional que estemos acostumbrados a usar.
Automatización, esta característica es la principal. Su función es automatizar todo lo automatizable. Nos permite ahorrarnos mucho tiempo una vez que tengamos configurado el Vagranfile a nuestra medida.
Autosuficiencia.

Un contenedor Docker no contiene todo un sistema completo, sino únicamente aquellas librerías, archivos y configuraciones necesarias para desplegar las funcionalidades que contenga. Asimismo Docker se encarga de la gestión del contenedor y de las aplicaciones que contenga
Crear tu propia granja de servidores virtuales en un entorno local para el desarrollo del proyecto.
Autosuficiencia.

Además, su ligereza hará las delicias del usuario, puesto que incluso en equipos con algunos años a sus espaldas se desenvuelve prácticamente igual que el sistema anfitrión

¿Cuáles son los prerequisitos de instalación?

Prerrequisitos
Vagrant
Docker





  • Virtualbox 4.3.16 ó superior con el Oracle VM VirtualBox Extension Pack
  • Vagrant 1.6.5 ó superior

Windows o Mac
• Hace falta virtualizar
• Se usa boot2docker
– Es una distribución de Linux ligera: 24MB RAM con arranque en ~5s
Linux (Ubuntu):
• 64 bits
• Kernel 3.10 o superior
• Perfecto en 14.04 (Trusty)
  • https://docs.docker.com/installation/ubuntulinux/
  • https://docs.vagrantup.com/v2/getting-started/index.html

¿Cómo se instala?



Como se instala Vagrant en Linux
  1. Descargar la última versión de Virtual Box y Vagrant para el entorno de desarrollo que desea crear( GNU/ Linux, Windows, OS x)
  2. SI quieren hacerlo por consola seria de la siguiente manera:

  • Instalación de VirtualBox: $ Sudo apt-get install virtualbox
  • Instalación de Vagrant: $ Sudo apt-get install vagrant
Pasos para instalar Docker en Linux:


Antes que nada es necesario hacer una aclaración que se hara bajo entorno Linux, por ende es necesario que nuestra arquitectura sea de 64 bits (ya que hasta la fecha no soporta plataformas de 32 bits)
  1.  Comenzamos revisando nuestra versión del Kernel, ya que Docker funciona de una mejor manera en Kernel 3.8
  2. Como se muestra la versión de nuestro Kernel es 3.2, entonces nos disponemos a actualizarlo por medio del siguiente comando. sudo apt-get install linux-image-generic-lts-raing linux-headers-generic-Its-raring
  3. Una vez hecho esto, reiniciamos el sistema. $ sudo reboot
  4. Si queremos corroboramos que nuestro kernel este actualizado ejecutando nuevamente el comando uname –a
  5. Una vez actualizado, nos disponemos a agregar el repositorio de Docker y sus llaves de listas locales de fuentes y llavero local. sudo sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"

  6. Luego actualizamos la lista de fuentes y procedemos a instalar Docker con los siguientes comandos
  7. Luego de todo esto corroboramos que la instalación se ha hecho correctamente.

¿Cómo se configura?

Como se configura Vagrant:
  • Entrar a la terminal y ejecutar el comando Vagrant, para ver la lista de comandos
  • Crear un directorio donde guardaremos todos los archivos necesarios para crear la máquina virtual Mkdir  <Nombre del directorio>,ppo ejemplo $ mkdir Prueba_Vagrant
Como se configura Docker:
  • Después haber hecho la instalación, se debe de ejecutar el demonio de Docker (servicio en segundo plano), el cual tiene que estar listo para poder aceptar los comandos que se le envien,
  • Ejecutar el demonio Docker sudo docker -d &
  • Luego utilizamos la linea de comandos de Docker sudo docker [opción][comando][argumentos] Docker necesita privilegios de administrador

¿Cuáles son sus ventajas y desventajas?

Vagrant
Ventajas
Desventajas
Muy fácil de configurar
Hay que tener cuidado con utilizar puertos que ya estén en uso. (opción auto-correct)
Suele ser más que suficiente en la mayoría de caso.
Se aconseja utilizar puestos que estén por debajo del 1024, a excepción de que Vagrant se ejecute como usuario root, lo cual no es muy recomendado.
Muy seguro, ya que solo se exponen los puertos reenviados en la VM


Docker
Ventajas
Desventajas
Las instancias se inician en cuestión de segundos y son fácilmente replicables.
Se requiere Kernel 3.8 mínimo.
Consume menos recursos de hardware, y los que consume van exclusivamente a la aplicación
Debido al constante desarrollo, se podría dar el caso que unas versiones den error.
Es fácil de automatizar y de integrar.
Para Linux solo soporta arquitecturas de 64 bits.
Las imágenes e instancias suelen ocupar menos espacio que las máquinas virtuales.
Para Microsoft aún se encuentra en fase de prueba.
Existen miles de imágenes que pueden ser descargadas y modificadas libremente.
Característica
Docker
Vagrant
Tipo de virtualización
VE
VM
Recursos garantizados a nivel de hardware
No
Plataformas SO compatibles
Sólo para Linux
Linux, Unix, Windows
El tiempo de inicio de la máquina creada
Unos segundos
Unos minutos
Nivel de aislamiento para sistemas virtuales creados
Parcial
Completo
Peso de los sistemas virtuales creados
Muy ligero
Pesado, pero aún mejor que máquina virtual completa
Otras ventajas
Rápido, fácil de aprender
Integración con herramientas de CM

Algunos ejemplos de uso en la vida real


Vagrant:






Docker
Entrega Continua:
Spotify transmite música a más de 40 millones de usuarios en 57 países de todo el mundo.
"Docker está cambiando la forma en que desplegamos los servicios y ejecutamos nuestros centros de datos. Estamos acelerando nuestro proceso de entrega continua mediante el aprovechamiento de los contenedores Docker para pruebas y despliegue, y los equipos internos que han cambiado a Helios, nuestra plataforma con fuente y poder abierta, estamos experimentar aumentos de la productividad dentro de semanas de adopción” Simon Cohen, Spotify Team Lead


Integración Continua:
Servicio de Rackspace email (MailGun) que le permite enviar, recibir y realizar un seguimiento e-mails sin esfuerzo. Mailgun ha realizado importantes inversiones en la construcción de un sistema de integración continua Docker centrada por este servicio, donde la alta disponibilidad es un requisito


Fácil despliegue de aplicaciones:
eBay Ahora es, mismo servicio de entrega al día locales de eBay. En este caso de uso, Arquitecto Superior Ted Dziuba discute su uso de Docker en un proceso de integración continua. Utiliza Docker implementar un, camino automatizado eficiente de la computadora portátil de los desarrolladores a través de pruebas y control de calidad


Platform-as-a-Service (PaaS):
Baidu, Inc. es el proveedor número uno de búsqueda de Internet en idioma chino que tiene una amplia cartera de productos, incluyendo productos de redes sociales, los productos música, productos móviles y otros productos y servicios.
"Nos atrajo a Docker porque reemplaza sandboxing con contenerización. Docker ofrece un multi-idioma, ágil, y una solución rentable que proporciona a nuestros desarrolladores con la flexibilidad necesaria para soportar un número creciente de marcos y aplicaciones." Yifei Chen, Team Lead Baidu App Engine


https://www.vagrantup.com/
https://www.docker.com/resources/usecases/

¿Qué relación tiene con lo visto en la materia de Sistemas Operativos?



  • Tanto Vagrant como Docker se relacionan al tema de Virtualización, el cual consiste:  "en la creación (a través de software) de una versión virtual de algún recurso tecnológico, como puede ser una plataforma de hardware, un sistema operativo, un dispositivo de almacenamiento u otros recursos de red" 1
  • ¿Porque?
  • Porque cada uno de herramientas utilizadas emulan una plataforma virtual la cual les permite desarrollar los entornos virtuales o proporcionando una capa adicional de abstracción y automatización de virtualización a nivel de sistema operativo.

1. http://es.wikipedia.org/wiki/Virtualización