+ All Categories
Home > Internet > Jug málaga docker 101 - final

Jug málaga docker 101 - final

Date post: 15-Apr-2017
Category:
Upload: julio-palma-vazquez
View: 218 times
Download: 0 times
Share this document with a friend
32
Introducción Docke 23-Feb
Transcript
Page 1: Jug málaga   docker 101 - final

Introducción aDocker

23-Feb 2017

Page 2: Jug málaga   docker 101 - final

• Arquitecto en Coritel Málaga• Más de 16 años diseñando y desarrollando

aplicaciones Java.• Ponente en eventos locales (UMA Hackers

Week 2016) e internacionales (Java One 2015 & 2016).• Aficionado a al ciencia ficción y el ciclismo

de montaña.• Podéis encontrarme en twitter (@restalion)

o github (http://github.com/restalion)

Page 3: Jug málaga   docker 101 - final

Sobre la sesión• Instalación• Conceptos generales• docker-machine• Docker Hub• docker• Creación de aplicación SpringBoot de ejemplo• Dockerfile• Generación de imágenes con Maven• Push y Pull a Docker Hub• Envío de parámetros• Docker Compose

Page 4: Jug málaga   docker 101 - final

Instalación de Docker• Docker dispone de instalaciones paraMac,

Windows, Windows Server y Linux• https://www.docker.com/products/overview

• También tiene soporte para plataformas en la cloud como AWS o Azure.

Do It Yourself

Page 5: Jug málaga   docker 101 - final

Servidores• Podemos representar todos los

recursos de un servidor como un gran cubo vacío.

Page 6: Jug málaga   docker 101 - final

OS

Servidores• Podemos representar todos los

recursos de un servidor como un gran cubo vacío.• El cubo empezamos a rellenarlo

con el sistema operativo que ocupa una parte del espacio disponible.

Page 7: Jug málaga   docker 101 - final

OS

Servidores

Librerías

• Podemos representar todos los recursos de un servidor como un gran cubo vacío.• El cubo empezamos a rellenarlo

con el sistema operativo que ocupa una parte del espacio disponible.• Librerías necesarias para la

ejecución de nuestro programa.

Page 8: Jug málaga   docker 101 - final

OS

Servidores

Librerías

Aplicación 1

• Podemos representar todos los recursos de un servidor como un gran cubo vacío.• El cubo empezamos a rellenarlo

con el sistema operativo que ocupa una parte del espacio disponible.• Librerías necesarias para la

ejecución de nuestro programa.• Y finalmente nuestra aplicación.

Page 9: Jug málaga   docker 101 - final

OS

Servidores

Librerías

Aplicación 1

• Podemos representar todos los recursos de un servidor como un gran cubo vacío.• El cubo empezamos a rellenarlo

con el sistema operativo que ocupa una parte del espacio disponible.• Librerías necesarias para la

ejecución de nuestro programa.• Y finalmente nuestra aplicación.

¿Cómo escalamossiguiendo este esquema?

Page 10: Jug málaga   docker 101 - final

HOST OS

Máquinas virtuales

Librerías

Aplicación 1

Hypervisor

GUEST OS

Librerías

Aplicación 2

GUEST OS

Librerías

Aplicación 3

GUEST OS

• Podemos mejorar el uso de los recursos de la máquina mediante la virtualización.• Por cada máquina virtual tenemos

que instalar un sistema operativo que también consume recursos.

Page 11: Jug málaga   docker 101 - final

Librerías

Aplicación 4

Librerías

Aplicación 1 Aplicación 2 Aplicación 3

Librerías

Aplicación 7

Librerías

Docker Engine

HOST OS

Contenedores

Librerías

Aplicación 5

Librerías• El uso de contenedores propone la

reutilización del sistema operativo pero manteniendo el aislamiento de cada aplicación.• Así mejoramos el uso de los

recursos aumentando la densidad de aplicaciones.

Page 12: Jug málaga   docker 101 - final

Docker-machine• Nos permite instalar docker en máquinas virtuales y gestionar los

hosts con una serie de comandos.• Los comandos más comunes para empezar son:• create: Permite crear una máquina docker. Puede ser virtual u hospedada en

la cloud.• ls: lista las máquinas virtuales disponibles.• kill: fuerza la parada de una máquina virtual.• env: informa las variables de sistema para trabajar con una máquina.• start/stop: inicia o detiene una máquina.• ssh: abre una consola contra la máquina.• …

Page 13: Jug málaga   docker 101 - final

Docker-machine• Para nuestro ejemplo sobre una máquina Windows crearemos una

máquina local usando el driver de virtualbox:• docker-machine create --driver virtualbox malagaJUG

C:\Users\restalion>docker-machine create --driver virtualbox malagaJUGRunning pre-create checks...(malagaJUG) Image cache directory does not exist, creating it at C:\Users\julio.palma.vazquez\.docker\machine\cache...(malagaJUG) No default Boot2Docker ISO found locally, downloading the latest release...(malagaJUG) Latest release for github.com/boot2docker/boot2docker is v1.13.1(malagaJUG) Downloading C:\Users\restalion\.docker\machine\cache\boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v1.13.1/boot2docker.iso...(malagaJUG) 0%....10%....20%....30%....40%....50%....60%....70%....80%....90%....100%Creating machine...(malagaJUG) Copying C:\Users\restalion\.docker\machine\cache\boot2docker.iso to C:\Users\restalion\.docker\machine\machines\malagaJUG\boot2docker.iso...(malagaJUG) Creating VirtualBox VM...(malagaJUG) Creating SSH key...(malagaJUG) Starting the VM...(malagaJUG) Check network to re-create if needed...(malagaJUG) Windows might ask for the permission to create a network adapter. Sometimes, such confirmation window is minimized in the taskbar.(malagaJUG) Found a new host-only adapter: "VirtualBox Host-Only Ethernet Adapter #3"(malagaJUG) Windows might ask for the permission to configure a network adapter. Sometimes, such confirmation window is minimized in the taskbar.(malagaJUG) Windows might ask for the permission to configure a dhcp server. Sometimes, such confirmation window is minimized in the taskbar.(malagaJUG) Waiting for an IP...Waiting for machine to be running, this may take a few minutes...Detecting operating system of created instance...Waiting for SSH to be available...Detecting the provisioner...Provisioning with boot2docker...Copying certs to the local machine directory...Copying certs to the remote machine...Setting Docker configuration on the remote daemon...Checking connection to Docker...

Docker is up and running!To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env malagaJUG

Do It Yourself

Page 14: Jug málaga   docker 101 - final

Docker-machine• Ejecutamos el comando propuesto:• docker-machine env malagaJUG

C:\Users\restalion>docker-machine env malagaJUGSET DOCKER_TLS_VERIFY=1SET DOCKER_HOST=tcp://192.168.99.100:2376SET DOCKER_CERT_PATH=C:\Users\restalion\.docker\machine\machines\malagaJUGSET DOCKER_MACHINE_NAME=malagaJUGSET COMPOSE_CONVERT_WINDOWS_PATHS=trueREM Run this command to configure your shell:REM @FOR /f "tokens=*" %i IN ('docker-machine env malagaJUG') DO @%i

C:\Users\restalion>@FOR /f "tokens=*" %i IN ('docker-machine env malagaJUG') DO @%i

Do It Yourself

Page 15: Jug málaga   docker 101 - final

DockerHub• Se trata de un repositorio de imágenes

• https://hub.docker.com/

• Podemos encontrar imágenes oficiales de muchos productos• Es necesario registro pero el servicio es gratuito• Existe la posibilidad de tener repositorios privados (con coste)• Un ejemplo de uso sería descargarnos y ejecutar la imagen de MongoDB:

• docker run -p 27017:27017 mongo

• El comando se descargará la imagen de mongo y dejará operativa una instancia de la misma en el puerto que se le indique.• El parámetro -p nos permite mapear los puertos al valor que deseemos.

Page 16: Jug málaga   docker 101 - final

Docker• Comando para interactuar con imágenes y contenedores:• docker images: muestra las imágenes disponibles• docker ps: muestra los contenedores• docker rm/rmi: elimina los contenedore/imágenes• docker run: ejecuta un comando en un nuevo contenedor• docker start/stop: inicia o detiene un contenedor existente• docker build: construye una imagen a partir de un fichero Dockerfile• docker push/pull: envía/recupera una imagen desde un registro

Page 17: Jug málaga   docker 101 - final

Spring boot application• La aplicación spring boot más sencilla posible que utilice una BBDD

mongoDB:• Vamos a http://start.spring.io/• En dependencies seleccionamos: MongoDB, Rest Repositories, Lombok

Do It Yourself

Page 18: Jug málaga   docker 101 - final

Spring boot application• La aplicación spring boot más sencilla posible que utilice una BBDD

mongoDB:• Vamos a http://start.spring.io/• En dependencies seleccionamos: MongoDB, Rest Repositories, Lombok• Importamos el proyecto descargado en nuestro IDE favorito (Eclipse en mi

caso)• Creamos una entidad sencilla.

Do It Yourself

Page 19: Jug málaga   docker 101 - final

Spring boot application• La aplicación spring boot más sencilla posible que utilice una BBDD

mongoDB:• Vamos a http://start.spring.io/• En dependencies seleccionamos: MongoDB, Rest Repositories, Lombok• Importamos el proyecto descargado en nuestro IDE favorito (Eclipse en mi

caso)• Creamos una entidad sencilla.• Creamos el dao para ésa entidad.

Do It Yourself

Page 20: Jug málaga   docker 101 - final

Spring boot application• La aplicación spring boot más sencilla posible que utilice una BBDD

mongoDB:• Vamos a http://start.spring.io/• En dependencies seleccionamos: MongoDB, Rest Repositories, Lombok• Importamos el proyecto descargado en nuestro IDE favorito (Eclipse en mi

caso)• Creamos una entidad sencilla.• Creamos el dao para ésa entidad.• Configuramos la aplicación para usar la BBDD de docker.

Do It Yourself

Page 21: Jug málaga   docker 101 - final

Spring boot application• La aplicación spring boot más sencilla posible que utilice una BBDD

mongoDB:• Vamos a http://start.spring.io/• En dependencies seleccionamos: MongoDB, Rest Repositories, Lombok• Importamos el proyecto descargado en nuestro IDE favorito (Eclipse en mi caso)• Creamos una entidad sencilla.• Creamos el dao para ésa entidad.• Configuramos la aplicación para usar la BBDD de docker.

• … o clonamos el código desde github:• https://github.com/restalion/docker-demo

Do It Yourself

Page 22: Jug málaga   docker 101 - final

Dockerfile• Fichero que nos permite describir un contenedor Docker para nuestra aplicación• El formato del fichero es el siguiente:

# ComentarioINSTRUCCIÓN argumentos

• Contiene una serie de instrucciones:• FROM <imagen>• RUN <comando>• CMD comando parametro1 parametro2• EXPOSE <port>• ADD <origen> <destino>• VOLUME <directorio>• ENV <opciones>

Page 23: Jug málaga   docker 101 - final

Dockerfile# imagen origenFROM azul/zulu-openjdk:8u121

# volumen necesario para el contenedor tomcatVOLUME /tmp

# modificamos el nombre de la aplicaciónADD docker-demo-0.1.0-SNAPSHOT.jar app.jar

# actualizamos el timestampRUN sh -c 'touch /app.jar'

# creamos las opciones de entorno de javaENV JAVA_OPTS=""

# marcamos como punto de entrada la ejecución de nuestra aplicaciónENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

# Exponemos el puerto 8080EXPOSE 8080

Do It Yourself

Page 24: Jug málaga   docker 101 - final

Genera tus imágenes como Spotify• Una vez creado el fichero Docker lo situamos dentro del proyecto en

la ruta /src/main/docker/Dockerfile• Podemos ejecutar la generación de la imagen con: • mvn package docker:build

• Una vez ejecutado tendremos la imagen instalada en nuestra máquina local.• Podemos ejecutarlo y realizar directamente el push:• mvn package docker:build -DpushImage

Do It Yourself

Page 25: Jug málaga   docker 101 - final

Espíritu colaborador:Añade tus imágenes a docker hub• Es necesario estar logado para poder interactuar con el docker hub• docker login

• Añadir una imagen generada es tan sencillo como hacer un push:• docker push <nombre imagen>:<versión>

• Descargarla es tan sencillo como hacer un pull:• docker pull <nombre imagen>:<versión>

• Podéis probar a descargar la imagen que hemos creado para esta demo:• docker pull restalion/docker-demo:latest

Do It Yourself

Page 26: Jug málaga   docker 101 - final

Espíritu colaborador:Añade tus imágenes a docker hubLa imagen de la aplicación usada para la presentación de hoy podéis descargarla desde el docker hub:https://hub.docker.com/r/restalion/docker-demo/

Do It Yourself

Page 27: Jug málaga   docker 101 - final

Enviando parámetros a la imagen• En el momento de crear las propiedades de la aplicación hemos

tenido la precaución de permitir que se envíen propiedades:spring.data.mongodb.port=${MONGO_PORT:27017}server.port=${PORT:8080}spring.data.mongodb.host=${MONGO_IP:192.168.99.100}spring.data.mongodb.database=test

• Podemos ejecutar las imágenes informando los parámetros:docker run -e "PORT=8082" -p 8082:8082 restalion/docker-demo:latest

Do It Yourself

Page 28: Jug málaga   docker 101 - final

Docker Compose• Normalmente nuestras “soluciones” están

compuestas por varias aplicaciones.• Podemos levantar los contenedores “a

mano” como hemos hecho hasta ahora…• … o podemos usar Docker Compose

docker-demo

mongo

Page 29: Jug málaga   docker 101 - final

Docker Composemongodb: image: mongo:latest ports: - "27017:27017" command: mongod --smallfiles

app: image: restalion/docker-demo:latest links: - mongodb ports: - "8080:8080"

docker-demo

mongo

Do It Yourself

Page 30: Jug málaga   docker 101 - final

Docker Compose• Una vez generado el fichero docker-

compose.yml para ejecutarlo:• docker-compose up

• Información sobre docker compose:• https://docs.docker.com/compose/compose-

file/

docker-demo

mongo

Do It Yourself

Page 31: Jug málaga   docker 101 - final

Preguntas

Page 32: Jug málaga   docker 101 - final

Referencias• docker-machine: https://docs.docker.com/machine/• docker: https://docs.docker.com/engine/reference/commandline/docker/• Dockerfile: https://docs.docker.com/engine/reference/builder/• Compose file: https://docs.docker.com/compose/compose-file/


Recommended