SlideShare una empresa de Scribd logo
http://tinyurl.com/testdrive-ocp-docker
The core of microservices arquitecture
Una analogía y
un poco de historia para
entender…
CONTENEDOR
¿Como
transportamos
estos items sin
contenedores?
The core of microservices arquitecture
Tomaba semanas cargar un barco 
Antes de los contenedores…
The core of microservices arquitecture
Dificultades para trasladar el cargamentoLas cargas estaban expuestas
Malcom McLean
• Emprendedor del
Transporte
• Desarrolló el
Contenedor de
transporte intermodal
• El padre de la
contenedorizacion
Caja estándar Aislamiento Autosustentable
The core of microservices arquitecture
Mecanismos de transporte
The core of microservices arquitecture
The Matrix from Hell
?
??
?
?
?
?
The core of microservices arquitecture
La matriz del infierno
Frontend
Backened service
Message brokers
Relational DB
Analytics DB
Development
VM
QA Server
Single Prod
Server
Onsite
Cluster
Public Cloud
Contributor’s
laptop
Customer
Servers
The Matrix from Hell
The core of microservices arquitecture
La matriz del infierno
The Matrix from Hell
Onpremise
Cloud
Personal
The core of microservices arquitecture
CODE
DEV TEST PROD
CONTENT
Frontend
Backened service
Message brokers
Relational DB
Analytics DB
Development
VM
QA Server
Single Prod
Server
Onsite
Cluster
Public
Cloud
Contributor’s
laptop
Customer
Servers
The Matrix from Hell
The core of microservices arquitecture
La matriz del infierno
The core of microservices arquitecture
Laboratorio
Virtualización o Contenerización
Una Virtual Machine necesita un hipervisor
a cargo de manejar sus recursos.
Un Hypervirsor nos permite que varias
maquinas virtuales (VM) se ejecuten sobre
un de host al mismo tiempo usando los
recursos del hardware hospedador.
Virtualización o Contenerización
The core of microservices arquitectureThe core of microservices arquitecture
El hypervisor funge como administrador de
recursos y medio de comunicación entre el
OS Hospodedador/hardware y las nuevas
máquinas virtuales sobre el.
The core of microservices arquitectureThe core of microservices arquitecture
Virtualización o Contenerización
La nueva VM cuando nace agrega su
propio sistema operativo con todas las
necesidades de infraestructura necesarias,
esto incluye poder de computo, red y
seguridad.
The core of microservices arquitectureThe core of microservices arquitecture
Virtualización o Contenerización
Sobre el OS de la VM se ejecuta tu
aplicación. Simplemente le da cierta libertad
al usuario y la capacidad de replicar la
misma carga de trabajo.
The core of microservices arquitectureThe core of microservices arquitecture
Virtualización o Contenerización
Por ejemplo, suponemos que se necesita
soportar mayor carga de trabajo. Todo lo
que se necesita hacer, es replicar toda la
máquina al numero deseado.
The core of microservices arquitecture
Virtualización o Contenerización
Usando el mismo principio, los
contenedores también necesitan un
sistema operativo como host.
Llamamos a esto un "Host Operating
System".
The core of microservices arquitectureThe core of microservices arquitecture
Virtualización o Contenerización
Para ejecutar Contenedores, necesitamos
una capa lógica que nos permita iniciar,
detener y eliminar contenedores pudiendo
así gestionar todo el ciclo de vida del
mismo.
En lugar de hypervisor, necesitamos un
Docker Engine.
The core of microservices arquitectureThe core of microservices arquitecture
Virtualización o Contenerización
Docker Engine es el servicio-cliente servidor nos da
la capacidad de construir y ejecutar containers
usando recursos compartidos. En el caso de
contenedores estamos compartiendo el Kernel
namespace.
Al utilizar contenedores, ahora tenemos más
densidad en los recursos usados que en
Máquinas virtuales.
The core of microservices arquitectureThe core of microservices arquitecture
Virtualización o Contenerización
Para empezar, cada contenedor necesita un
sistema operativo hospedador.
A este lo llamaremos:
The Host Operating System
The Host Operating System
Arquitectura de Docker
The core of microservices arquitecture
Para proporcionar todas las funciones
necesarias para manejar el ciclo de vida del
contenedor, necesitamos un motor llamado:
The Docker Engine
Arquitectura de Docker
The core of microservices arquitecture
Sin embargo, no manejamos el Engine
nosotros mismos. Para esto, necesitamos
una aplicación cliente capaz de hablar
directamente con el Engine y solicitar
operaciones en nuestro nombre.
Este componente es llamado
"Docker Client“.
Docker Client
Arquitectura de Docker
The core of microservices arquitecture
El siguiente componente en nuestra
arquitectura, es un servicio capaz de
almacenar nuestros imágenes y tener
un punto central para distruibuirlas.
El servidor que almacena las imágenes
es llamado:
The Docker registry
The Docker Registry
Arquitectura de Docker
The core of microservices arquitecture
Hay un área donde todas las imágenes de
Docker residen en nuestro host, una
directorio local o docker images area.
Para poder listar las imágenes locales
almacenadas podemos ejecutar el siguiente
comando:
docker images
Docker Images Area
Arquitectura de Docker
The core of microservices arquitecture
Entonces, queremos ejecutar un contenedor
en una entorno local, un ejemplo de un
comando sería:
docker run -d -p 8080:80 nginx:latest
Sin embargo, como es el primero en el que
ejecutamos este comando, no lo
encontraremos en el host local.
Arquitectura de Docker
?
The core of microservices arquitecture
Después de mirar localmente y fallar, va a
solicitar al próximo docker registry la
imagen solicitada.
Arquitectura de Docker
?
The core of microservices arquitecture
Arquitectura de Docker
Después de encontrar el
contenedor en el docker registry
publico, se inicia un PULLING de
extracción descargando la
imagen a nuestro host.
The core of microservices arquitecture
Arquitectura de Docker
The core of microservices arquitecture
Luego que la imagen este
descarga localmente, el segundo
paso es iniciar el contenedor.
Después de esto, el contenedor
está listo para ser utilizado.
Intentando el mismo comando por
segunda vez:
docker run -d -p 8080:80 nginx:latest
Encontrará la imagen localmente y
ejecutará de forma mas rápida.
Arquitectura de Docker
http://
?
The core of microservices arquitecture
Arquitectura de Docker
The core of microservices arquitecture
Al encontrar localmente, todo el
proceso es mucho más rápido a
partir de ahora.
Cualquier nuevo contenedor
necesario será utilizado
localmente.
The core of microservices arquitecture
Glosario breve de términos
Contenedor
Es un empaquetado estándar de software ligero que proporciona un entorno
portable auto-contenido, con los elementos necesarios (variables, librerías) para que
una aplicación o servicio pueda ejecutarse sin problemas en el espacio del kernel del
sistema operativo anfitrión.
The core of microservices arquitecture
Glosario breve de términos
Docker
Es una tecnología que le permite construir, ejecutar, probar e implementar
aplicaciones basadas en contenedores. Docker empaqueta unidades estándar de
software llamada contenedores que cumplen con las 3 características vistas
anteriormente. ( Estándar, Auto-sustentado , Aislado)
The core of microservices arquitecture
Glosario breve de términos
Docker image (image)
Son paquetes ejecutables que contienen una configuración conformada por un
sistema operativo base y variables de entornos predefinidas. Algunas llegan a ser tan
específicas que incluso pueden incluir también el código de una aplicación y su
tiempo de ejecución, permitiéndonos crear los contenedores con el entorno que
requerimos basados en estos paquetes ejecutables pre-modelados.
The core of microservices arquitecture
Glosario breve de términos
Dockerfile
Es un archivo de texto que contiene todos los comandos que se usaran para
construir una imagen Docker de forma automatizada.
The core of microservices arquitecture
Glosario breve de términos
Container Registry
Es un servicio publico o privado capaz de almacenar y distribuir nuestras imágenes
de docker.
The core of microservices arquitecture
Glosario breve de términos
Docker Build
Nos permite construir una imagen siguiendo las instrucciones escritas en el archivo
dockerfile.
The core of microservices arquitecture
Glosario breve de términos
Docker Pull
Nos permite descargar una imagen del docker registry.
The core of microservices arquitecture
Glosario breve de términos
Docker Push
Nos permite subir una imagen a un Docker registry remoto.
The core of microservices arquitecture
Laboratorio
Instalación de Docker
Como debe ser, todo vía Linux cli:
#Instalamos las dependencias necesarias:
yum install -y yum-utils device-mapper-persistent-data lvm2
#Agregamos el repositorio necesario para la instalación de docker
yum-config-manager --add-repo 
https://download.docker.com/linux/centos/docker-ce.repo
#Instamos el paquete que contiene docker
yum install -y docker-ce
#Habilitamos docker para posteriores reinicios:
systemctl enable docker
#Iniciamos docker
systemctl start docker
The core of microservices arquitecture
Instalación de Docker
Lo primero que debemos saber, es qué versión de Docker estamos ejecutando:
Client:
Version: 17.12.1-ce
API version: 1.35
Go version: go1.9.4
Git commit: 7390fc6
Built: Tue Feb 27 22:15:20 2018
OS/Arch: linux/amd64
Server:
Engine:
Version: 17.12.1-ce
API version: 1.35 (minimum version 1.12)
Go version: go1.9.4
Git commit: 7390fc6
Built: Tue Feb 27 22:17:54 2018
OS/Arch: linux/amd64
Experimental: false
The core of microservices arquitecture
Instalación de Docker
The core of microservices arquitecture
Laboratorio
Corriendo un Contenedor
Intentamos ejecutar un contenedor con el siguiente comando:
docker run --rm -ti centos:latest /bin/bash
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
5e35d10a3eba: Pull complete
Digest: sha256:dcbc4e5e7052ea2306eed59563da1fec09196f2ecacbe042acbdcd2b44b05270
Status: Downloaded newer image for centos:latest
Si despues de la ejecucion aprecias la siguiente linea:
[root@1179d700a997 /]#
Felicidades estas en tu primer contendor
--rm: Borra el contenedor si su estado ejecucion toma el valor de “exits”
-t: Asigna un tty simulado
-i: Mantiene la interaccion con el container abierta via entrada estandart(teclado)(STDIN)
tty: teletype controlador de sub-sistemas y señales de control de unix/linux
¿Que significa?
The core of microservices arquitecture
Corriendo un Contenedor
The core of microservices arquitecture
Ahora, escriba exit e intente ejecutarlo de nuevo:
[root@1179d700a997 /]# exit
exit
Ahora volvemos a ejecutar el siguiente comando:
docker run --rm -ti centos:latest /bin/bash
[root@443583d1a4c0 /]#
Corriendo un Contenedor
¿Que ha pasado ahora ?
¿Por qué era mucho más rápido que la anterior?
¿Por qué cambió el número en la posición de host?
The core of microservices arquitecture
Corriendo un Contenedor
everis.com /meetup /test :1.0
Registry address Namespace image tag
The core of microservices arquitecture
Corriendo un Contenedor
Cada vez que ejecuta o inicia un contenedor, primero comprueba si hay uno localmente. Si no, se
descargará. Hagamos una lista de todas las imágenes disponibles:
Ejecutamos:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 2d194b392dd1 4 days ago 195MB
El comando “docker images" lista todos las imágenes disponibles localmente para usted.
Si usas nuevamente el comando "docker run", no volverá a descargar.
The core of microservices arquitecture
Corriendo un Contenedor
Suponiendo que ya no necesitamos la imagen de "centos", podemos eliminar esta imagen
escribiendo:
docker rmi centos
Untagged: centos:latest
Untagged:
centos@sha256:dcbc4e5e7052ea2306eed59563da1fec09196f2ecacbe042acbdcd2b44b05270
Deleted: sha256:2d194b392dd16955847a14f969b2dd319251471ffa6356be6d8f16c5bf53db9b
Deleted: sha256:b03095563b7956c62ae5a6d20e5959a950e3b1a96d4404c00b7da7393847494a
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
The core of microservices arquitecture
Corriendo un Contenedor
Ahora, vamos a realizar un pequeño experimento. Vamos a ejecutar la imagen centos nuevamente y
creamos un archivo simple dentro del contenedor:
# docker run --rm -ti centos:latest /bin/bash
[root@de31ec6789fe /]# touch helloworld.txt
[root@de31ec6789fe /]# ls -la helloworld.txt
-rw-r--r--. 1 root root 0 May 17 16:28 helloworld.txt
[root@de31ec6789fe /]# exit
exit
Después de salir, vamos a ejecutar nuevamente la misma imagen centos y verificar la existencia del
archivo creado anteriormente:
docker run --rm -ti centos:latest /bin/bash
[root@c23a8134ab5b /] # ls -la helloworld.txt
ls: cannot access helloworld.txt: No such file or directory
[root@c23a8134ab5b /]#
The core of microservices arquitecture
Corriendo un Contenedor
¿Por qué el archivo ya no existe dentro de un contenedor?
The core of microservices arquitecture
Corriendo un Contenedor
Hay una opción dentro de la larga lista de opciones del cli de docker en cuanto a RUN se refiere, esta
es la opción ‘-v ’. Esta permite exponer los contenidos de un directorio desde nuestro sistema
operativo anfitrión por ejemplo al interior de un contendor.
mkdir -p /root/outside
docker run --rm -ti -v /root/outside:/root/inside centos:latest /bin/bash
[root@de31ec6789fe /]# touch /root/inside/helloworld.txt
[root@de31ec6789fe /]# echo "Hello World" > /root/inside/helloworld.txt
[root@de31ec6789fe /]# cat /root/inside/helloworld.txt
Hello World
[root@de31ec6789fe /]# exit
exit
The core of microservices arquitecture
Corriendo un Contenedor
Si ejecuta el mismo comando nuevamente, apuntando al mismo directorio externo, el contenedor se
creará con una ruta montada con el siguiente contenido:
docker run --rm -ti -v /root/outside:/root/inside centos:latest /bin/bash
[root@c39d629a71a3 /]# cat /root/inside/helloworld.txt
Hello World
docker run -d nginx:latest
682f641bea4a6e84c62ee87f593cfeb7f6e8c842060bf53ad28b1e4661e7be7b
-d: Corre un contenedor en background y muestra su id
The core of microservices arquitecture
Corriendo un Contenedor
docker run -d --name httpd-test httpd:latest
682f641bea4a6e84c62ee87f593cfeb7f6e8c842060bf53ad28b1e4661e7be7b
docker logs –f httpd-test
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName'
directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName'
directive globally to suppress this message
[Sat Mar 10 14:30:27.962818 2018] [mpm_event:notice] [pid 1:tid 139706447468416] AH00489: Apache/2.4.29 (Unix) configured -- resuming
normal operations
[Sat Mar 10 14:30:27.963819 2018] [core:notice] [pid 1:tid 139706447468416] AH00094: Command line: 'httpd -D FOREGROUND'
-d: Corre un contenedor en background y muestra su id
--name: Asigna un nombre al contenedor
docker logs: Permite visualizar logs de un contenedor
-f: Da seguimiento a la salida por pantalla del logs
The core of microservices arquitecture
Corriendo un Contenedor
¿Qué tipo de aplicaciones es
importante para que algún contenido
sea persistente?
The core of microservices arquitecture
Corriendo un Contenedor
The core of microservices arquitecture
The One
Que es el proceso 1
The core of microservices arquitecture
The One
Los contenedores de docker son efímeros, quiere decir que existen para cumplir su
propósito . Pero ¿Cómo sabemos cuál es el propósito de cada contenedor?
La respuesta es muy simple: el proceso con el PID n.º 1
Al correr un contenedor, especificamos un comando para que éste lo ejecute. Este
comando se vuelve el proceso con el PID 1 en el sistema operativo dentro del
contenedor.
The core of microservices arquitecture
The One
Mientras este proceso se esté ejecutando, el contenedor estará con vida. Pero una vez
que el comando haya finalizado su ejecución o se haya interrumpido su flujo,
entonces el contenedor habrá finalizado su propósito y morira.
The core of microservices arquitecture
The One
docker run --name nginx-test -d nginx:latest
c6a09929186924098d8866075aedfa1506d5390a40791f2932495b54535b15b6
docker exec -ti nginx-test
apt-get update && apt-get install -y procps
root@c6a099291869:/# ps -x
PID TTY STAT TIME COMMAND
1 ? Ss 0:00 nginx: master process nginx -g daemon off;
6 pts/0 Ss 0:00 bash
254 pts/0 R+ 0:00 ps -x
The core of microservices arquitecture
Construyendo
una imagen de Docker
Para construir sus propias
imágenes, necesitamos un
archivo con todos los comandos
necesarios dentro.
Este archivo especial se llama:
Dockerfile
Con este archivo, usamos un
comando para construir nuestra
imagen de esta manera:
docker build –t myjava-base-image .
The core of microservices arquitecture
una imagen de Docker
Construyendo
Una vez que nuestra imagen
esté lista, podemos almacenarla
en un archivo con fines de
respaldo.
The core of microservices arquitecture
TAR file
una imagen de Docker
Construyendo
O simplemente un PUSH a un
determinador Registry, para
poder distribuirlo con mayor
facilidad.
The core of microservices arquitectureThe core of microservices arquitecture
una imagen de Docker
Construyendo
Ahora, vamos a crear un contenedor con una Máquina Virtual Java.
FROM centos:latest
LABEL docker build -t myjava-base-image .
ENV JAVA_HOME /usr/java/jdk1.8.0_161
ENV PATH="$PATH:$JAVA_HOME/bin"
RUN yum install -y wget 
&& wget https://mirror.its.sfu.ca/mirror/CentOS-Third-Party/NSG/common/x86_64/jdk-8u144-linux-
x64.rpm 
&& rpm -ivh jdk-8u144-linux-x64.rpm 
&& rm -rf jdk-8u144-linux-x64.rpm
The core of microservices arquitecture
una imagen de Docker
Construyendo
Después de eso, vamos a ejecutar el siguiente comando, que tomará las instrucciones en el archivo
"Dockerfile" y creará una imagen para nosotros:
docker build -t myjava-base-image .
Sending build context to Docker daemon 355.2MB
Step 1/5 : FROM centos:latest
---> 2d194b392dd1
Step 2/5 : LABEL docker build -t myjava-base-image .
---> Using cache
---> cab5055b4003
Step 3/5 : ENV JAVA_HOME /usr/java/jdk1.8.0_161
---> Using cache
---> c3d5f8947a38
Step 4/5 : ENV PATH="$PATH:$JAVA_HOME/bin"
---> Using cache
---> 3fb310ed8802
Step 5/5 : RUN yum install -y wget && wget https://mirror.its.sfu.ca/mirror/CentOS-Third-
Party/NSG/common/x86_64/jdk-8u144-linux-x64.rpm && rpm -ivh jdk-8u144-linux-x64.rpm && rm -rf
jdk-8u144-linux-x64.rpm
---> Running in d888f3c7e023
The core of microservices arquitecture
una imagen de Docker
Construyendo
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myjava-base-image latest 5ecaec56437b 2 minutes ago 650MB
docker history myjava-base-image:latest
IMAGE CREATED CREATED BY SIZE
COMMENT
5ecaec56437b 7 minutes ago /bin/sh -c yum install -y wget && wget h… 455MB
3fb310ed8802 9 minutes ago /bin/sh -c #(nop) ENV PATH=/usr/local/sbin:… 0B
c3d5f8947a38 9 minutes ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/java/j… 0B
cab5055b4003 9 minutes ago /bin/sh -c #(nop) LABEL docker=build -t myj… 0B
2d194b392dd1 4 days ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 4 days ago /bin/sh -c #(nop) LABEL name=CentOS Base Im… 0B
<missing> 4 days ago /bin/sh -c #(nop) ADD file:8d83f3e2c14f39e7f… 195MB
The core of microservices arquitecture
una imagen de Docker
Construyendo
docker history centos:latest
IMAGE CREATED CREATED BY SIZE
COMMENT
2d194b392dd1 4 days ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 4 days ago /bin/sh -c #(nop) LABEL name=CentOS Base Im… 0B
<missing> 4 days ago /bin/sh -c #(nop) ADD file:8d83f3e2c14f39e7f… 195MB
The core of microservices arquitecture
una imagen de Docker
Construyendo
docker build -t myjava-base-image --build-arg USER=app-ms .
FROM centos:latest
LABEL docker build -t myjava-base-image --build-arg USER=app-ms .
ARG USER
ENV JAVA_HOME /usr/java/jdk1.8.0_161
ENV PATH="$PATH:$JAVA_HOME/bin"
RUN yum install -y wget 
&& useradd ${USER} 
&& wget https://mirror.its.sfu.ca/mirror/CentOS-Third-Party/NSG/common/x86_64/jdk-8u144-linux-x64.rpm 
&& rpm -ivh jdk-8u144-linux-x64.rpm 
&& rm -rf jdk-8u144-linux-x64.rpm
The core of microservices arquitecture
una imagen de Docker
Construyendo
docker history myjava-base-image:latest
IMAGE CREATED CREATED BY SIZE
COMMENT
41c0f775bfea 3 minutes ago |1 USER=app-ms /bin/sh -c yum install -y wge… 455MB
3eb5d36afc7b 16 minutes ago /bin/sh -c #(nop) ENV PATH=/usr/local/sbin:… 0B
40f141fc385c 16 minutes ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/java/j… 0B
205eb075ba1b 16 minutes ago /bin/sh -c #(nop) ARG USER 0B
cab5055b4003 About an hour ago /bin/sh -c #(nop) LABEL docker=build -t myj… 0B
2d194b392dd1 4 days ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 4 days ago /bin/sh -c #(nop) LABEL name=CentOS Base Im… 0B
<missing> 4 days ago /bin/sh -c #(nop) ADD file:8d83f3e2c14f39e7f… 195MB
The core of microservices arquitecture
una imagen de Docker
Construyendo
¿Nueva Capa?
The core of microservices arquitecture
Salva y transporta tu contenedor
Laboratorio
También podemos guardar nuestra imagen de Docker como un archivo y guardarla para fines de
respaldo:
docker save --output myjava-base-image.tar myjava-base-image:latest
Más tarde, cuando estemos listos para usar esta imagen nuevamente, lo único que tenemos que
hacer es cargar desde el archivo creado:
docker load --input myjava-base-image.tar
cdb875d1e9a6: Loading layer [=========================>] 164.6 MB/164.6 MB
d17faadb3007: Loading layer [=========================>] 76.42 MB/76.42 MB
Loaded image: myjava-base-image:latest
The core of microservices arquitecture
Salva y transporta tu contenedor
The core of microservices arquitecture
Dockerfile mejores prácticas
Correr un solo proceso por contenedor
No instale paquetes innecesarios
Divida comandos de ejecución extensos en múltiples línea para hacerlos más legibles
Organice las variables y argumentos en múltiples líneas concatenadas
Escribir el Dockerfile con un orden, desde el comando mas inmutable hasta aquel que podría
modificarse en cada complicación , por ejemplo el copiado de un aplicativo.
Utilizar en lo posible una imagen oficial como base al construir sus propias imágenes
Las imágenes deben tener un usuario diferente a root
No escribir contraseñas dentro del Dockerfile
The core of microservices arquitecture

Más contenido relacionado

PPTX
Kubernetes workshop
PDF
Introduction to docker. Stratio
PPTX
Docker containers-itb-2021
PDF
BEEVA | Introducción a Docker
PDF
Introducción a Docker
PDF
Contenedores como Servicio con Docker
PDF
Curso gratuito de Docker
PDF
Kubernetes - #dockerconlima
Kubernetes workshop
Introduction to docker. Stratio
Docker containers-itb-2021
BEEVA | Introducción a Docker
Introducción a Docker
Contenedores como Servicio con Docker
Curso gratuito de Docker
Kubernetes - #dockerconlima

La actualidad más candente (20)

PDF
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
PPTX
Game of pods - Kubernetes
PPTX
Usando docker
PDF
Docker and networking
PDF
Iniciando con containers en azure
ODP
Solapas principales Ver(solapa activa) Editar Gestionar present...
PPTX
Docker como la máxima expresión de Devops - WISIT 2015
PDF
Introducción a Docker
PDF
Seminario CLEFormacion-docker
PDF
Docker: la revolución en virtualización
PPTX
Introducción a Docker
PDF
Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...
PDF
Introducción a Kubernetes
PDF
introducción a Docker
PPTX
Presentación Docker
PPTX
Introduccion a SQL Server 2017 en Docker
PDF
Kubernetes 101 - Plain Concepts Dev Day
PDF
DevOps+[Chef/Docker]
PDF
Docker desde cero
PDF
Kubernetes - The Cloud King
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
Game of pods - Kubernetes
Usando docker
Docker and networking
Iniciando con containers en azure
Solapas principales Ver(solapa activa) Editar Gestionar present...
Docker como la máxima expresión de Devops - WISIT 2015
Introducción a Docker
Seminario CLEFormacion-docker
Docker: la revolución en virtualización
Introducción a Docker
Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...
Introducción a Kubernetes
introducción a Docker
Presentación Docker
Introduccion a SQL Server 2017 en Docker
Kubernetes 101 - Plain Concepts Dev Day
DevOps+[Chef/Docker]
Docker desde cero
Kubernetes - The Cloud King
Publicidad

Similar a Docker 10 02_18 (20)

PDF
Semana 1 Microservicios
PDF
Microservicios y contenedores Docker
PPTX
Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?
PPTX
FROM lost to the Docker 2020
PDF
An evening with... Docker
PDF
Docker en el entorno de desarrollo
PDF
FROM lost to the docker
PDF
Taller girona
PDF
dockerize.it
PDF
Docker - Sysmana 2014
PPTX
Clase_DOCKERde nuecosajkdjsakjdsakjkjdaskjdask.pptx
PDF
Multi hybrid-cloud-fundamentals v4
PPTX
Introduccion a Docker curso para saber como funciona la dockeriazacion -2
 
PDF
Docker ECS en AWS
PDF
De desarrollo a producción usando docker
PPTX
Guia de instalacion de Docker tanto para Windows como para Linux
PPTX
Devops episodio 1. devOpsTnf
PDF
Taller docker _es-cl
PDF
Docker orientado al desarrollo de aplicaciones con NodeJS
PDF
Patrones avanzados de implementación de microservicios con Amazon ECS
Semana 1 Microservicios
Microservicios y contenedores Docker
Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?
FROM lost to the Docker 2020
An evening with... Docker
Docker en el entorno de desarrollo
FROM lost to the docker
Taller girona
dockerize.it
Docker - Sysmana 2014
Clase_DOCKERde nuecosajkdjsakjdsakjkjdaskjdask.pptx
Multi hybrid-cloud-fundamentals v4
Introduccion a Docker curso para saber como funciona la dockeriazacion -2
 
Docker ECS en AWS
De desarrollo a producción usando docker
Guia de instalacion de Docker tanto para Windows como para Linux
Devops episodio 1. devOpsTnf
Taller docker _es-cl
Docker orientado al desarrollo de aplicaciones con NodeJS
Patrones avanzados de implementación de microservicios con Amazon ECS
Publicidad

Último (20)

PDF
Influencia-del-uso-de-redes-sociales.pdf
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PDF
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
PPTX
Sesion 1 de microsoft power point - Clase 1
PDF
Estrategia de apoyo tecnología grado 9-3
PPTX
Presentación PASANTIAS AuditorioOO..pptx
PDF
Diapositiva proyecto de vida, materia catedra
PDF
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
PDF
CyberOps Associate - Cisco Networking Academy
PPTX
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
PPTX
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PPTX
Propuesta BKP servidores con Acronis1.pptx
PPTX
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
PPTX
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
PPTX
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PDF
Calidad desde el Docente y la mejora continua .pdf
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PDF
Plantilla para Diseño de Narrativas Transmedia.pdf
PPTX
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
PDF
Maste clas de estructura metálica y arquitectura
Influencia-del-uso-de-redes-sociales.pdf
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
Sesion 1 de microsoft power point - Clase 1
Estrategia de apoyo tecnología grado 9-3
Presentación PASANTIAS AuditorioOO..pptx
Diapositiva proyecto de vida, materia catedra
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
CyberOps Associate - Cisco Networking Academy
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
Propuesta BKP servidores con Acronis1.pptx
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
Calidad desde el Docente y la mejora continua .pdf
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
Plantilla para Diseño de Narrativas Transmedia.pdf
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
Maste clas de estructura metálica y arquitectura

Docker 10 02_18

  • 2. Una analogía y un poco de historia para entender…
  • 4. Tomaba semanas cargar un barco  Antes de los contenedores… The core of microservices arquitecture Dificultades para trasladar el cargamentoLas cargas estaban expuestas Malcom McLean • Emprendedor del Transporte • Desarrolló el Contenedor de transporte intermodal • El padre de la contenedorizacion
  • 5. Caja estándar Aislamiento Autosustentable The core of microservices arquitecture
  • 6. Mecanismos de transporte The core of microservices arquitecture
  • 7. The Matrix from Hell ? ?? ? ? ? ? The core of microservices arquitecture La matriz del infierno
  • 8. Frontend Backened service Message brokers Relational DB Analytics DB Development VM QA Server Single Prod Server Onsite Cluster Public Cloud Contributor’s laptop Customer Servers The Matrix from Hell The core of microservices arquitecture La matriz del infierno
  • 9. The Matrix from Hell Onpremise Cloud Personal The core of microservices arquitecture CODE DEV TEST PROD CONTENT
  • 10. Frontend Backened service Message brokers Relational DB Analytics DB Development VM QA Server Single Prod Server Onsite Cluster Public Cloud Contributor’s laptop Customer Servers The Matrix from Hell The core of microservices arquitecture La matriz del infierno
  • 11. The core of microservices arquitecture Laboratorio Virtualización o Contenerización
  • 12. Una Virtual Machine necesita un hipervisor a cargo de manejar sus recursos. Un Hypervirsor nos permite que varias maquinas virtuales (VM) se ejecuten sobre un de host al mismo tiempo usando los recursos del hardware hospedador. Virtualización o Contenerización The core of microservices arquitectureThe core of microservices arquitecture
  • 13. El hypervisor funge como administrador de recursos y medio de comunicación entre el OS Hospodedador/hardware y las nuevas máquinas virtuales sobre el. The core of microservices arquitectureThe core of microservices arquitecture Virtualización o Contenerización
  • 14. La nueva VM cuando nace agrega su propio sistema operativo con todas las necesidades de infraestructura necesarias, esto incluye poder de computo, red y seguridad. The core of microservices arquitectureThe core of microservices arquitecture Virtualización o Contenerización
  • 15. Sobre el OS de la VM se ejecuta tu aplicación. Simplemente le da cierta libertad al usuario y la capacidad de replicar la misma carga de trabajo. The core of microservices arquitectureThe core of microservices arquitecture Virtualización o Contenerización
  • 16. Por ejemplo, suponemos que se necesita soportar mayor carga de trabajo. Todo lo que se necesita hacer, es replicar toda la máquina al numero deseado. The core of microservices arquitecture Virtualización o Contenerización
  • 17. Usando el mismo principio, los contenedores también necesitan un sistema operativo como host. Llamamos a esto un "Host Operating System". The core of microservices arquitectureThe core of microservices arquitecture Virtualización o Contenerización
  • 18. Para ejecutar Contenedores, necesitamos una capa lógica que nos permita iniciar, detener y eliminar contenedores pudiendo así gestionar todo el ciclo de vida del mismo. En lugar de hypervisor, necesitamos un Docker Engine. The core of microservices arquitectureThe core of microservices arquitecture Virtualización o Contenerización
  • 19. Docker Engine es el servicio-cliente servidor nos da la capacidad de construir y ejecutar containers usando recursos compartidos. En el caso de contenedores estamos compartiendo el Kernel namespace. Al utilizar contenedores, ahora tenemos más densidad en los recursos usados que en Máquinas virtuales. The core of microservices arquitectureThe core of microservices arquitecture Virtualización o Contenerización
  • 20. Para empezar, cada contenedor necesita un sistema operativo hospedador. A este lo llamaremos: The Host Operating System The Host Operating System Arquitectura de Docker The core of microservices arquitecture
  • 21. Para proporcionar todas las funciones necesarias para manejar el ciclo de vida del contenedor, necesitamos un motor llamado: The Docker Engine Arquitectura de Docker The core of microservices arquitecture
  • 22. Sin embargo, no manejamos el Engine nosotros mismos. Para esto, necesitamos una aplicación cliente capaz de hablar directamente con el Engine y solicitar operaciones en nuestro nombre. Este componente es llamado "Docker Client“. Docker Client Arquitectura de Docker The core of microservices arquitecture
  • 23. El siguiente componente en nuestra arquitectura, es un servicio capaz de almacenar nuestros imágenes y tener un punto central para distruibuirlas. El servidor que almacena las imágenes es llamado: The Docker registry The Docker Registry Arquitectura de Docker The core of microservices arquitecture
  • 24. Hay un área donde todas las imágenes de Docker residen en nuestro host, una directorio local o docker images area. Para poder listar las imágenes locales almacenadas podemos ejecutar el siguiente comando: docker images Docker Images Area Arquitectura de Docker The core of microservices arquitecture
  • 25. Entonces, queremos ejecutar un contenedor en una entorno local, un ejemplo de un comando sería: docker run -d -p 8080:80 nginx:latest Sin embargo, como es el primero en el que ejecutamos este comando, no lo encontraremos en el host local. Arquitectura de Docker ? The core of microservices arquitecture
  • 26. Después de mirar localmente y fallar, va a solicitar al próximo docker registry la imagen solicitada. Arquitectura de Docker ? The core of microservices arquitecture
  • 27. Arquitectura de Docker Después de encontrar el contenedor en el docker registry publico, se inicia un PULLING de extracción descargando la imagen a nuestro host. The core of microservices arquitecture
  • 28. Arquitectura de Docker The core of microservices arquitecture Luego que la imagen este descarga localmente, el segundo paso es iniciar el contenedor. Después de esto, el contenedor está listo para ser utilizado.
  • 29. Intentando el mismo comando por segunda vez: docker run -d -p 8080:80 nginx:latest Encontrará la imagen localmente y ejecutará de forma mas rápida. Arquitectura de Docker http:// ? The core of microservices arquitecture
  • 30. Arquitectura de Docker The core of microservices arquitecture Al encontrar localmente, todo el proceso es mucho más rápido a partir de ahora. Cualquier nuevo contenedor necesario será utilizado localmente.
  • 31. The core of microservices arquitecture Glosario breve de términos Contenedor Es un empaquetado estándar de software ligero que proporciona un entorno portable auto-contenido, con los elementos necesarios (variables, librerías) para que una aplicación o servicio pueda ejecutarse sin problemas en el espacio del kernel del sistema operativo anfitrión.
  • 32. The core of microservices arquitecture Glosario breve de términos Docker Es una tecnología que le permite construir, ejecutar, probar e implementar aplicaciones basadas en contenedores. Docker empaqueta unidades estándar de software llamada contenedores que cumplen con las 3 características vistas anteriormente. ( Estándar, Auto-sustentado , Aislado)
  • 33. The core of microservices arquitecture Glosario breve de términos Docker image (image) Son paquetes ejecutables que contienen una configuración conformada por un sistema operativo base y variables de entornos predefinidas. Algunas llegan a ser tan específicas que incluso pueden incluir también el código de una aplicación y su tiempo de ejecución, permitiéndonos crear los contenedores con el entorno que requerimos basados en estos paquetes ejecutables pre-modelados.
  • 34. The core of microservices arquitecture Glosario breve de términos Dockerfile Es un archivo de texto que contiene todos los comandos que se usaran para construir una imagen Docker de forma automatizada.
  • 35. The core of microservices arquitecture Glosario breve de términos Container Registry Es un servicio publico o privado capaz de almacenar y distribuir nuestras imágenes de docker.
  • 36. The core of microservices arquitecture Glosario breve de términos Docker Build Nos permite construir una imagen siguiendo las instrucciones escritas en el archivo dockerfile.
  • 37. The core of microservices arquitecture Glosario breve de términos Docker Pull Nos permite descargar una imagen del docker registry.
  • 38. The core of microservices arquitecture Glosario breve de términos Docker Push Nos permite subir una imagen a un Docker registry remoto.
  • 39. The core of microservices arquitecture Laboratorio Instalación de Docker
  • 40. Como debe ser, todo vía Linux cli: #Instalamos las dependencias necesarias: yum install -y yum-utils device-mapper-persistent-data lvm2 #Agregamos el repositorio necesario para la instalación de docker yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo #Instamos el paquete que contiene docker yum install -y docker-ce #Habilitamos docker para posteriores reinicios: systemctl enable docker #Iniciamos docker systemctl start docker The core of microservices arquitecture Instalación de Docker
  • 41. Lo primero que debemos saber, es qué versión de Docker estamos ejecutando: Client: Version: 17.12.1-ce API version: 1.35 Go version: go1.9.4 Git commit: 7390fc6 Built: Tue Feb 27 22:15:20 2018 OS/Arch: linux/amd64 Server: Engine: Version: 17.12.1-ce API version: 1.35 (minimum version 1.12) Go version: go1.9.4 Git commit: 7390fc6 Built: Tue Feb 27 22:17:54 2018 OS/Arch: linux/amd64 Experimental: false The core of microservices arquitecture Instalación de Docker
  • 42. The core of microservices arquitecture Laboratorio Corriendo un Contenedor
  • 43. Intentamos ejecutar un contenedor con el siguiente comando: docker run --rm -ti centos:latest /bin/bash Unable to find image 'centos:latest' locally latest: Pulling from library/centos 5e35d10a3eba: Pull complete Digest: sha256:dcbc4e5e7052ea2306eed59563da1fec09196f2ecacbe042acbdcd2b44b05270 Status: Downloaded newer image for centos:latest Si despues de la ejecucion aprecias la siguiente linea: [root@1179d700a997 /]# Felicidades estas en tu primer contendor --rm: Borra el contenedor si su estado ejecucion toma el valor de “exits” -t: Asigna un tty simulado -i: Mantiene la interaccion con el container abierta via entrada estandart(teclado)(STDIN) tty: teletype controlador de sub-sistemas y señales de control de unix/linux ¿Que significa? The core of microservices arquitecture Corriendo un Contenedor
  • 44. The core of microservices arquitecture Ahora, escriba exit e intente ejecutarlo de nuevo: [root@1179d700a997 /]# exit exit Ahora volvemos a ejecutar el siguiente comando: docker run --rm -ti centos:latest /bin/bash [root@443583d1a4c0 /]# Corriendo un Contenedor
  • 45. ¿Que ha pasado ahora ? ¿Por qué era mucho más rápido que la anterior? ¿Por qué cambió el número en la posición de host? The core of microservices arquitecture Corriendo un Contenedor
  • 46. everis.com /meetup /test :1.0 Registry address Namespace image tag The core of microservices arquitecture Corriendo un Contenedor
  • 47. Cada vez que ejecuta o inicia un contenedor, primero comprueba si hay uno localmente. Si no, se descargará. Hagamos una lista de todas las imágenes disponibles: Ejecutamos: docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 2d194b392dd1 4 days ago 195MB El comando “docker images" lista todos las imágenes disponibles localmente para usted. Si usas nuevamente el comando "docker run", no volverá a descargar. The core of microservices arquitecture Corriendo un Contenedor
  • 48. Suponiendo que ya no necesitamos la imagen de "centos", podemos eliminar esta imagen escribiendo: docker rmi centos Untagged: centos:latest Untagged: centos@sha256:dcbc4e5e7052ea2306eed59563da1fec09196f2ecacbe042acbdcd2b44b05270 Deleted: sha256:2d194b392dd16955847a14f969b2dd319251471ffa6356be6d8f16c5bf53db9b Deleted: sha256:b03095563b7956c62ae5a6d20e5959a950e3b1a96d4404c00b7da7393847494a docker images REPOSITORY TAG IMAGE ID CREATED SIZE The core of microservices arquitecture Corriendo un Contenedor
  • 49. Ahora, vamos a realizar un pequeño experimento. Vamos a ejecutar la imagen centos nuevamente y creamos un archivo simple dentro del contenedor: # docker run --rm -ti centos:latest /bin/bash [root@de31ec6789fe /]# touch helloworld.txt [root@de31ec6789fe /]# ls -la helloworld.txt -rw-r--r--. 1 root root 0 May 17 16:28 helloworld.txt [root@de31ec6789fe /]# exit exit Después de salir, vamos a ejecutar nuevamente la misma imagen centos y verificar la existencia del archivo creado anteriormente: docker run --rm -ti centos:latest /bin/bash [root@c23a8134ab5b /] # ls -la helloworld.txt ls: cannot access helloworld.txt: No such file or directory [root@c23a8134ab5b /]# The core of microservices arquitecture Corriendo un Contenedor
  • 50. ¿Por qué el archivo ya no existe dentro de un contenedor? The core of microservices arquitecture Corriendo un Contenedor
  • 51. Hay una opción dentro de la larga lista de opciones del cli de docker en cuanto a RUN se refiere, esta es la opción ‘-v ’. Esta permite exponer los contenidos de un directorio desde nuestro sistema operativo anfitrión por ejemplo al interior de un contendor. mkdir -p /root/outside docker run --rm -ti -v /root/outside:/root/inside centos:latest /bin/bash [root@de31ec6789fe /]# touch /root/inside/helloworld.txt [root@de31ec6789fe /]# echo "Hello World" > /root/inside/helloworld.txt [root@de31ec6789fe /]# cat /root/inside/helloworld.txt Hello World [root@de31ec6789fe /]# exit exit The core of microservices arquitecture Corriendo un Contenedor
  • 52. Si ejecuta el mismo comando nuevamente, apuntando al mismo directorio externo, el contenedor se creará con una ruta montada con el siguiente contenido: docker run --rm -ti -v /root/outside:/root/inside centos:latest /bin/bash [root@c39d629a71a3 /]# cat /root/inside/helloworld.txt Hello World docker run -d nginx:latest 682f641bea4a6e84c62ee87f593cfeb7f6e8c842060bf53ad28b1e4661e7be7b -d: Corre un contenedor en background y muestra su id The core of microservices arquitecture Corriendo un Contenedor
  • 53. docker run -d --name httpd-test httpd:latest 682f641bea4a6e84c62ee87f593cfeb7f6e8c842060bf53ad28b1e4661e7be7b docker logs –f httpd-test AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message [Sat Mar 10 14:30:27.962818 2018] [mpm_event:notice] [pid 1:tid 139706447468416] AH00489: Apache/2.4.29 (Unix) configured -- resuming normal operations [Sat Mar 10 14:30:27.963819 2018] [core:notice] [pid 1:tid 139706447468416] AH00094: Command line: 'httpd -D FOREGROUND' -d: Corre un contenedor en background y muestra su id --name: Asigna un nombre al contenedor docker logs: Permite visualizar logs de un contenedor -f: Da seguimiento a la salida por pantalla del logs The core of microservices arquitecture Corriendo un Contenedor
  • 54. ¿Qué tipo de aplicaciones es importante para que algún contenido sea persistente? The core of microservices arquitecture Corriendo un Contenedor
  • 55. The core of microservices arquitecture The One Que es el proceso 1
  • 56. The core of microservices arquitecture The One Los contenedores de docker son efímeros, quiere decir que existen para cumplir su propósito . Pero ¿Cómo sabemos cuál es el propósito de cada contenedor? La respuesta es muy simple: el proceso con el PID n.º 1 Al correr un contenedor, especificamos un comando para que éste lo ejecute. Este comando se vuelve el proceso con el PID 1 en el sistema operativo dentro del contenedor.
  • 57. The core of microservices arquitecture The One Mientras este proceso se esté ejecutando, el contenedor estará con vida. Pero una vez que el comando haya finalizado su ejecución o se haya interrumpido su flujo, entonces el contenedor habrá finalizado su propósito y morira.
  • 58. The core of microservices arquitecture The One docker run --name nginx-test -d nginx:latest c6a09929186924098d8866075aedfa1506d5390a40791f2932495b54535b15b6 docker exec -ti nginx-test apt-get update && apt-get install -y procps root@c6a099291869:/# ps -x PID TTY STAT TIME COMMAND 1 ? Ss 0:00 nginx: master process nginx -g daemon off; 6 pts/0 Ss 0:00 bash 254 pts/0 R+ 0:00 ps -x
  • 59. The core of microservices arquitecture Construyendo una imagen de Docker
  • 60. Para construir sus propias imágenes, necesitamos un archivo con todos los comandos necesarios dentro. Este archivo especial se llama: Dockerfile Con este archivo, usamos un comando para construir nuestra imagen de esta manera: docker build –t myjava-base-image . The core of microservices arquitecture una imagen de Docker Construyendo
  • 61. Una vez que nuestra imagen esté lista, podemos almacenarla en un archivo con fines de respaldo. The core of microservices arquitecture TAR file una imagen de Docker Construyendo
  • 62. O simplemente un PUSH a un determinador Registry, para poder distribuirlo con mayor facilidad. The core of microservices arquitectureThe core of microservices arquitecture una imagen de Docker Construyendo
  • 63. Ahora, vamos a crear un contenedor con una Máquina Virtual Java. FROM centos:latest LABEL docker build -t myjava-base-image . ENV JAVA_HOME /usr/java/jdk1.8.0_161 ENV PATH="$PATH:$JAVA_HOME/bin" RUN yum install -y wget && wget https://mirror.its.sfu.ca/mirror/CentOS-Third-Party/NSG/common/x86_64/jdk-8u144-linux- x64.rpm && rpm -ivh jdk-8u144-linux-x64.rpm && rm -rf jdk-8u144-linux-x64.rpm The core of microservices arquitecture una imagen de Docker Construyendo
  • 64. Después de eso, vamos a ejecutar el siguiente comando, que tomará las instrucciones en el archivo "Dockerfile" y creará una imagen para nosotros: docker build -t myjava-base-image . Sending build context to Docker daemon 355.2MB Step 1/5 : FROM centos:latest ---> 2d194b392dd1 Step 2/5 : LABEL docker build -t myjava-base-image . ---> Using cache ---> cab5055b4003 Step 3/5 : ENV JAVA_HOME /usr/java/jdk1.8.0_161 ---> Using cache ---> c3d5f8947a38 Step 4/5 : ENV PATH="$PATH:$JAVA_HOME/bin" ---> Using cache ---> 3fb310ed8802 Step 5/5 : RUN yum install -y wget && wget https://mirror.its.sfu.ca/mirror/CentOS-Third- Party/NSG/common/x86_64/jdk-8u144-linux-x64.rpm && rpm -ivh jdk-8u144-linux-x64.rpm && rm -rf jdk-8u144-linux-x64.rpm ---> Running in d888f3c7e023 The core of microservices arquitecture una imagen de Docker Construyendo
  • 65. docker images REPOSITORY TAG IMAGE ID CREATED SIZE myjava-base-image latest 5ecaec56437b 2 minutes ago 650MB docker history myjava-base-image:latest IMAGE CREATED CREATED BY SIZE COMMENT 5ecaec56437b 7 minutes ago /bin/sh -c yum install -y wget && wget h… 455MB 3fb310ed8802 9 minutes ago /bin/sh -c #(nop) ENV PATH=/usr/local/sbin:… 0B c3d5f8947a38 9 minutes ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/java/j… 0B cab5055b4003 9 minutes ago /bin/sh -c #(nop) LABEL docker=build -t myj… 0B 2d194b392dd1 4 days ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B <missing> 4 days ago /bin/sh -c #(nop) LABEL name=CentOS Base Im… 0B <missing> 4 days ago /bin/sh -c #(nop) ADD file:8d83f3e2c14f39e7f… 195MB The core of microservices arquitecture una imagen de Docker Construyendo
  • 66. docker history centos:latest IMAGE CREATED CREATED BY SIZE COMMENT 2d194b392dd1 4 days ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B <missing> 4 days ago /bin/sh -c #(nop) LABEL name=CentOS Base Im… 0B <missing> 4 days ago /bin/sh -c #(nop) ADD file:8d83f3e2c14f39e7f… 195MB The core of microservices arquitecture una imagen de Docker Construyendo
  • 67. docker build -t myjava-base-image --build-arg USER=app-ms . FROM centos:latest LABEL docker build -t myjava-base-image --build-arg USER=app-ms . ARG USER ENV JAVA_HOME /usr/java/jdk1.8.0_161 ENV PATH="$PATH:$JAVA_HOME/bin" RUN yum install -y wget && useradd ${USER} && wget https://mirror.its.sfu.ca/mirror/CentOS-Third-Party/NSG/common/x86_64/jdk-8u144-linux-x64.rpm && rpm -ivh jdk-8u144-linux-x64.rpm && rm -rf jdk-8u144-linux-x64.rpm The core of microservices arquitecture una imagen de Docker Construyendo
  • 68. docker history myjava-base-image:latest IMAGE CREATED CREATED BY SIZE COMMENT 41c0f775bfea 3 minutes ago |1 USER=app-ms /bin/sh -c yum install -y wge… 455MB 3eb5d36afc7b 16 minutes ago /bin/sh -c #(nop) ENV PATH=/usr/local/sbin:… 0B 40f141fc385c 16 minutes ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/java/j… 0B 205eb075ba1b 16 minutes ago /bin/sh -c #(nop) ARG USER 0B cab5055b4003 About an hour ago /bin/sh -c #(nop) LABEL docker=build -t myj… 0B 2d194b392dd1 4 days ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B <missing> 4 days ago /bin/sh -c #(nop) LABEL name=CentOS Base Im… 0B <missing> 4 days ago /bin/sh -c #(nop) ADD file:8d83f3e2c14f39e7f… 195MB The core of microservices arquitecture una imagen de Docker Construyendo ¿Nueva Capa?
  • 69. The core of microservices arquitecture Salva y transporta tu contenedor Laboratorio
  • 70. También podemos guardar nuestra imagen de Docker como un archivo y guardarla para fines de respaldo: docker save --output myjava-base-image.tar myjava-base-image:latest Más tarde, cuando estemos listos para usar esta imagen nuevamente, lo único que tenemos que hacer es cargar desde el archivo creado: docker load --input myjava-base-image.tar cdb875d1e9a6: Loading layer [=========================>] 164.6 MB/164.6 MB d17faadb3007: Loading layer [=========================>] 76.42 MB/76.42 MB Loaded image: myjava-base-image:latest The core of microservices arquitecture Salva y transporta tu contenedor
  • 71. The core of microservices arquitecture Dockerfile mejores prácticas Correr un solo proceso por contenedor No instale paquetes innecesarios Divida comandos de ejecución extensos en múltiples línea para hacerlos más legibles Organice las variables y argumentos en múltiples líneas concatenadas Escribir el Dockerfile con un orden, desde el comando mas inmutable hasta aquel que podría modificarse en cada complicación , por ejemplo el copiado de un aplicativo. Utilizar en lo posible una imagen oficial como base al construir sus propias imágenes Las imágenes deben tener un usuario diferente a root No escribir contraseñas dentro del Dockerfile
  • 72. The core of microservices arquitecture