Skip to content

Latest commit

 

History

History
240 lines (147 loc) · 8.79 KB

sesion6.mkd

File metadata and controls

240 lines (147 loc) · 8.79 KB

Sesión 6 - 2018/2019

Escalabilidad

  • Capacidad del software para adaptarse a las necesidades de rendimiento a medida que el nº de usuarios crece y hay mas rendimiento.

  • Escalado vertical: Cuando la cpu está al 100% la solución es comprarme una máquina con mas cpus.

    • Ventajas: Más fácil de implementar.
    • Desventajas: downtime
  • Escalado horizontal. Implica tener varios servidores trabajando como un todo.

    • Se crea un cluster con la finalidad de repartirse el trabajo.
    • Gracias al Balanceador de carga (Load balancer)
    • Grupo de autoescalado son los participantes en el escalado
  • wordpress en horizontal con php

  • Ademas tiene una fase de mysql, correr en la misma maquina pero se puede separar

  • wordrpress escala bien horizontalmente

  • mysql escala fatal horizontalmente, es necesario que sea uno maestro

Docker

  • Docker, imágenes que encapsulan contenedores de software, se ejecuta sobre el mismo kernel de Linux.
D1 D2 D3
Mismo Sistema Operativo
Mismo Hardware HW
  • D1, D2, D3 están aislados, containerization
  • HW igual para todos los dockers
  • SSOO igual para todos
  • Esto significa que comparten el mismo HW, SSOO y kernel
  • De una misma imagen se pueden ejecutar varios contenedores.
  • Actualizaciones incrementales en docker hub, significa que se descargan por capas, por ello es tan rapido el pull cuando se descarga una imagen.

Comandos básicos

  • $ docker images Ver tus imagenes locales
  • $ docker ps Ver las imágenes en ejecución
  • $ docker pull Descarga un pull desde hub.docker
  • $ docker build Construye una nueva imagen desde el código
  • $ docker create Crea un nuevo contenedor.
  • $ docker run Crea un nuevo contenedor en la imagen especificada y además luego lo ejecuta. Parámetro -d para segundo plano.
  • $ docker stop 1fa4ab2cf395 El hash especificado es el que se muestra en docker ps

Creación imagen

  • Para crear una imagen de docker (build) se necesita un archivo denominado Dockerfile. Primer ejemplo de Dockerfile creado unicamente descargando python.
FROM python:latest

  • FROM Especifica que imagen descargar.

    • A la derecha del : especifica que tag/version descargar.
  • $ docker build . -t img-kevin:latest Para construir la imagen y darle un nombre.

    • -t Etiqueta una imagen nombrándola latest.
    • El nombre de la imagen se llamara img-kevin.
  • $ docker run -it img-kevin bash Para crear un nuevo contenedor con la imagen especificada, además se ejecuta la bash.

    • -i Interactive, especificas un comando como bash y se te abre
    • Al dar a enter te aparece: root@c24266235333:/# (la shell).
  • El número despues del @ es el numero de identificador, las imágenes son efímeras, cada vez que se abre aparece un número distinto.

  • Si haces un # ps ax ves que solo esta ejecutandose bash y ps ax, bash con pid 1 porque se cree que es el único proceso en la maquina, nuestro host le ha hecho creer a la máquina que solo existe él.

  • No esta instalado vim ni nano ni nada porque solo se ha instalado python en nuestro ejemplo. Sin embargo podemos crear y guardar cosas en el sistema, pero a la que salgas y vuelvas a entrar no tendrás los arhivos/programas creados/instalados debido a que las imágenes son efímeras.

  • En los docker no existen usuarios porque solo estas tu! Por eso por defecto en la bash eres root.

  • De todos modos nunca se entra por bash en las imagenes de docker, este ejemplo es de propósito educativo.

  • Ejemplo otro Dockerfile Esta vez con más configuraciones cuando se ejecute, por ejemplo copiar un script desde nuestra máquina Host y ejecutarlo con python.

FROM python:latest

WORKDIR /app

COPY myapp.py /app

CMD ["python","myapp.py"]
  • Cuando se crea la imagen se ejecutan ciertas características.

  • WORKDIR Establece el directorio de trabajo para las instrucciones COPY, CMD... que lo siguen en el Dockerfile. Siempre usar rutas absolutas.

  • COPY Copia ficheros o directorios desde tu host y lo añade al sistema de ficheros del contenedor en la ruta destino.

  • CMD ["executable","param1","param2"] Solo puede haber un instruccion CMD en el Dockerfile, si listas más solo tendrá efecto la última. En este ejemplo es un $ python myapp.py.

  • Codigo myapp.py

print("hola estoy en tu contenedor docker")
print("ivan sopla")

Construimos el nuevo Dockerfile y lo ejecutamos. Vemos como se imprime lo del script

$ docker build -t imagenNueva:latest
$ docker run imagenNueva

hola estoy en tu contenedor docker
ivan sopla
  • Creamos volúmenes mapeando con el parámetro -v (volumen)

  • Un volumen es un directorio o un fichero en el docker engine que se monta directamente en el contenedor. Podemos montar varios volúmenes en un contenedor.

Mapping

  • Especificamos que directorio queremos que se incluya en el docker cuando se ejecute, Antes del : se especifica tu ruta absoluta, despues la ruta dentro del docker.

  • $ docker run -it -v $(pwd)/app:/app Especificamos $(pwd) por no poner /home/usuario/... Mas corto y rápido.

  • Con un Dockerfile especificamos una instalación cerrada, lista para darla al publico

Distribución al mundo

  • Necesario cuenta en hub.docker.com

  • Una vez tenemos cuenta nos logueamos desde la terminal

  • $ docker login

  • $ docker tag img-kevin:latest kvnk0/img-kevin:lab1 Asignamos una etiqueta

    • img-kevin:latest Imagen que tienes en local
    • kvnk0/img-kevin:lab1 Como se vera en hub.docker.
  • $ docker push kvnk0/img-kevin:lab1 Subimos a la página especificando la imagen.

  • Descargar haciendo un pull.

  • Hacer un pull del de luis viendo en su cuenta, ver que tag tiene (En su caso labdock)

  • $ docker pull luisf10/img-luishello:labdock

nginx, servidor web

  • $ docker run -d nginx -d Para ejecución en segundo plano

    • Docker al ver que no tiene ningun nginx se encarga de realizar automáticamente un pull.
  • Es necesario mapear un puerto que se abre desde el Docker nginx hasta el host local para poder acceder, esto es realiza cuando se ejecuta un docker run.

  • -p localPort:DockerPort

  • $ docker run -d -p 80:80 nginx

PortMapping

  • Cuando abras el navegador y escribas tu direccion del servidor debe de parecer algo así, primero tienes que habilitar el puerto desde GoogleCloud!.
Welcome to nginx!
  • $ docker exec -it cd7a61ee9ad3 bash Ejecuta dentro del contenedor específico la bash.

Configuración del servidor

  • conf.d Directorio con ficheros de configuración en bases de datos, cms.. Cuidado cuando tocas allí

  • Cuando se visita la dirección principal del servidor nginx (123.45.67.7/) se visita por defecto la página /index.html

  • /etc/nginx/conf.d/default.conf Se establecen los parámetros iniciales de configuración donde se indica que por defecto si no pone nada se visite /index.html. En esta parte exactamente.

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
  • La plantilla del archivo index.html se encuentra en /usr/share/nginx/htmlindex.html del contenedor.

  • Crear archivo index.html con cualquier contenido en el directorio donde se encuentra Dockerfile.

<head>
</head>
<body>
Primera modificacion de la pagina web
</body>
  • $ docker run -d -v $(pwd):/usr/share/nginx/html -p 80:80 nginx Cuando lo ejecutamos vemos como la página principal ha cambiado a la que hemos puesto nosotros

  • $ docker build . -t miServer miServer será el nombre de la etiqueta.

API-REST / Flask

  • Para poder hacer peticiones a un servidor y manipular asi las peticiones en él.

  • Manipular operaciones CRUD (Crear, Leer, Actualizar y Borrar").

  • Si quieres:

    • Leer, haces un get al navegador.
    • Create, post al navegador.
    • Borrar, delete al navegador.
    • Actualizar, put o patch.
  • Diferencias cuando se llama al recurso /perfil mediante Get o Post

  • En get:

    • Si no pones nada ( /perfil/) te bajas todos los subdirectorios de (/perfil/)
    • Lo normal es poner un identificador, /perfil/, por ejemplo /perfil/2
  • En post:

    • En las peticiones http hay headers y despues el body.
    • Dentro de cada header o cabecera se encuentran los content-type que indica el tipo de dato enviado(text/html, /text/css...)
    • Cuando se crea algo en el post, dentro del body van los datos necesarios para crear ese recurso
    • Se genera un método post cuando se envía un formulario en un json debido a que no se puede por un get.

Extras

  • Tests de regresion: si rompo algo nuevo puedo volver a la version anterior

  • usermod y useradd Modifica los archivos de cuentas del sistema.

  • requirements.txt Archivo en el cual se notan los paquetes para que pip se encargue de instalarlos automáticamente.