49
Contenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido por Travel Labs Madrid 04-2019

Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

  • Upload
    others

  • View
    56

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

Contenedores con Docker.II) Docker Compose y Docker Swarm.

Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L.

Espacio ofrecido por

Travel Labs Madrid 04-2019

Page 2: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

¿ Cuántos vinieron al MeetUp anterior ?

● Cuántos? Experiencia anterior?

● Conocimientos a los que no vinieron?

● Subimos la presentación del Meetup I).

Page 3: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

¿Quiénes somos y porqué hicimos Dockertips?

2015. Comenzamos probando Docker.

2016. Implementaciones para desarrolladores.

2017. www.dockertips.com y publicaciones.

2018. Puesta en marcha de varios Proyectos.

2019. Comunidad establecida, compartiendo

experiencias y dando servicios.

Presentación.

Page 4: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

Componentes de una Aplicación.

Page 5: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

Componentes de una aplicación.

Page 6: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

Componentes usando Docker.

Page 7: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

Microservicios en Docker.

Page 8: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

Docker-Compose.

Page 9: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● Es una herramienta para definir y ejecutar contenedores de manera local.

● Los contenedores se definen y configuran por medio de una plantilla yaml.

● Objetivos:

○ Desplegar aplicaciones en diferentes entornos aislados entre ellos.

○ Utilizar volúmenes de forma persistente.

○ Recrear contenedores modificados: reutiliza contenedores en caso de cambios en

la plantilla.

○ Variables utilizadas dentro de los contenedores (nombre de las bases de datos,

otros)

● En Windows y Mac viene instalado por defecto con Docker.

● En Linux no está incluido en la instalación de Docker Engine y se tiene que hacer de

forma manual.

# apt install docker-compose

Conceptos generales.

Page 10: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● Fue diseñado para utilizar contenedores en un solo servidor.

● No soporta la alta disponibilidad.

● Centrado en entornos de desarrollo - NO utilizar en producción.

● Para entorno de producción se debe usar “Docker Swarm”.

Limitaciones.

Page 11: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● Entornos de desarrollo: simplifica la creación de imágenes, ejecución de

contenedores y comunicación entre ellos.

● Automatización de test:

○ Test de integración con bases de datos.

○ Test de integración con Servicios web o Web Apis.

● Entornos de prueba de nuevas versiones de frameworks o productos.

● “Si solo tenemos un servidor” se puede utilizar como herramienta de

despliegue.

● Varios desarrolladores usan el mismo entorno (gracias al fichero yml)

Recomendaciones para su uso.

Page 12: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● Docker-compose posee un fichero de configuración para definir “aplicaciones”.

● Una aplicación está compuesta de los siguientes elementos que son definidos en el

fichero:

○ Uno o varios contenedores.

○ La configuración que tiene cada contenedor.

○ Puertos que se exponen y cómo se mapean.

○ Cómo se comunican entre ellos.

● Por defecto el fichero tiene el nombre docker-compose.yml y está escrito en yaml.

El fichero docker-compose.yml

Page 13: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● version: indica la versión del formato a utilizar.

● build: especifica el directorio donde se aloja el fichero Dockerfile para crear la

imagen basada en dicho fichero.

● context: es parecido a build (solo compatible versión 2 o superior), e indica el

directorio o dirección en la que encontrar el fichero Dockerfile.

● dockerfile: especifica el nombre de un fichero alternativo al fichero Dockerfile.

● args: indica un comando distinto para la imagen distinto al definido en el fichero

Dockerfile.

● entrypoint: indica el punto de entrada para la imagen distinto al indicado en el

Dockerfile.

● Container_name: nombre del contenedor.

● depends_on: indica la dependencia de servicios entre los contenedores.

El fichero docker-compose.yml

Page 14: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● environment: especifica la lista de variables de entorno a pasar en la creación de la

imágen.

● env_file: especifica el nombre del fichero que contiene las variables de entorno.

● expose: indica la lista de puertos que expone el contenedor.

● imagen: indica la imagen a utilizar en caso de no utilizar build o context.

● labels: lista de etiquetas a a establecer.

● logging: especifica el driver a utilizar para los registros de los contenedores.

● network_mode: especifica el modo de red a utilizar.

● networks: especifica la lista de redes a unirse para los servicios.

● ports: lista de puertos a exponer.

● volumenes: lista de volúmenes de los contenedores.

El fichero docker-compose.yml

Page 15: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido
Page 16: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● Se puede tener un fichero docker-compose por entorno: desarrollo, pre-

producción o producción.

● El objetivo es tener diferentes configuraciones por entorno.

● Tendremos un fichero de docker-compose principal donde se define los

servicios que contiene.

● Y un fichero con la configuración personalizada por entorno.

● Al ejecutar el docker-compose se tiene que indicar los dos parámetros:

#docker-compose up -f docker-compose.yml

-f docker-compose.test.yml

Un fichero docker-compose.yml para c/entorno.

Page 17: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

docker-compose.yml docker-compose.test.yml

Ejemplos de ficheros YML.

Page 18: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● El comando docker-compose tiene las siguientes opciones globales que se

pueden especificar en cada comando:

○ -f fichero: especifica un fichero diferente al por defecto (docker-

compose.yml)

○ -p proyecto: especifica el nombre de un proyecto diferente al de por

defecto (nombre de directorio)

○ --verbose: muestra más información cuando se ejecuta el comando.

Parámetros globales.

Page 19: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● Con el comando up creamos los contenedores especificados en el fichero:

○ -d: se ejecutan en segundo plano.

○ --force-recreate: si algún contenedor existe y no ha sido modificado no

se recreará. Con esta opción forzamos la recreación.

○ --no-build: no crea las imágenes específicas sino existen.

○ --abort-on-container-exit: si algún contenedor es detenido, se detienen

todos los demás.

Comandos.

Page 20: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● El comando ps lista el estado de los servicios definidos en la plantilla.

● El comando down detiene los servicios y elimina los contenedores y las

redes asociadas. Este comando tiene las siguientes opciones:

○ --rmi: elimina las imágenes asociadas. Indicando all elimina todos las

imágenes.

○ -v: elimina los volúmenes asociados a los servicios.

● El comando start inicia los servicios definidos en la plantilla, o el servicio

especificado como argumento.

● El comando stop detiene los servicios definidos dentro de la plantilla o el

servicio especificado como argumento.

○ Tiene un parámetro opcional -t que permite establecer un timeout.

Page 21: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

Comandos de control.

Page 22: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● El comando pause pausa todos los servicios definidos en la plantilla o el

servicios especificado como argumento.

● El comando unpause reanuda todos los servicios definidos en la plantilla o

el servicio especificado como argumento.

Comandos de control.

Page 23: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● El comando build crea o recrea las imágenes definidas en la plantilla

basándose en los ficheros Dockerfile. Tiene las siguientes opciones:

○ --force-rm: siempre elimina los contenedores intermedios.

○ --no-cache: no utiliza caché para eliminar las imágenes.

○ --pull: siempre se intenta obtener una nueva versión de la imagen

definida en el fichero Dockerfile.

#docker-compose build --no-cache

Page 24: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● El comando create crea los servicios definidos en la plantilla pero no los

ejecuta, es decir, no ejecuta el comando run. Tiene los siguientes parámetros:

○ --force-recreate: recrea las imágenes incluso si la configuración o los

ficheros Dockerfile no han sido modificados.

○ --no-recreate: no recrea las imágenes incluso si la configuración o los

ficheros Dockerfile no han sido modificados.

○ --no-build: no crea las imágenes incluso si no existen.

○ --build: crea las imágenes antes de crear los contenedores.

Page 25: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● El comando logs muestra la salida producida por los contenedores. Tiene los

siguientes parámetros:

○ --no-color: muestra la salida sin colores.

○ -f/--follow: mantiene el proceso en primer plano esperando nuevos

registros.

○ -t/--timestamps: muestra la fecha y hora de cada registro

○ --tail líneas: muestra el número de líneas específicas.

● El comando scale ejecutado con el comando up nos permite realizar un

escalado de un servicio.

#docker-compose scale NOMBRE_SERVICIO=<número>

Page 26: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

Demo.

Page 27: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

Docker Swarm.

Page 28: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

Docker Swarm es el orquestador de contenedores proporcionado por Docker.

● Las principales características son:

○ Administración del clúster con Docker Engine.

○ Utiliza el CLI de Docker.

○ Diseño descentralizado: la diferencia de roles se realiza en tiempo de

ejecución.

○ Modelo declarativo: los servicios se describen de manera declarativa.

○ Codificación de estado (DSC).

○ Red multi-host.

○ Descubrimiento de servicios: tiene un DNS único.

○ Balanceo de carga.

○ Seguro por defecto: utiliza TLS autenticación.

Page 29: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● Un nodo es una instancia del motor Docker Engine que participa en el clúster.

● Se puede ejecutar uno o más nodos en una sola máquina física o servidor en la nube.

● Generalmente la implementación de clusters se constituye de dos nodos distribuidos

en diferentes máquinas físicas o virtuales.

● Un clúster suele tener un nodo administrador que se encarga de la administración del

clúster.

● Los nodos workers reciben y ejecutan las tareas enviadas por el nodo administrador.

● Un tarea es la unidad de programación atómica del clúster.

Nodos/Managers/Workers.

Page 30: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● En los nodos worker se ejecuta un agente que informa de las tareas

asignadas.

Page 31: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● Un servicio es la definición de las tareas a ejecutar en los nodos de trabajo

(workers) o administración.

● Cuando se crea un servicio, se especifica la imagen de un contenedor y los

comandos que se ejecutan.

● El modelo de servicios replicados, el administrador de clúster distribuye un

número específico de tareas de réplica entre los los nodos worker en función

de la escala que se establezca.

Servicios.

Page 32: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● El administrador de clúster utiliza el balanceador de carga para exponer los

servicios que estén disponibles externamente en el clúster.

● El administrador de clúster puede asignar automáticamente el servicio a un

puerto público o puede configurar un puerto publicado para un servicio.

● Sino se especifica un puerto el administrador puede asignar al servicio un

puerto en el rango 30000 - 32767.

Para producir un balanceo automático se hace:

docker service update --force webserver

Balanceo de carga.

Page 33: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● Componentes externos como balanceadores pueden acceder al servicio en el

puerto publicado de cualquier nodo.

● Un nodo tiene un componente DNS interno que asigna automáticamente a

cada servicio del clúster una entrada en el DNS.

● El administrador utiliza el balanceo de carga para distribuir las solicitudes

entre los servicios del clúster en función del nombre DNS del servicio.

Page 34: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● Para configurar clúster para Docker-Swarm en máquinas físicas o virtuales se

tiene que tener abiertos los siguientes puertos:

○ Puerto TCP 2377 para las comunicaciones de la gestión del clúster.

○ Puerto TCP y UDP 7946 para comunicación entre nodos.

○ Puerto UDP 4789 para el tráfico de red.

Pre-requisitos para crear un clúster.

Page 35: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● Para crear un clúster se tiene que ejecutar el comando

docker swarm init --advertise-addr <ip nodo administrador>

● La IP tiene que ser de una máquina física o virtual.

● Cuando se ejecuta el comando, nos devuelve un token que se tiene que

utilizar para añadir los nodos workers.

Crear un clúster.

Page 36: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● Para añadir un nodo al clúster se tiene que utilizar el comando join mas el

token que se ha creado con el comando init mas la IP y puerto de

comunicaciones del nodo administrador

docker swarm join --token <token>

Añadir nodos al cluster.

Page 37: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● Para eliminar un nodo de un clúster se puede utilizar el comando leave.

docker swarm leave

Se puede utilizar el parámetro force para forzar la eliminación del nodo.

Eliminar nodos.

Page 38: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● Para promocionar un nodo se utiliza el método promote, sirve para que

además de worker pueda ser manager.

docker node promote nodo_worker

● Para degradar un nodo (quitarlo de manager) se utiliza el método demote.

docker node demote nodo_worker

Promocionar o degradar nodos.

Page 39: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● Cuando se despliega un servicio = a crear un contenedor en el clúster.

● El comando create tiene los siguientes parámetros:

○ name: nombre del servicio

○ replicas: número de réplicas que se van a desplegar

○ p / publish el puerto por el que es accesible

docker service create --name miservicio1 --replicas 1 microsoft/iis

Desplegar un servicio.

Page 40: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● Con el comando ls se puede listar los servicios del clúster

docker service ls

● Con el comando ps nos da más información del servicio

Verificar el despliegue del servicio.

Page 41: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● Con el comando scale se puede escalar un servicio dentro del clúster

docker service scale miservicio1=4

El escalado es tanto para aumentar la cantidad de servicios como para

disminuir los servicios

Escalar un servicio.

Page 42: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

● Para eliminar un servicio se utiliza el método rm

docker service rm servicio1

La eliminación es automática, en pocos segundos es eliminado del clúster.

Eliminar un servicio.

Page 43: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

Demo.

Page 44: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

Administrar un Clúster Swarm

con Portainer en modo local.

Page 45: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido
Page 46: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido
Page 47: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido
Page 48: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

Preguntas.

Page 49: Contenedores con Docker. con Docker II..pdfContenedores con Docker. II) Docker Compose y Docker Swarm. Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L. Espacio ofrecido

Gracias por participar.

[email protected]

Próximo evento III) Kubernetes.