3. Máquinas virtuales y VPS

3.1. Introducción

  • Las máquinas virtuales permiten usar un sistema operativo dentro de otro (por ejemplo, permiten utilizar un sistema Linux dentro de Windows). Además, la máquina virtual es independiente del sistema “anfitrión” lo que consigue que se pueda interactuar con ella sin riesgo para el ordenador. Las máquinas virtuales suelen utilizarse principalmente en entornos de desarrollo, para programar sin usar el servidor hasta que se considere que el programa está en condiciones para trasladarlo al entorno de producción.
  • Existen varios programas que crean máquinas virtuales, los principales son VirtualBox y VMWare.
  • Por otro lado, se pueden contratar servidores compartidos o dedicados para albergar la página web.

3.2. Máquinas virtuales propias

3.2.1. Oracle VirtualBox

  • Es un programa gratuito propiedad de Oracle.
  • Configuración en la interfaz gráfica
    • Clonar una máquina virtual: Máquina → Clonar
    • Modificar la capacidad de un disco: Archivo → Administración de medios virtuales (sólo para aumentar la capacidad)
    • Instalar las Guest Additions, que permiten mayor compatibilidad con el sistema virtual: Dispositivos → Instalar las Guest Additions. Si se instalan descargando directamente el .iso desde Internet, puede que se necesiten los programas dkms y bzip2.
    • Instalar un sistema con UEFI puede dar problemas.
  • VBoxManage (línea de comandos)
    • VBoxManage createvm
    • VBoxManage startvm
    • VBoxManage controlvm
    • VBoxManage list vms
    • VboxManage list hdds
    • VBoxManage modifyvm
    • VboxManage createmedium
    • VboxManage modifymedium <UUID disco> --resize <megabytes> (sólo para aumentar capacidad)
    • VBoxManage.exe modifymedium <UUID disco> --compact (compacta el disco reduciendo el espacio no usado, sobreescrito con ceros. Se puede usar el programa zerofree en Linux o ‘SDelete’ en Windows)
    • VboxManage internalcommands sethduuid “direccion/disco/virtual.vdi”(cambia el UUID de un disco virtual)
    • VBoxManage natnetwork add --netname nombrered --network "192.168.15.0/24" –-enable (añade una red virtual, después hay que modificar el apartado “Red” de la máquina a “Red NAT”)

3.2.2.1. Complementos

  • Vagrant
    • Simplifica la creación de máquinas virtuales y la conexión a ellas. Se utiliza a través de la línea de comandos
    • Instrucciones básicas de uso (una vez instalado):
      1. Se crea una carpeta en la que se ejecutará la máquina virtual
      2. En esa carpeta, ejecuta vagrant init
      3. vagrant box add nombre/caja
      4. Editar vagrantfile para que ejecute la máquina deseada
      5. vagrant up (para encender la máquina)
      6. vagrant ssh
      7. vagrant halt (para apagar la máquina)
      8. vagrant destroy (elimina la máquina)
      9. vagrant box remove nombre/caja
      10. El usuario y contraseña por defecto de los sistemas es “vagrant”
  • VboxVMService
    • Permite iniciar las máquinas virtuales al mismo tiempo que se inicia el sistema anfitrión, así como poder encenderlas y apagarlas desde la barra de tareas
    • Instrucciones de uso:
      1. Editar VboxVmService.ini
      2. Ejecutar como administrador en la carpeta vms:
        • VmServiceControl.exe -u (si ya se había creado el servicio antes)
        • VmServiceControl.exe -i (para crear el servicio)
      3. Reiniciar

3.2.2. VMware Workstation Player

3.2.3. QEMU

  • Programa gratuito que se usa sobre todo en Linux
    1. Instalación (en Ubuntu)
      sudo apt-get install qemu
    2. Crear una unidad de disco (“raw” para archivos “img”, ocupa en el anfitrión el espacio máximo indicado, “qcow2” ocupa en el anfitrión solo lo que ocupe realmente el disco de la máquina)
      quemu-img create -f raw [qcow2] linux.img[qcow2] 20G
    3. Iniciar la máquina virtual
      quemu-system-[] -cdrom ubuntu.iso -cpu quemu32 -m 512 linux.img
    4. Opciones:
      1. -nographic -vnc :0: deriva la salida gráfica a un servidor vnc.
      2. -show-cursor -usb -device usb-host,hostbus=<host>,hostaddr=<device>
      3. -fda <<archivo disquete>>
      4. -smp <<número núcleos>>
      5. -monitor stdio: permite hacer varias operaciones desde la ventana de linea de comandos.
        1. (qemu) change floppy0 <<imagen>>: cambia el disco en caliente.
        2. (qemu) eject floppy0: expulsa el disco
      6. -boot [a, c, d]: indica el medio de arranque.
      7. -machine accel=kvm

3.2.4. Docker

  • Permite crear contenedores donde una aplicación puede correr sin afectar al resto del sistema.
  • Tiene una versión gratuita (Community Edition) y otra empresarial.
  • En Windows, sólo está disponible para Windows 10 Pro (64 bit), con Hyper-V disponible.
  • Existen versiones para Ubuntu, CentOS, etc.
  • Instalación en Ubuntu: https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce
  • En Amazon Linux se instala directamente: sudo yum amazon-linux-extras install docker
  • Al principio, se requiere de sudo para usar Docker, para cambiarlo:
    • Comprobar si existe un grupo docker, crearlo si no es así.
    • Incluir al usuario en el grupo:
    • sudo usermod -aG docker $USER
    • Salir de la sesión y volver a entrar.
  • Instalación de docker-compose
  • Comandos:
    • docker pull <<imagen>>: Descarga una imagen
    • docker save -o archivo.tar <<imagen>>
    • docker load -i archivo.tar
    • docker run [opciones] <<imagen>>: Crea un contenedor a partir de una imagen
      • -d (ejecuta el contenedor de fondo, en modo "detached")
      • -it (ejecuta el terminal "shell" del contenedor una vez creado)
      • --rm (elimina el contenedor una vez se termina de ejecutar)
      • --network=host (habilita conexión a Internet a través del anfitrión)
      • -v volumen:ruta_contenedor (crea o utiliza un "volumen" para utilizar datos de forma persistente en el contenedor Si se introduce una ruta del anfitrión, copiará su contenido al contenedor de forma sincronizada y las opciones sobre volúmenes no funcionarán)
      • --mount (otro sistema para añadir volúmenes)
    • docker build -t tag <<ruta_dockerfile>>: Crea una imagen a partir de las instrucciones de un archivo llamado Dockerfile.
    • docker ps: Muestra contenedores encendidos.
      • --all (muestra todos los contenedores)
    • docker commit <<contenedor>> nuevaimagen
    • docker container [opciones] <<contenedor>>
      • start/stop/restart
      • rm
      • ls
      • attach
    • docker cp
    • docker start/stop
    • docker rm <<contenedor>>: Similar a docker container rm
    • docker rm $(docker ps -a -q) (borra todos los contenedores)
    • docker image [opciones] <<imagen>>
      • ls
      • rm (admite varias imágenes)
    • docker volume [opciones] <<volumen>>
      • ls
      • prune (elimina volúmenes sin contenedor)
      • rm (admite varios volúmenes.)
    • docker network ls
    • docker exec [opciones] <<contenedor>> <<comando>>: Ejecuta comandos en el contenedor (en funcionamiento)
    • docker exec -it contenedor mysql -p -u root
    • docker-compose up -d: Crea e inicia contenedores en base a las instrucciones de un archivo .yml en la carpeta donde se ejecuta el comando.
    • docker-compose pull <<imagen>>
  • Copiar un contenedor
    • Asegurarse de tener datos persistentes en volúmenes
    • Parar y borrar contenedores
    • Copiar volúmenes (tal cual)
    • Crear el nuevo contenedor con la referencia al volumen (o con el archivo de docker-compose)
    • Los archivos que hubiera en el nuevo contenedor se "ocultan" y se usan los del antiguo volumen

3.3. Servidores y máquinas virtuales de pago (VPS)

3.3.1. Google Cloud (Compute Engine)

  • Usa sistemas Linux y Windows con múltiples configuraciones.
  • Pago por uso y almacenamiento.
  • Uso: desde 0,006$/hora (4,38$/mes) hasta 5$/hora.
  • Almacenamiento: desde 0,40$/mes por 10GB en HDD hasta 170$/mes por 1000GB en SSD.

3.3.2. Google Cloud (Storage)

  • Permite almacenar datos pagando solo por lo que ocupen.
  • El precio depende de la disponibilidad de los datos (en un solo servidor, en varios servidores de todo el mundo, acceso no instantáneo,...)
  • Además se paga por las operaciones que se hagan con esos datos (subida, descarga,...)
  • Desde 0,70$/mes por 100GB (ocupados) por un acceso espontáneo a 2,60$/mes por 100GB con redundancia.
  • Comandos del SDK:
    • gsutil du -hs (tamaño total de los segmentos)

3.3.3. LiquidSky

  • Usa sistemas Windows Server 2016, con NVIDIA Tesla M60 (repartido en 2GB/4GB), 6GB/12GB de RAM, CPU Intel Xeon con 3/6 núcleos. Almacenamiento 200GB/500GB. Compatible con mando.
  • Pago por 25 horas (15 euros) o 100 horas/mes (30euros/mes).

3.3.4. Backblaze

  • Servicio de almacenamiento de datos.
  • Desde 0,50$/mes por 100GB (ocupados). Más limitado que GCS.

3.3.5. Amazon Web Services (EC2, Lightsail)

  • EC2: Similar a Google Compute Engine, permite administrar máquinas virtuales remotas, pagando por el uso efectivo (para máquinas Windows, se carga por horas aunque el consumo haya sido inferior).
  • Lightsail: Ofrece un único precio para el uso y el almacenamiento, siendo más barato que EC2 en máquinas que estén en funcionamiento continuo, a costa de tener menos opciones de configuración.
  • Precios Lightsail: Desde 3,50$/mes (1 CPU, 512MB RAM, 20GB SSD, Linux).

3.3.6. Amazon Web Services (S3, Glacier)

  • Servicio de almacenamiento de datos.
  • Dispone de varios niveles según la disponibilidad de los datos (S3 Standard, S3 Standard-IA y Glacier, de mayor a menor disponibilidad). Cuánta menor disponibilidad, menor gasto de almacenamiento y mayor gasto por acceso o modificación.
  • Comandos del SDK:
    aws configure
    aws s3 cp "C:UsersrsanzGoogle Drive" "s3://copiaseg/Google Drive" --sse --storage-class STANDARD_IA --recursive
    aws s3api list-objects --bucket copiaseg --output json --query "[sum(Contents[].Size), length(Contents[])]"

3.3.7. Microsoft Azure

  • Competencia de Microsoft a Google y Amazon tanto en máquinas virtuales como en almacenamiento.
  • Pago por horas en VM.

3.3.8. OVH

  • Servidores virtuales desde 3,62 euros/mes (1 vCPU, 2 GB RAM, 20GB SSD).
  • Pago mensual.

3.3.9. clouding

  • Servidores virtuales situados en España.
  • Pago por horas.
  • Permite "archivar" un servidor, evitando el gasto por CPU, RAM y licencias Windows.
  • Desde 3,63 euros/mes (1/2 vCPU, 1 GB RAM, 5GB SSD).

3.3.10. DigitalOcean

  • Servidores virtuales con buen rendimiento y alta velocidad de carga y descarga.
  • Desde 5$/mes (pago por horas).

3.3.11. Scaleway

  • Servidores virtuales económicos con rendimiento aceptable (quizás no es recomendable para proyectos importantes)
  • Desde 1,99€/mes (pago por horas).