-
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, 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.
$ 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 endocker ps
- Para crear una imagen de docker (
build
) se necesita un archivo denominadoDockerfile
. 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.
- A la derecha del
-
$ 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.
-
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
-
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 etiquetaimg-kevin:latest
Imagen que tienes en localkvnk0/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
-
$ 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
- 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.
-
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.
-
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.
-
Tests de regresion: si rompo algo nuevo puedo volver a la version anterior
-
usermod
yuseradd
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.