Documentos de Académico
Documentos de Profesional
Documentos de Cultura
aplicaciones
con Docker
Antonio Varela Nieto
Descripción del curso
Requisitos
para seguir Nociones básicas de desarrollo
Módulo 1. El Módulo 4.
Módulo 2. Módulo 3. Primeros
porqué de los Fundamentos de
Instalación pasos
contenedores Docker
Módulo 6. Módulo 8.
Módulo 5. Uso de Módulo 7.
Creación de una Integración
Docker en Distribución de
Aplicación Web de Continua y Testing
Desarrollo ejemplo imágenes con Docker
Módulo 11.
Módulo 9. Módulo 10.
Orquestación,
Despliegue de Networking y
Clustering y
Containers Service Discovery Gestión
Presentación
u ¿Cómo te llamas?
u ¿Cuáles son tus expectativas del curso?
u ¿Tienes experiencia previa con lenguajes
de desarrollo?
u ¿Tienes experiencia previa con
instalación/configuración de servidores?
u ¿Tienes experiencia previa desplegando
aplicaciones?
Módulo 1
El porqué de los
contenedores
u En la ingeniería de software se
denomina aplicación web a aquellas
herramientas que los usuarios pueden
utilizar accediendo a un servidor web
¿Qué es una a través de internet o de una intranet
mediante un navegador.
aplicación
web? u En otras palabras, es un programa que
se codifica en un lenguaje
interpretable por los navegadores
web en la que se confía la ejecución al
navegador.
Es un proceso de ingeniería
• HTML
• CSS
• JavaScript
tecnologías
• PHP
• Java
• JavaScript en lado servidor (SSJS)
• Perl
para el • Ruby
• Python
• Node.js
Capa Persistencia
Virtualización Contenerización
Tamaño Elevado debido a que tiene que Reducido al no necesitar SO huésped
embeber el SO huésped
Reserva de Se hace previa al despliegue y Es dinámica en función de las
recursos es bloqueante necesidades y la gestiona el engine
Tiempo de Varios minutos Unos pocos segundos
despliegue
Portabilidad Permitida No se puede ejecutar
entre SO Host contenedores/aplicciones que no
sean para ese mismo SO Host
Complejidad Relativamente sencillo de La complejidad crece a medida que
empezar se requieren despliegues más
escalables
Que es Docker?
u Arquitectura 64 Bits
u Linux Kernel 3.8 o posterior
u El kernel debe admitir un controlador de almacenamiento apropiado:
u Device Mapper (La opción por defecto)
u AUFS
u vfs
u btrfs
u Las características del núcleo de cgroups y namespaces deben ser
compatibles y habilitadas
Docker Desktop
u Docker Compose
u https://docs.docker.com/compose/install/
u Kubernetes
u https://kubernetes.io/es/docs/tasks/tools/install-kubectl/
Docker en Linux
u El comando docker solo puede ser ejecutado por root o un usuario que
pertenezca al grupo docker (se crea automáticamente durante la instalación)
u La sintaxis es la siguiente:
u $ docker [option] [command] [arguments]
u Busybox es una imagen Docker mínima que nos permite trastear de forma
rápida
u Para ejecutar un único comando dentro de una imagen podemos usar lo
siguiente:
u $ docker run busybox echo Hola mundo
u Si lo que queremos es abrir una terminal para trastear más en detalle
u $ docker run -it busybox sh
Iniciar un ubuntu
u Para ver lo que está pasando dentro de un contenedor podemos usar el comando
logs
u $ docker logs myDaemon
u Para listar las imágenes que tenemos en local usaremos el subcomando image
u $ docker images
u Y con –q obtenemos solo los IDs
u $ docker images -q
u Con el comando diff podemos obtener una lista de los ficheros se han alterado
desde la creación del container
u $ docker diff {ID}
El comando docker: stats
u $ docker stats
u $ docker stats {ID}
# Version: 0.0.1
FROM ubuntu:14.04
MAINTAINER John Doe john@doe.com
RUN apt-get update
RUN apt-get install -y nginx
RUN echo 'Hi, I am in your container' \
>/usr/share/nginx/html/index.html
EXPOSE 80
u El comando FROM le dice a Docker qué base desea utilizar para su imagen
u Se puede indicar el nombre de la imagen seguido de su etiqueta
u El comando LABEL puede ser usado para añadir información extra a la imagen
u Puede ser cualquier cosa desde un número de versión hasta una descripción
u Se pueden consultar con el subcomando inspect
u El comando RUN es donde interactuamos con nuestra imagen para instalar
software y ejecutar scripts, comandos y otras tareas
El Dockerfile
ENTRYPOINT ["nginx"]
CMD ["-g", "daemon off;"]
El Dockerfile
u $ chmod +x build.sh
u $ sh build.sh
Práctica II
u Crea una aplicación web en java sencilla, con un simple servlet que nos dé la
bienvenida de forma genérica, y si pasamos el parámetro name por get nos
salude de forma personalizada
u Empaqueta la aplicación en un WAR
u Crea un Dockerfile capaz de crear un contendor que ejecute ese WAR
Persistencia de datos
u El comando docker tiene el subcomando volume para poder trabajar con los
volúmenes
u Desde desde este comando podemos crear, consultar y eliminar los volúmenes
u $ docker volume create myVolume
u $ docker volume create --name myVolume --label test
u $ docker volume create --driver local \
--opt type=nfs \
--opt o=addr=192.168.1.1,rw \
--opt device=:/path/to/dir \
foo
Persistencia de datos: Volúmenes
u En nuestro caso vamos a trabajar con Netbeans, Maven, Spring Boot y Docker
u Para establecer el entorno podemos usar el siguiente manual
u https://jaxenter.com/playing-with-spring-boot-docker-in-netbeans-ide-
127672.html
Caso práctico
u Para publicar en Docker Hub lo primero que necesitamos es crear una cuenta
de usuario
u https://hub.docker.com/
u Una vez tenemos la cuenta creada, tenemos que ir a la sección de
repositorios y nos creamos nuestro propio repositorio
u Podemos escoger entre público y privado
u Lo siguiente es iniciar sesión con nuestro usuario en nuestro docker cliente
u $ docker login --username={username}
Docker Hub
u Ejemplo
u https://medium.com/@karthi.net/docker-tutorial-build-docker-images-using-
jenkins-
d2880e65b74#:~:text=On%20the%20Jenkins%20Dashboard%2C%20select,Select%20Do
cker%20from%20the%20list.
Docker Hub - GitHub
u Podemos integrar GitHub con Docker Hub para generar las imágenes de forma
automática
u Para ello, Docker Hub nos provee de la opción de los build automáticos
u https://docs.docker.com/docker-hub/builds/
Caso de estudio
u Aquí podemos ver un ejemplo real de las diferentes piezas que podrían hacer
falta para lograr una infraestructura 100% flexible y escalable siguiendo los
principios de la integración continua y Docker
u https://es.slideshare.net/Synerzip/running-microservices-on-docker
Práctica
u Docker crea una interfaz de red propia con el nombre de docker0. Esta red
tiene un rango típico: 174.17.0.1/24
u Al principio, solo se podía manejar esta red
u Eso generaba problemas de seguridad (confiabilidad y aislamiento)
u Esto se mejoró con el avance de Docker
Network
u Con el comando docker network ls podemos ver las redes que tenemos
configuradas por defecto
u host representa la red del propio equipo y haría referencia a eth0
u bridge representa la red docker0 y a ella se conectan todos los contenedores por
defecto.
u none significa que el contenedor no se incluye en ninguna red y si verificamos esto
con el comando ifconfig dentro del contenedor veríamos que solo tiene la interfaz
de loopback lo.
u https://spring.io/guides/gs/service-registration-and-discovery/
u https://www.baeldung.com/spring-cloud-netflix-eureka
Módulo 11
Orquestación,
Clustering y Gestión
Orquestación