Despliegue de Aplicaciones de Docker
Evolución y Gestión de la Configuración
UNIVERSIDAD LIBRE SECCIONAL CALI
FACULTAD DE INGENIERIA
SISTEMAS OPERATIVOS
Ing. Esp. Fernando Velez Varela, MSc
https://docs.docker.com/engine/installation/
Descarga Docker
INTRODUCCIÓN A DOCKER
¿Qué es Docker?
• Docker es un software para la gestión de contenedores
¿Qué es un
contenedor?
• Una forma de empaquetar software en un
formato que incluye todo lo necesario para
hacerlo funcionar y se ejecuta aislado del
resto de la máquina
• Tiene dos conceptos muy relacionados:
– La imagen, que es un paquete
ejecutable que incluye todo lo necesario
para ejecutar un software
– El contenedor, que es la instancia en
ejecución de una imagen, es decir, lo
que la imagen
¿Y esto no es lo mismo que una máquina virtual?
PRIMEROS PASOS
Instala Docker
(si no funciona http://play-with-docker.com )
Nuestro “hello world” con Docker
> docker run hello-world
Docker CLI
Lanzar una imagen
Nombre de la imagen
¿Qué pasó?
Otro ejemplo
> docker run -i -t ubuntu /bin/bash
Interactivo
Comando a ejecutar
Otro más
> docker run –p 8000:80 -d
kitematic/hello-world-nginx
Puerto local : Puerto contenedor
En segundo plano
Otro más
> docker run -p 8010:80 -d -v
/c/Users/me/Desktop/nginx_files:/website_files
kitematic/hello-world-nginx
En Linux y Mac hay que poner la ruta completa.
Si se usa Windows 10 hay que poner C:/Users…
Edita el index.html que ha aparecido en nginx_files y prueba cómo se actualiza dinámicamente
¿Puedo tener más de una máquina?
> docker ps
Esta es una lista de comandos básicos:
docker run -d -p 4000:80 friendlyname#Run "friendlyname" mapping port 4000 to 80
docker container ls # List all running containers
docker container ls -a # List all containers, even those not running
docker container stop <hash> # Gracefully stop the specified container
docker container kill <hash> # Force shutdown of the specified container
docker container rm <hash> # Remove specified container from this machine
docker container rm $(docker container ls -a -q) # Remove all containers
docker image ls -a # List all images on this machine
docker image rm <image id> # Remove specified image from this machine
docker image rm $(docker image ls -a -q) # Remove all images from this machine
docker logs <containerName> # Shows the log of a container
¿Y de dónde salen las imágenes?
https://hub.docker.com
DOCKERIZANDO APLICACIONES
¿Qué queremos conseguir?
• Tener empaquetada nuestra aplicación y sus dependencias en una imagen
para poder desplegarla donde queramos simplemente con
> docker run miAplicacion
Imágenes de docker
• Una imagen es una colección de archivos
• Se parte de una imagen base y luego se construyen imágenes personalizadas
encima
• Un Dockerfile es un fichero que describe las instrucciones para construir una
nueva imagen
• Las imágenes están en capas y cada capa representa un diff de la capa
anterior
Pasos para Dockerizar una aplicación
Tener una
aplicación
desarrollada
Escribir un
Dockerfile
Construir la
imagen
Publicar la
imagen
(opcional)
Nuestra aplicación
• Un “Hello world” hecho en Java con Spring MVC
– Entrando en la ruta /greeting dentro de donde esté el WAR desplegado aparece un “Hola,
mundo!”
– Por ejemplo, si el WAR se despliega en hello-java-0.1.0, la ruta es hello-java-
0.1.0/greeting/
• Se empaqueta en un WAR
El Dockerfile
# Base image
FROM tomcat:8-jre8
# Copy war to tomcat path
ADD target/hello-java-0.1.0.war /usr/local/tomcat/webapps
Consejos para escribir Dockerfiles: https://docs.docker.com/engine/userguide/eng-
image/dockerfile_best-practices/
Construimos la imagen y la comprobamos
> docker build –t javahello .
> docker images
> docker run -it --rm -p 8080:8080 javahello
Publicar nuestra imagen (opcional)
• Hay que registrarse en DockerHub (http://hub.docker.com )
> docker login
> docker push mi_usuario/javahello
CONCLUSIONES
¿Para qué me sirve Docker como desarrollador?
• Entornos de desarrollo:
– Compartibles
– Seguros
– Limpios
– Extensibles
• Asegura el mismo entorno en:
– Todos los desarrolladores
– Pruebas
– Producción
• Facilita gestionar varias versiones de una misma aplicación
¿Para qué me sirve como administrador?
• Despliegue independiente de la tecnología (Java, PHP, NodeJS…)
• Elimina inconsistencias entre entornos de desarrollo, prueba y producción
• Permite desplegar de forma similar en:
– El portátil del desarrollador
– En máquinas virtuales en un data center
– En servidores cloud (AWS, Azure, DigitalOcean…)
– En una mezcla de ellos
• Ofrece facilidades de escalado y gestión de clusteres
Es MUCHO más ligero que una Máquina Virtual
Y sobre todo…
En Docker se recomienda seguir el principio de responsabilidad única:
1
Contenedor
1 Servicio
Recursos
• Cursos:
– Laboratorios virtuales gratuitos: http://training.play-with-docker.com/
– Cursos gratuitos oficiales: http://training.docker.com/category/self-paced-online
• Libros:
– Docker Cookbook: http://shop.oreilly.com/product/0636920036791.do
– Using Docker: http://shop.oreilly.com/product/0636920035671.do
– Docker: Up & Running: http://shop.oreilly.com/product/0636920036142.do
Agradecimientos
• Parte de estas transparencias están muy inspiradas (incluso copiadas) de una
presentación de Docker del Ingeniero Antonio Gámez
(http://personal.us.es/agamez2/conferencias/docker-y-kubernetes-el-futuro-de-
la-distribucion-de-aplicaciones-en-la-nube/ )

Linux y Docker, Practicas de Sistemas Operativos

  • 1.
    Despliegue de Aplicacionesde Docker Evolución y Gestión de la Configuración UNIVERSIDAD LIBRE SECCIONAL CALI FACULTAD DE INGENIERIA SISTEMAS OPERATIVOS Ing. Esp. Fernando Velez Varela, MSc
  • 2.
  • 3.
  • 4.
    ¿Qué es Docker? •Docker es un software para la gestión de contenedores
  • 5.
    ¿Qué es un contenedor? •Una forma de empaquetar software en un formato que incluye todo lo necesario para hacerlo funcionar y se ejecuta aislado del resto de la máquina • Tiene dos conceptos muy relacionados: – La imagen, que es un paquete ejecutable que incluye todo lo necesario para ejecutar un software – El contenedor, que es la instancia en ejecución de una imagen, es decir, lo que la imagen
  • 6.
    ¿Y esto noes lo mismo que una máquina virtual?
  • 8.
  • 9.
    Instala Docker (si nofunciona http://play-with-docker.com )
  • 10.
    Nuestro “hello world”con Docker > docker run hello-world Docker CLI Lanzar una imagen Nombre de la imagen
  • 11.
  • 12.
    Otro ejemplo > dockerrun -i -t ubuntu /bin/bash Interactivo Comando a ejecutar
  • 13.
    Otro más > dockerrun –p 8000:80 -d kitematic/hello-world-nginx Puerto local : Puerto contenedor En segundo plano
  • 14.
    Otro más > dockerrun -p 8010:80 -d -v /c/Users/me/Desktop/nginx_files:/website_files kitematic/hello-world-nginx En Linux y Mac hay que poner la ruta completa. Si se usa Windows 10 hay que poner C:/Users… Edita el index.html que ha aparecido en nginx_files y prueba cómo se actualiza dinámicamente
  • 15.
    ¿Puedo tener másde una máquina? > docker ps
  • 16.
    Esta es unalista de comandos básicos: docker run -d -p 4000:80 friendlyname#Run "friendlyname" mapping port 4000 to 80 docker container ls # List all running containers docker container ls -a # List all containers, even those not running docker container stop <hash> # Gracefully stop the specified container docker container kill <hash> # Force shutdown of the specified container docker container rm <hash> # Remove specified container from this machine docker container rm $(docker container ls -a -q) # Remove all containers docker image ls -a # List all images on this machine docker image rm <image id> # Remove specified image from this machine docker image rm $(docker image ls -a -q) # Remove all images from this machine docker logs <containerName> # Shows the log of a container
  • 17.
    ¿Y de dóndesalen las imágenes? https://hub.docker.com
  • 18.
  • 19.
    ¿Qué queremos conseguir? •Tener empaquetada nuestra aplicación y sus dependencias en una imagen para poder desplegarla donde queramos simplemente con > docker run miAplicacion
  • 20.
    Imágenes de docker •Una imagen es una colección de archivos • Se parte de una imagen base y luego se construyen imágenes personalizadas encima • Un Dockerfile es un fichero que describe las instrucciones para construir una nueva imagen • Las imágenes están en capas y cada capa representa un diff de la capa anterior
  • 21.
    Pasos para Dockerizaruna aplicación Tener una aplicación desarrollada Escribir un Dockerfile Construir la imagen Publicar la imagen (opcional)
  • 22.
    Nuestra aplicación • Un“Hello world” hecho en Java con Spring MVC – Entrando en la ruta /greeting dentro de donde esté el WAR desplegado aparece un “Hola, mundo!” – Por ejemplo, si el WAR se despliega en hello-java-0.1.0, la ruta es hello-java- 0.1.0/greeting/ • Se empaqueta en un WAR
  • 23.
    El Dockerfile # Baseimage FROM tomcat:8-jre8 # Copy war to tomcat path ADD target/hello-java-0.1.0.war /usr/local/tomcat/webapps Consejos para escribir Dockerfiles: https://docs.docker.com/engine/userguide/eng- image/dockerfile_best-practices/
  • 24.
    Construimos la imageny la comprobamos > docker build –t javahello . > docker images > docker run -it --rm -p 8080:8080 javahello
  • 25.
    Publicar nuestra imagen(opcional) • Hay que registrarse en DockerHub (http://hub.docker.com ) > docker login > docker push mi_usuario/javahello
  • 26.
  • 27.
    ¿Para qué mesirve Docker como desarrollador? • Entornos de desarrollo: – Compartibles – Seguros – Limpios – Extensibles • Asegura el mismo entorno en: – Todos los desarrolladores – Pruebas – Producción • Facilita gestionar varias versiones de una misma aplicación
  • 28.
    ¿Para qué mesirve como administrador? • Despliegue independiente de la tecnología (Java, PHP, NodeJS…) • Elimina inconsistencias entre entornos de desarrollo, prueba y producción • Permite desplegar de forma similar en: – El portátil del desarrollador – En máquinas virtuales en un data center – En servidores cloud (AWS, Azure, DigitalOcean…) – En una mezcla de ellos • Ofrece facilidades de escalado y gestión de clusteres
  • 29.
    Es MUCHO másligero que una Máquina Virtual Y sobre todo…
  • 30.
    En Docker serecomienda seguir el principio de responsabilidad única: 1 Contenedor 1 Servicio
  • 31.
    Recursos • Cursos: – Laboratoriosvirtuales gratuitos: http://training.play-with-docker.com/ – Cursos gratuitos oficiales: http://training.docker.com/category/self-paced-online • Libros: – Docker Cookbook: http://shop.oreilly.com/product/0636920036791.do – Using Docker: http://shop.oreilly.com/product/0636920035671.do – Docker: Up & Running: http://shop.oreilly.com/product/0636920036142.do
  • 32.
    Agradecimientos • Parte deestas transparencias están muy inspiradas (incluso copiadas) de una presentación de Docker del Ingeniero Antonio Gámez (http://personal.us.es/agamez2/conferencias/docker-y-kubernetes-el-futuro-de- la-distribucion-de-aplicaciones-en-la-nube/ )