sábado, 3 de marzo de 2018

Docker (9) :Resumen de vídeos de docker conf 2017

Vamos a hcer un pequeño resumen de este vídeo de la conferencia de Arun Gupta y Sophia Parafina de docker de 2017.

1. Resumen


Hou en día se requiere rapidez en los cambios, escalabilidad horizontal, que la actualización de cambios sea segura, alta disponibilidad, clusters horizontales (una única aplicación corriendo en muchos servidores. Los clusters verticales es un servidor que corre muchas aplicaciones), automatización, legacy.

Se cree quela modernización se basa en los microservices, pero estos requieren una reestructuración de la organización, tanto a nivel físico como psicológico.

Docker rompe la impedancia de la parte físca ya que igual puede correr en un portátil como en un cluster. Además elimina flancos de ataque ya que el contenedor es como un escudo: no es igual atacar a un contenedor que tener los flancos de jdbc, java, db, etc.

Las aplicaciones van a ser multi-container donde es importante la orquestación. Kubernetes va a ser una pieza clave de la orquestación.

Kubernetes es un sistema open-source para la automatización del despliegue, escalado y manejo de aplicaciones "containerizadas".

Amazon EC2 container service es una buena opción donde no hace falta un manejo estricto para operar y escalar las aplicaciones.


Vamos ahora a ver un resumen del video de Aby Fuller.

2. Resumen


Cuanto mas pequeña sea la capa de escritura de un contenedor, menos recursos ocupará y además ofrecerá un flanco mas pequeño de ataque de piratas.

Cuanto mas capas (layers) se tenga, peor eficiencia de uso de recursos y mas vulnerable WPA2 y WIFI). hay que tener imagenes pequeñas.

Si utilizamos microservices, el despliegue va a ser muy rápido.

Tambien es muy importante utilizar una imagen compartida.

Intentar encadenar sentencias RUN en un dockerfile.

Evitar las pérdidas de caché en el build?

3. Imagenes pequeñas:

1. Muchas veces necesitamos tener utilidades como curl y wget, pero se puede optar por tener una base SO y utilidades (clausula FROM de dockerfile) que tenga un SO operativo mínimo con esas utilidades instaladas basandose en un Linux Alpine.

2. Envez de utilizar el comando 
  COPY requeriments.txt /app
 se puede decir que utilice :
ONBUILD ADD requirements.txt /app

Además podemos hacer:
ONBUILD RUN pip install -r /app/requirements.txt
ONBUILD COPY . /app

Esto esmás rápido. Ya que se ejecuta mas tarde cuando la imágen es usada de base para construir otras imágenes.

3. Portar una imagen windows existente a docker:
ConvertTo-Dockerfile -ImagePath c:\docker\myimage.wim

Convertir desde VHD (Virtual Hard Disk)
ConvertTo-Dockerfile -ImagePath c:\vms\test.vhd -Artifacr IIS - ArtifactParam windows-container -OutputPath c:\windows-container

cd c:\windows-container
docker build -t windows-container .
docker run -d -p 80:80 windows-container

4. Cuidado con los paths c: c:\ / /windows c:/windows ya que pueden generar una imagen muy larga (supongo que será por que contienen muchos ficheros)

5. Evitar instalar paquetes con windows MSI, ya que guarda los paquetes por si quieres desinstalar.

6. Podemos tener nuestro contenedor base (inventado pro nosotros)
FROM 20170101.drk.ecr.us.amazon:latest
7. Cada vez que utilizamos USER, creamos una nueva capa

8. Cuantos mas lenguajes de programación metemos, mas pesada es la capa.

9. Construccion de imagenes de soporte: (corremos el binario que hemos construido)

$ go build -o deckercon .
$ docher build -t dockercon .

#Dockerfile
FROM scratch
COPY ./dockercon /dockercon
ENTRYPOINT ["/dockercon"]

10. Scratch es un dockerfile vacío especial. Usarlo para construir tus imágenes base, o o para construir imagenes minimalistas que corren un binario y nada mas

FROM scratch
COPY hello /
CM [ "/hello" ]


11. Las imagenes oficiales de Ruby son muy grandes. Vale la pena buscar otras imagenes alternativas

12. Los builds multi-stage son aconsejables para lenguajes como Java o Go (Goland)
Aquí creamos un artifact en la primera fase y simplemente corremos el binario en la segunda fase. Siendo la imagen mas pequeña.

FROM maven:3.5-jdk-8 as BUILD
COPY --from=BUILD

Veamos otro ejemplo de multi-stage build
En el primer fichero
FROM ubuntu AS build-env
RUN apt-get install make
ADD . /src
RUN cd  /src && make

En el segndo fichero copiamos todo el trabajo que nos interesa del primero (que es el resultado de la compilación de las fuentes.
FROM busybox
COPY --from=build-env /src/build/app /usr/local/bin/app
EXPOSE 80
ENTRYPOINT /usr/local/bin/app

4. Docker security scan (scan for vulnerabilities)

Solamente se puede realizar en versiones de pago, ya que en docker hub lo van a quitar el 31 de marzo de 2018. Se puede ver en Docker Hub

5. Eliminación de objetos que se han quedado colgados

Hay otras opciones como
#Elimina las imagenes que se han quedado colgadas
docker image prune -a

#Elimina los volumenes no usuados o untagged y las imagenes colgadas
docker system prune -a


6. Garbage collection

Recordar limpiar tras el uso  de containers, imagenes y system prune

Asegurarse que la platafiorma de osquestación recoge las partes colgadas. (ECS, Kubernates). Hay otras herrmientas de terceras para ello como spotify-gc.

7. Lo nuevo por venir

1. Linux y windows server
2. Imagenes oficiales multiplataforma
3. Nuevas y mejores imagenes minimizadas para contenedores
4. Nix como gestor de paquetes para Linux. Permite upgrades atómicos, rollbacks..





No hay comentarios :

Publicar un comentario