En Informática, la virtualización es 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. En los ámbitos de habla inglesa, este término se suele conocer por el numerónimo "v12n".
Dicho de otra manera, se refiere a la abstracción de los recursos de una computadora, llamada Hypervisor o VMM (Virtual Machine Monitor) que crea una capa de abstracción entre el hardware de la máquina física (host) y el sistema operativo de la máquina virtual (virtual machine, guest), dividiéndose el recurso en uno o más entornos de ejecución.
Esta capa de software (VMM) maneja, gestiona y arbitra los cuatro recursos principales de una computadora (CPU, Memoria, Dispositivos Periféricos y Conexiones de Red). Así podrá repartir dinámicamente estos recursos entre todas las máquinas virtuales definidas en el computador central. Esto hace que se puedan tener varios ordenadores virtuales ejecutándose en el mismo ordenador físico. Wikipedia
Problemas
- Menos rendimiento ya que todo es virtualizado
- Las maquinas en ocasiones deben ser especializadas
- Es necesario conocer el manejo de la virtualización
Ventajas
- Menos costes ya que tienes menos servidores físicos
- Menos costes porque reduces los tiempos de inactividad de las máquinas
- Permite hacer backups constantes
- Es más facil recuperar los sistemas
Sin vitualizar
Con virtualización
Recursos
Recursos
- vagrantup.com
- Vagrant | Intro
- Vagrant | Docs
- Wikipedia | Vagrant
- Vagrant in 5 minutes
- Introducción a Vagrant
- What is Vagrant?
- Github | hashicorp/vagrant
- Docker vs Vagrant
Recursos
- Wikipedia | VMware
- vmware.com
- ¿Qué es Vmware vSphere?
- VMware Cloud on AWS
- Soluciones IBM Cloud for VMware
Recursos
- Wikipedia | Virtualbox
- VirtualBox.org
- VirtualBox.org | End-user documentation
- VirtualBox.org | Technical documentation
- VirtualBox.org | Community
- Oracle | Desarrollo mediante VM Virtual Box, despliegue en cualquier parte
La idea
Un contenedor
Recursos
- Máquinas Virtuales vs Contenedores, ¿Qué son y cómo elegir entre estas tecnologías?
- Microsoft | Introducción a Containers y Docker
- Los beneficios de utilizar Docker y contenedores a la hora de programar
- Para qué sirven los contenedores en software
- AWS | ¿Qué es un contenedor?
- Docker vs Máquinas Virtuales: ¿qué es mejor?
Filosofía
- Build
- Ship
- Run
Estados
Docker en Resumen
Docker resumen detallado de comandos
Recursos
- Introducción a Docker para principiantes
- AWS | ¿Qué es Docker?
- ¿Qué es Docker? ¿Para qué se utiliza? Explicado de forma sencilla
- Wikipedia | Docker
- Docker
- Docker | What?
- Docker | Docs
- Red Hat | ¿Qué es DOCKER?
- What is Docker?
- What is Docker and why is it so darn popular?
- Living in a Docker world
- Github | veggiemonk/awesome-docker
- Para los que empiezan: crear y ejecutar una imagen propia en un contenedor Docker
- Necesitas bajarte Docker e instalarlo en la máquina
- Generas tu aplicación normalmente, pero usas variables de entorno como
process.ENV.PORT
en tuconfig.js
- Necesitas generar una imagen de docker y para ello necesitas generar un
Dockerfile
FROM node:8 # Create app directory WORKDIR /usr/src/app # Install app dependencies # A wildcard is used to ensure both package.json AND package-lock.json are copied # where available (npm@5+) COPY package*.json ./ RUN npm install # If you are building your code for production # RUN npm ci --only=production # Bundle app source COPY . . EXPOSE 8080 CMD [ "npm", "start" ]
- Docker Build:
$ docker build -t <your username>/node-web-app .
- Verificar que esta creada...
docker images
- Dcoker Run:
$ docker run -p 49160:8080 -d <your username>/node-web-app
- Identificar el container
$ docker ps
- Saca los mensajes de consola
$ docker logs <container id>
- Entra en el contenedor
$ docker exec -it <container id> /bin/bash
- Verifica que funciona y chequea el puerto
$ docker ps
- Verifica que el puerto esta expuesto
$ curl -i localhost:49160
Recursos
Kubernetes (k8s) is an open-source system for automating deployment, scaling, and management of containerized applications.
Funcionalidades
- Service discovery and load balancing
- Storage orchestration
- Automated rollouts and rollbacks
- Batch execution
- Automatic binpacking
- Self-healing
- Secret and configuration management
- Horizontal scaling
Diseño
- Cápsulas(Pods)
- Etiquetas y selectores
- Controladores
- Servicios
Módulos básicos
- Creación de un clúster de Kubernetes
- Despliegue de una aplicación
- Exploración de aplicaciones
- Mantenimiento de Pods
- Ampliación de aplicaciones
- Actualización de aplicaciones
Arquitectura
- etcd
- Servidor de API
- Planificador
- Administrador del controlador
- Nodo Kubernetes
- Kubelet
- Kube-Proxy
- cAdvisor
Ecosistema
Arquitectura en detalles
Recursos
- Wikipedia | Kubernetes
- Wired | Google Open Sources Its Secret Weapon in Cloud Computing
- Why Red Hat Chose Kubernetes for OpenShift
- Kubernetes
- Kubernetes | Docs
- Kubernetes | Blog
- Paradigma | Por qué todos apuestan por Kubernetes
- Kubernetes for dummies. Explicado en 10 minutos
- FCC | Learn Kubernetes in Under 3 Hours: A Detailed Guide to Orchestrating Containers
- Kubernetes in 5 mins
- Github | kubernetes/kubernetes
- Github | ramitsurana/awesome-kubernetes
Recursos
- A Guide to Automating & Scraping the Web with JavaScript (Chrome + Puppeteer + Node JS)
- Carmen Bourlon | OKC.js | Web Scraping With NodeJS and Puppeteer| Charla
- Carmen Bourlon | OKC.js | Web Scraping With NodeJS and Puppeteer| Slides
- Web Scraping with Node.js & Puppeteer (🌋 rants included, no extra charge)
- Web Scraping with Puppeteer, NodeJS & Shopify
- An Introduction to Web Scraping with Puppeteer
- Getting started with Puppeteer and Chrome Headless for Web Scraping
- Web Scraping with Puppeteer and NodeJS
- Scraping with Puppeteer
Tomar una captura de pantalla de una web
const puppeteer = require('puppeteer');
async function getPic(url) {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setViewport({width: 1000, height: 500}) // Que tamaño?
await page.goto(url);
await page.screenshot({path: `${url}-${new Date().getTime()}.png`});
await browser.close();
}
getPic("https://fictizia.com");
Generemos un PDF
//@see: https://github.com/GoogleChrome/puppeteer/blob/master/examples/pdf.js
const puppeteer = require('puppeteer');
(async() => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://news.ycombinator.com', {waitUntil: 'networkidle2'});
// page.pdf() is currently supported only in headless mode.
// @see https://bugs.chromium.org/p/chromium/issues/detail?id=753118
await page.pdf({
path: 'hn.pdf',
format: 'letter'
});
await browser.close();
})();
¡Automaticemos cosas!
//@see: https://github.com/checkly/puppeteer-examples/blob/master/3.%20login/github.js
const puppeteer = require('puppeteer')
const screenshot = 'github.png';
(async () => {
const browser = await puppeteer.launch({headless: true})
const page = await browser.newPage()
await page.goto('https://github.com/login')
await page.type('#login_field', process.env.GITHUB_USER)
await page.type('#password', process.env.GITHUB_PWD)
await page.click('[name="commit"]')
await page.waitForNavigation()
await page.screenshot({ path: screenshot })
browser.close()
console.log('See screenshot: ' + screenshot)
})()
¡Hagamos scraping!
// Finds accommodations in Berlin on Booking.com, takes a screenshot and logs the top 10.
// @see: https://github.com/checkly/puppeteer-examples/blob/master/2.%20search/booking.js
const puppeteer = require('puppeteer')
const screenshot = 'booking_results.png'
try {
(async () => {
const browser = await puppeteer.launch()
const page = await browser.newPage()
await page.goto('https://booking.com')
await page.type('#ss', 'Berlin')
await page.click('.sb-searchbox__button')
await page.waitForSelector('#hotellist_inner')
await page.screenshot({ path: screenshot })
const hotels = await page.$$eval('span.sr-hotel__name', anchors => {
return anchors.map(anchor => anchor.textContent.trim()).slice(0, 10)
})
console.log(hotels)
await browser.close()
console.log('See screenshot: ' + screenshot)
})()
} catch (err) {
console.error(err)
}
Más ejemplos
- Scrapper Básico de Github Issues con puppeteer #86
- Scraper tareas de un usuario en Github #87
- OSWeekends/peluditos-project: Ejemplo rápido para scrapear Adopta Madrid #7
- Slack Report Feature | vanity.osweekends.com
Recursos