Está en la página 1de 35

UNIVERSIDAD MAYOR DE SAN SIMON

FACULTAD DE CIENCIAS Y TECNOLOGIA


DIRECCIÓN DE POSGRADO

Docker Containers para una API Rest con


Spring Boot y Angular

TRABAJO FINAL PRESENTADO PARA OBTENER EL CERTIFICADO DE


DIPLOMADO EXPERTO EN DESARROLLO DE APLICACIONES
EMPRESARIALES VERSIÓN I

POSTULANTE : MARCO ANTONIO HERRERA PATZI

TUTOR : Lic. MSc. VALENTIN LAIME

Cochabamba – Bolivia
2018
Dedicatoria
Dedico este trabajo principalmente a Dios, por haberme
dado la vida y permitirme el haber llegado hasta este
momento. A mi madre Nemia Patzi, por ser el pilar más
importante en mi vida. A mi Esposa Anabel Nina, por
darme su amor, cariño y apoyo incondicional. A mi Hijo
Josias Abdiel Herrera Nina, por darme fuerzas y aliento
para culminar el proyecto.

Agradecimientos
A mi madre, esposa y mi hijo; por darme su amor, y
apoyo incondicional que me han ayudado y llevado hasta
donde estoy ahora en mi formación profesional.
A mis hermanos, por estar siempre presentes,
acompañándome y por sus consejos y apoyo moral.
A Digital Harbor por abrir sus puertas y permitir realizar
el diplomado de doble titulación y concluir una etapa en
mi formación profesional.
A mis amigos que me ayudaron y apoyaron en los
módulos de nuestro diplomado.
¡Muchas Gracias!

1
Índice de Contenido

Índice de Figuras ................................................................................................................................. 3

Introducción ......................................................................................................................................... 5

1 Generalidades .............................................................................................................................. 7

1.1 Antecedentes Generales ........................................................................................................ 7

1.2 Antecedentes Específicos....................................................................................................... 8

2 Metodología ................................................................................................................................. 8

3 Introducción a Docker ............................................................................................................... 8

3.1 Características ..................................................................................................................... 10

3.2 Imágenes .............................................................................................................................. 12

3.3 Contenedores ....................................................................................................................... 14

3.4 Comandos Docker ............................................................................................................... 16

3.5 Cuando usar Docker ........................................................................................................... 17

3.6 Instalación de Docker.......................................................................................................... 17

4 Dockerfile ................................................................................................................................... 18

4.1 Configuración ...................................................................................................................... 19

5 Dockerizar el Micro Servicio .................................................................................................. 21

6 Docker Compose ....................................................................................................................... 23

6.1 Instalación de Docker Compose .......................................................................................... 24

6.1.1. Descargar la última versión de Docker Compose: ......................................................... 24

6.1.2. Aplicar permisos ejecutables al binario: ........................................................................ 24

6.1.3. Probar la instalación. ...................................................................................................... 24

1
6.2 Iniciar los contenedores con Docker Compose ................................................................... 25

7 Dockerizar Spring Boot y Angular ........................................................................................ 28

7.1 Crear Archivo yml .............................................................................................................. 29

7.2 Configurar Archivo yml ...................................................................................................... 29

7.3 Levantar el archivo yml ...................................................................................................... 30

8 Conclusiones .............................................................................................................................. 31

2
Índice de Figuras

Figura 1: Introducción a Docker ............................................................................................................. 9

Figura 2: Características de Docker ....................................................................................................... 12

Figura 3 : Imágenes Docker ................................................................................................................. 13

Figura 4: Docker vs VM ....................................................................................................................... 15

Figura 5: Dockerfile ............................................................................................................................. 18

Figura 6 : Host – Port Contenedor ......................................................................................................... 20

Figura 7: Docker Hub ........................................................................................................................... 21

Figura 8: Docker-Compose ................................................................................................................... 25

Figura 9: Docker-compose redis y postgres ........................................................................................... 26

Figura 10: Docker-compose Spring boot y Angular............................................................................... 29

3
Resumen

En estos tiempos tan cambiantes en el mundo de la tecnología, hay muchos productos que nacen
en el mercado siendo muy prometedores pero que desaparecen tan rápido como han aparecido.

Pero ante las nuevas necesidades, el uso de nuevas tecnologías, estilos de desarrollo, acceso a los
datos de una forma rápida y eficaz, una solución ha aparecido con fuerza con el apoyo de las
empresas más importantes en el ámbito tecnológico:

Los contenedores Docker, los cuales proporcionan el mismo uso que las máquinas virtuales creadas
de la forma tradicional. Docker utiliza estos contenedores para aislar uno o más procesos. Estos
procesos en el Host necesitan Memoria, CPU, Acceso a la Red y espacio en disco, ofrece una
manera simple, eficiente y rápida de portar aplicaciones a través de sistemas y máquinas. Es ligero
y robusto, trabaja a través de Imágenes y contenedores diferenciados por un ID y un nombre.

Docker brinda una serie de comandos para interactuar con los contenedores que se crearán al
momento de desplegar una aplicación, con los cuales se podrá listar, construir, eliminar y muchas
opciones más.

A su vez la instalación no es complicada y docker permite instalarse en diferentes Sistemas


Operativos como: Mac Os, Windows y Linux.

Ofrece la herramienta docker-compose que es muy útil para el despliegue de múltiples servicios,
docker simplifica esta tarea, mediante un archivo .yml se podra configurar los servicios que se
necesitan según un orden prioritario y estos se empaquetarán en un solo contenedor, y con un solo
comando levanta todos los servicios, por ejemplo un proyecto hecho en Spring boot para interfaz
de usuario Angular y acceso a los datos Mysql.

Si bien se puede construir muchos contenedores y levantar uno por uno, si hay la posibilidad de
automatizar ese proceso, con docker-compose tenemos esa solución en la mano. De manera que la
tarea del administrador de Servidores o Devop se simplifica al momento de realizar el despliegue
de nuestros proyectos.

4
Introducción

Actualmente existen muchas empresas de software que se dedican al desarrollo de software de


calidad a empresas nacionales e internacionales, buscan ser auto sostenible, rentable e innovadores,
la complejidad de las aplicaciones es cada vez mayor y la necesidad de acelerar el desarrollo está
ejerciendo aún más presión sobre la infraestructura, procesos y servicios, con el uso de tecnologías
nuevas y lenguajes de programación acorde a la actualidad.

Esto genera la necesidad de buscar entornos o servidores donde se puedan alojar proyectos de
forma más eficiente y segura.

En el campo de la virtualización han surgido durante los últimos años diferentes soluciones que
han servido para ahorrar costes a las empresas y mejorar sus prestaciones. Pero ante las nuevas
necesidades, principalmente por el denominado Big Data, una solución ha aparecido con fuerza
con el apoyo de las empresas más importantes en el ámbito tecnológico: Docker el cual se ha
convertido en uno de los productos más solicitados y admirados de la actualidad.

La tarea de realizar el despliegue de proyectos es muy importante, hoy en día Docker es la solución
de servidores que muchas empresas de desarrollo de software está empleando en sus despliegues,
es un ambiente perfecto para que las aplicaciones puedan funcionar de forma correcta, debido a su
simplicidad y poder de ejecución.

Los contenedores son la vía que provee Docker para tener el mismo uso que proporcionan las
máquinas virtuales creadas de la forma tradicional. Docker utiliza estos contenedores para aislar
uno o más procesos. Estos procesos en el Host necesitan Memoria, CPU, Acceso a la Red y espacio
en disco, ofrece una manera simple, eficiente y rápida de portar aplicaciones a través de sistemas
y máquinas. Es ligero y delgado, lo que permite contener aplicaciones rápidamente y ejecutarlas
dentro de sus propios entornos seguros (a través de Contenedores).

5
El enfoque que se empleara en esta monografía es acerca de Docker Containers para una API
Rest con Spring Boot y Angular.

Se abordara los siguientes subtemas para la construcción de la aplicación:

 Introducción a Docker
 Instalación
 Docker File
 Docker Compose
 Micro servicios
 Desplegar Sprint Boot con Docker

6
1 Generalidades

En la actualidad vivimos en una era como muchos lo llaman la época de la tecnología, donde
se observa que el crecimiento de empresas de software va en aumento y Bolivia no es la
excepción. Esto es por la necesidad de sistematizar los procesos u operaciones de una empresa
y tener un software a la medida de sus necesidades.

Por ejemplo, una empresa que se dedica al servicio de comida necesita llevar las cuentas de
las ventas, ingresos, egresos y todo tipo de reportes que le ayude a tomar decisiones de una
manera más simple y efectiva, para solventar estas necesidades, surgieron las empresas de
desarrollo de software que brindan este servicio; en el caso de Bolivia hasta el 2018 existen
más 200 empresas de Informática registradas, dedicadas al desarrollo o soporte lógico de un
sistema informático (software), este aspecto es muy importante ya que un sistema tiene que
pasar las diferentes pruebas de testeo antes de pasar a producción y para ello se necesita de
ambientes donde los proyectos, productos (Sistema) estarán desplegados y alojados, con todas
las normas de seguridad y configuraciones necesarias.

La mayoría de las empresas de software en Bolivia están utilizando tecnologías, herramientas,


lenguajes, estilos, entornos, etc., actuales para el desarrollo de su producto.

1.1 Antecedentes Generales

El objetivo que se persigue es desarrollar un micro servicio con múltiples contenedores cada
uno con un servicio:
Spring Boot para la parte de backend usando Java y Maven, Angular Cli para la parte de
frontend o interfaz de usuario, Mysql para la conexión a la base de datos; todos estos servicios
contenerizarlos y empaquetarlos dentro de una imagen Docker y gracias a Docker-compose
una característica que proporciona Docker que se estará explicando más adelante, con un único
comando se podrá iniciar y desplegar todos los contenedores de una forma rápida, sencilla y
en el orden el cual lo hayamos definido.

7
1.2 Antecedentes Específicos

Con el objetivo de ofrecer, brindar una explicación clara al estudiante, profesional u otros
acerca de las herramientas que docker ofrece para colaborar en el despliegue de proyectos,
para ello se contemplara lo siguiente:
 Introducción a Docker e instalación.
 Explicación de los comandos básicos que docker requiere para ser ejecutado.
 Explicación sobre dockerfile y su alcance.
 Explicación de docker compose, su configuración y ejecución.
 Se realizará un ejemplo de docker-compose con spring boot y angular.

2 Metodología

Para el presente trabajo se utilizarán los siguientes métodos de investigación:

 Método Bibliográfico, debido a que se realizará la lectura y compilación de libros


relacionados al tema de estudio.
 Método Analítico, debido a que se procederá a revisar y analizar ordenadamente
documentos relacionados al tema de estudio, para la redacción del Plan de Emergencia.
 Método Empírico o de Campo, debido a que se utilizarán ejemplos de aplicación o
experiencias observadas en el caso de estudio.

3 Introducción a Docker

Los contenedores son la vía que provee Docker para tener el mismo uso que tienen con las
máquinas virtuales creadas de la forma tradicional.

8
La idea detrás de Docker es crear contenedores ligeros y portables para que las aplicaciones
puedan ejecutarse en cualquier máquina con Docker instalado, independientemente del
sistema operativo que la máquina tenga por debajo, facilitando también de esta forma los
despliegues.

Este concepto fue utilizado tiempo atrás y viene del Sistema Operativo Linux, pero por hacer
un símil con el mundo real, imaginemos un contenedor de esos que suelen llevar los barcos de
mercancías, que contiene distintos productos, docker cuenta con diferentes servicios el cual
están en contenedores.

Figura 1: Introducción a Docker

Fuente: https://guiadev.com/introduccion-a-docker/

Docker es una herramienta diseñada para beneficiar tanto a desarrolladores, testers, como
administradores de sistemas, en relación a las máquinas, a los entornos en sí donde se ejecutan
las aplicaciones software, los procesos de despliegue, etc.

9
En el caso de los desarrolladores, el uso de Docker permite que puedan centrarse en desarrollar
su código sin preocuparse de si dicho código funcionará en la máquina en la que se ejecutará.

Por ejemplo, sin utilizar Docker un posible escenario podría ser el siguiente:

 Pepe tiene en su ordenador instalado Java 8, y está programando una funcionalidad


específica de la aplicación con algo que solo está disponible en esa versión de Java.
 José tiene instalado en su máquina Java 7, porque está en otro proyecto trabajando sobre
otro código, pero Pepe quiere que José ejecute el código de su aplicación en su máquina.
En este caso, José se instala Java 8, o la aplicación en su máquina fallará.

Este escenario desaparece con Docker. Para ejecutar la aplicación, Pepe se crea un contenedor
de Docker con la aplicación, la versión 8 de Java y el resto de recursos necesarios, y se lo pasa
a José.

José, teniendo Docker instalado en su ordenador, puede ejecutar la aplicación de Pepe a través
del contenedor, sin tener que instalar nada más.

3.1 Características
Docker es una plataforma abierta para desarrolladores y administradores de sistemas para
construir, entregar y ejecutar aplicaciones distribuidas.

Entre las características más destacadas se tiene:

Liviano

 Mínimo de sobrecarga (cpu/io/network).


 Basado en contenedores Linux.
 Utiliza un sistema de archivos basado en capas para ahorrar espacio (AUFS/LVM).
 Utiliza un sistema de archivos de copia en escritura para rastrear los cambios.

10
Portable

 Puede ser ejecutado en muchos SO, Linux, Mac, Windows, a partir de la versión cuenta
con soporte para RedHat/Fedora.
 Cuenta con soporte para Raspberry pi.

Autosuficiente

 Un contenedor Docker contiene todo lo necesario para ser ejecutado.


 Usa un SO base mínimo.
 Cuenta con librerías y frameworks.
 Un contenedor docker debe ser capaz de correr donde sea que Docker pueda correr.

Puede ser ejecutado en SO Linux 64-bits con Kernel >= 3.8, también corre en
Windows y Mac.
Está soportado por muchas de las plataformas cloud, por ejemplo: Amazon EC2, Google
Compute Engine, Digital Ocean.

Como se comentó anteriormente que Docker y toda su funcionalidad depende o esta


principalmente en el manejo de Contenedores ahora si bien los contenedores son muy
importantes debemos conocer de donde nacen y para esto se explicara el concepto de Imagen,
como se muestra en la figura 2

11
Figura 2: Características de Docker

Fuente: (González, 2016)

3.2 Imágenes

Una parte básica de la introducción a Docker es entender qué es una imagen. El concepto de
Imagen que viene siendo en si nuestro sistema operativo, entonces se pude decir que se tiene
una imagen de Centos, Ubuntu o Debian.

Una imagen es una especie de plantilla, una captura del estado de un contenedor, esto quiere
decir que, un contenedor no es una máquina virtual, pero para hacernos una idea, se podría
decir que una imagen de un contenedor es como un snapshot de una máquina virtual, pero
mucho más ligero.

Por ejemplo una imagen podría contener un sistema operativo Ubuntu con un servidor Apache
y una aplicación web instalada. Las imágenes se utilizan para crear contenedores, y estas nunca
cambiarán.

Hay muchas imágenes públicas con elementos básicos como Java, Ubuntu, Apache, etc., que
se pueden descargar y utilizar. Normalmente cuando creas imágenes, partimos de una imagen
12
padre a la que le se van añadiendo servicios (por ejemplo: una imagen padre con Ubuntu y
Apache, la cual fue modificada para instalar una aplicación).

Ahora bien, lo interesante de las imágenes es que pueden ser más que solo un sistema
operativo, puede decir que tenemos una imagen de Nginx o una imagen de MySQL o de
Memcached, que estos últimos en si son servicios pero en Docker podemos crear imágenes a
partir de unos servicios ya instalados y hasta configurados. Como se muestra en la figura 3

Figura 3 : Imágenes Docker

Fuente: (González, 2016)

Características de una Imagen

Portátil: pueden ser versionadas en los repositorios de Docker Hub, o ser guardado como un
archivo .tar.

Estática: el contenido no se puede cambiar, a menos que se realice una nueva imagen.

13
3.3 Contenedores
Hacen uso de una imagen como base y pueden contener uno o más procesos.
Un contenedor Docker es:
 Una instancia de una imagen Docker
 Un conjunto de operaciones asociadas a su ciclo de vida:
Crear, Destruir, Arrancar, Reiniciar o Parar
 Un entorno de ejecución (González, 2016)

Se realizará una explicación en el siguiente ejemplo: se tiene una Imagen de Ubuntu 14.04 con
Django instalado y se crearán 3 Contenedores a partir de la imagen de Ubuntu.

Los contenedores al igual que las máquinas virtuales tradicionales están aisladas del host,
luego cada contenedor debe tener su ID único y un nombre que sea legible por cualquier
persona esto es netamente para identificar cada contenedor y luego es necesario que cada
contenedor exponga los servicios que necesite.

Docker permite exponer puertos del contenedor para que el Host identifique cuando tratemos
de entrar a cada puerto lo que es conocido como el port forwarding.

Características de un Contenedor

Tiempo de ejecución: cada contenedor se ejecuta en un solo proceso.

Permisos de escritura: sólo tendrá permiso a sus propios archivos y a los volúmenes
asociados.

Capas: una imagen en base a un sistema operativo.

14
Figura 4: Docker vs VM

Fuente: (Nickoloff, 2016)

Cuadro Comparativo Docker Containers vs Virtual Machine

Docker Containers Virtual Machine

 Arranca en fracciones de segundo.  Arranca en fracciones de minutos.


 Ocupa un tamaño en disco en MB.  Ocupa un tamaño en disco en GB.
 Puede ejecutar muchos contenedores al  Complicado ejecutar varios maquinas al
mismo tiempo sin problemas. mismo tiempo.
 Despliega aplicaciones más rápido,  Crean sistemas completos totalmente
arrancarlas y pararlas más rápido. aislados.
 Aprovecha mejor los recursos de
hardware.

15
3.4 Comandos Docker
Docker cuenta con variedad de comandos según la necesidad del usuario, la forma de utilizar
estos comandos de docker es la siguiente:
docker <comando> <opción si es necesario> [ID]
Muchas veces se necesitarán ejecutar estos comandos en modo de súper usuario (root).
Se puede observar los siguientes comandos con su descripción:

Comando Descripción
docker -d & Ejecuta el demonio de Docker

docker build Construye un contenedor de un archivo Docker

docker commit Crea una nueva imagen de los cambios del contenedor
Copia archivos/carpetas de los contenedores del sistema de archivos a
docker cp
la ruta de host
docker events Obtiene eventos en tiempo real desde el servidor

docker images Lista las imágenes

docker insert Inserta un archivo en una imagen


docker inspect Regresa información de bajo nivel en un contenedor

docker kill Mata a un contenedor en ejecución (corriendo)

docker ps Lista los Contenedores

docker pull Descarga una imagen o un repositorio del servidor de registros Docker

docker restart Reinicia un contenedor en ejecución (corriendo)

docker rm Elimina uno o más contenedores


docker rmi Elimina una o más imágenes

docker run Ejecuta un comando en un contenedor


docker start Inicia un contenedor detenido

docker stop Detiene un contenedor en ejecución (corriendo)

16
3.5 Cuando usar Docker

Puede utilizar los contenedores de Docker como bloque de construcción principal a la hora de
crear aplicaciones y plataformas modernas.

Docker facilita la creación y ejecución de arquitecturas de micro-servicios distribuidos, la


implementación de código con canalizaciones de integración y entrega continuas
estandarizadas, la creación de sistemas de procesamiento de datos altamente escalables y la
creación de plataformas totalmente administradas para sus desarrolladores.

3.6 Instalación de Docker

Se realizará la instalación de Docker en Linux Distribución Ubuntu, para más información


podrá encontrar las instrucciones paso a paso para la instalación de Docker en el siguiente
enlace: https://docs.docker.com/install/linux/docker-ce/ubuntu/

El cual se encontrará características del Sistema Operativo, versiones a instalar, configuración


de repositorios y más.

Una vez instalado Docker en una maquina cuyo SO sera Ubuntu 16.04 LTS.
Escribir (docker –v) en la línea de comandos, para ver la versión instalada.
ubuntu@docker:~$ docker -v
Docker version 1.11.2, build b9f10c9

Para verificar que Docker Community Edition (CE) esté instalado correctamente escribimos en
la línea de comandos lo siguiente:
$ sudo docker run hello-world

17
4 Dockerfile

Es un archivo que contiene la descripción e instrucciones para construir y automatizar el

proceso de creación de un contenedor, igual a un Makefile (shell script), un archivo común y

corriente donde se escribirán algunas configuraciones.

Sus características son:

 Hereda de una imagen base.


 El resultado es una nueva imagen docker.
 Un archivo Dockerfile es un tipo de archivo imperativo, se describen los pasos que son
necesarios para construir la imagen docker.
 La instrucción docker build para construir una nueva imagen docker.
 Se pueden definir comandos por defecto para correr la imagen docker, así también se
pueden definir puertos, etc.

Figura 5: Dockerfile

Fuente: (Juanda, 2015)


18
4.1 Configuración

Los Dockerfile tienen las siguientes instrucciones:

 FROM: indica la imagen base a partir de la cual crearemos la imagen que construirá el
Dockerfile.

 MAINTAINER: documenta el creador de la imagen.

 ENV HOME: establece el directorio HOME que usarán los comandos RUN.

 RUN: permite ejecutar una instrucción en el contenedor, por ejemplo, para instalar algún
paquete mediante el gestor de paquetes (apt-get, yum, rpm).

 ADD: permite añadir un archivo al contenedor, en muchas ocasiones se utiliza para


proporcionar la configuración de los servicios (ssh, mysql, postgres).

 WORWDIR: Permite especificar en qué directorio se va a ejecutar una instrucción RUN,


CMD o ENTRYPOINT.

 VOLUME: establece puntos de montaje que al usar el contenedor se pueden proporcionar,


los volúmenes son al forma de externalizar un determinado directorio y proporcionar
persistencia (las imágenes de docker son de solo lectura y no almacenan datos entre
diferentes ejecuciones).

 EXPOSE: indica los puertos TCP/IP por los que se pueden acceder a los servicios del
contenedor, los típicos son 22 (SSH), 80 (HTTP) y en este caso el puerto por defecto de
mysql 3306 o postgres 5432, como se muestra en la imagen a continuación.

19
Figura 6 : Host – Port Contenedor

Fuente: (Nickoloff, 2016)

 CDM: establece el comando del proceso de inicio que se usará si no se indica uno al iniciar
un contenedor con la imagen.

 USER: Sirve para configurar el nombre de usuario a usar cuando se lanza un contenedor y
para la ejecución de cualquier instrucción RUN, CMD o ENTRYPOINT posteriores.
 LABEL: Añade metadatos a una imagen Docker, se escribe en el formato etiqueta=valor.
Se pueden añadir varios metadatos separados por un espacio en blanco.
Ejemplo: LABEL versión=”1.0”

 STOPSIGNAL: Indica al sistema una señal que será enviada al contenedor para salir. Puede
ser un número valido permitido por el Kernel (por ejemplo 9) o un nombre de señal en el
formato SIGNAME (por ejemplo SIGKILL).
20
5 Dockerizar el Micro Servicio

Primeramente se hablará de Docker Hub, que sirve como repositorio de imágenes oficiales y
de terceros donde se pueden descargar las imágenes actuales.
Las características de Docker Hub son:
• Repositorios de imágenes: encuentra, administra, sube y descarga imágenes oficiales y de
la comunidad.
• Imágenes automáticas: crea nuevas imágenes cuando haces un cambio en la fuente de
Github o BitBucket.
• Webhooks: crea automáticamente imágenes al hacer un push a un repositorio.
En Docker Hub podemos tener nuestro propio repositorio de imágenes, público o privado.
Ahora veremos cómo usar los repositorios desde el sitio web. Para mayor información ingrese
a este link: https://hub.docker.com/explore/

Figura 7: Docker Hub

Fuente: Elaboración Propia

21
Una vez descargado las imágenes necesarias e instaladas dentro del contenedor, se observará
cómo empaquetar un micro-servicio de un proyecto de Spring Boot en Java dentro de un
contenedor docker, para ello se usará el plugin de maven y posterior descargar el proyecto
ejemplo de github.

$ git clone git@github.com:springframeworkguru/springboot_swagger_example.git

Compilar y empaquetar con el comando para generar los .jar: mvn clean compile package

Crear el archivo Dockerfile dentro del folder springboot_swagger_example y configurar de


la siguiente manera:

FROM openjdk:8-jdk-alpine

COPY target/spring-boot-web-0.0.1.jar .

CMD /usr/bin/java -Xmx400m -Xms400m -jar spring-boot-web-0.0.1.jar

EXPOSE 8080

Con EXPOSE:
● Se expone un puerto del contenedor al host.

-p [<host_port>:]<cont_port>

Ejecutar los siguientes comandos para construir y levantar el contenedor.

$ docker build -t spring-boot-web .

$ docker run -p 1999:8080 spring-boot-web

22
Verificar que el servicio está corriendo abriendo en el navegador lo siguiente: (Nickoloff,
2016, p. 29)

http://localhost:1999/swagger-ui.html

O también:

http://<IP_DEL_CONTEDOR_DOCKER>:1999/swagger-ui.html

6 Docker Compose

Docker Compose es una herramienta que permite simplificar el uso de Docker, generando
scripts que facilitan el diseño y la construcción de servicios, se puede crear diferentes
contenedores y al mismo tiempo, en cada contenedor, diferentes servicios.

Las aplicaciones basadas en micro servicios se prestan a usar múltiples contenedores cada uno
con un servicio, uno puede contener Java, otro puede contener una base de datos Postgresql,
Mysql, SqlServer, etc., otro puede contener una base de datos clave/valor Redis o de
documentos como Elasticsearch para hacer búsquedas, otro un servidor Tomcat y un servidor
web como Nginx o NodeJ.

Al tener múltiples contenedores; usar el comando docker run para cada uno de ellos resultará
complejo. En este punto entra Docker Compose el cual permite definir una aplicación multi-
contenedor en un archivo con las mismas propiedades que el comando docker
run individualmente. Con un único comando se podrá iniciar todos los contenedores y en el
orden que fueron especificados.

El archivo descriptor puede servir no solo como forma de iniciar los contenedores en un
entorno de desarrollo sino como de documentación de la aplicación en la que se observara
contenedores, imágenes, volúmenes, enlaces y demás propiedades tienen.

23
6.1 Instalación de Docker Compose

Se cuenta con varias formas de instalar Docker Compose. A continuación se mostrara una
forma de instalar y la que recomiendo por ser sencilla, podrá encontrar las instrucciones paso
a paso para la instalación en el siguiente enlace:
https://docs.docker.com/compose/install/#install-compose

Puede ejecutar Compose en MacOS, Windows y Linux de 64 bits, para el presente caso se
realizará en Linux.

6.1.1. Descargar la última versión de Docker Compose:

sudo curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-


compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

6.1.2. Aplicar permisos ejecutables al binario:

sudo chmod +x /usr/local/bin/docker-compose

6.1.3. Probar la instalación.

docker-compose --version

docker-compose version 1.22.0, build 1719ceb

24
6.2 Iniciar los contenedores con Docker Compose

El descriptor de los contenedores a usar con Docker Compose es un archivo de texto


con formato yml, el cual se indicará que imagen se quiere desplegar, cuál será la configuración
y cuáles serán las dependencias. Todas aquellas dependencias se van a ejecutar con
anterioridad, para así realizar una instalación correcta.

Básicamente se puede indicar las mismas propiedades que se realizarán al arrancar los
contenedores individualmente con el comando docker run.

Figura 8: Docker-Compose

Fuente: (Nickoloff, 2016)

En el fichero .yml se puede definir, entre otras cosas, la imagen o imágenes que se quieren
utilizar, la exposición de puertos o los volúmenes, etc.

25
En el siguiente ejemplo se cuenta con varios contenedores, un contenedor para redis y un
contenedor para la conexión a la base de datos postgresql, un contenedor para el servicio
usando tomcat enlazado con los contenedores de redis y postgresql definidos previamente.

Figura 9: Docker-compose redis y postgres

Fuente: Elaboración propia

26
Primeramente, se crea un directorio de trabajo y se crea el archivo de contenedores y se lo
nombra docker-compose.yml.

Segundo, se edita y configura el archivo docker-compose.yml con los datos como se muestra
en la imagen.

 La imagen de los contenedores se indica con la propiedad image.

 Los contenedores de datos, redisdb y posgresqldb, usan la propiedad volumes con los
datos que guardarán y la imagen de busybox (se suele usar esta para los contenedores de
datos porque es muy pequeña).

 Con la propiedad hostname se indica el nombre de la máquina que al usar la


propiedad link docker hará visible al contenedor que los usen.

 Con volumes_from se puede usar volúmenes, con links enlazar contenedores y con ports
asociar puertos entre los contenedores y la propia máquina anfitrión.

 En el ejemplo se ha usado los puertos por defecto de cada uno de los servicios.

Tercero, se puede iniciar los contenedores con el comando docker-compose up estando en el


mismo directorio de trabajo donde esté ubicado del archivo yml (y previamente habiendo
iniciado el servicio de docker).

 Con docker-compose ps se podrá ver el estado de los contenedores y de cuales está


compuesta la aplicación.

 Con la opción –help se puede ver la lista completa de comandos que podemos usar.

 Con docker-compose up se inician los contenedores en el orden que hemos indicado en


el archivo de definición, las trazas emitidas de los servicios de los contenedores aparecerán
en la terminal si iniciamos los contenedores en primer plano y con Ctrl+C se pararán los
contenedores.

27
 Indicando la opción -d los contenedores se iniciarán en segundo plano.
 Con docker-compose stop detiene los servicios del contenedor.
 Con docker-compose restart reiniciamos los contenedores.
 Con docker-compose rm eliminamos completamente los contenedores.
 Con docker-compose logs muestra información registrada por todos los contenedores que
participan en un servicio.

7 Dockerizar Spring Boot y Angular

Muchas empresas de desarrollo de software en la actualidad están implementando productos

con el concepto de servicio rest o API rest.

REST es cualquier interfaz entre sistemas que usen HTTP para obtener datos o generar

operaciones sobre esos datos en todos los formatos posibles, como XML y JSON.

Sus características son:

 Protocolo cliente/servidor sin estado: cada petición HTTP contiene toda la información
necesaria para ejecutarla, lo que permite que ni cliente ni servidor necesiten recordar ningún
estado previo para realizar una petición. Aunque esto es así, algunas aplicaciones HTTP
incorporan memoria caché.
 Las operaciones más importantes relacionadas con los datos en cualquier sistema REST y
la especificación HTTP son cuatro: POST (crear), GET (leer y consultar), PUT (editar)
y DELETE (eliminar).
 Los objetos en REST siempre se manipulan a partir de la URL. La URL facilita acceder
a la información para su modificación o borrado.

A continuación se dara un ejemplo de como dockerizar un proyecto usando Docker-Compose

una API REST elaborado con Spring boot y Java para la parte de backend, Angular y NodeJ

para la parte de frontend y Mysql para la conexión a la base de datos:

28
7.1 Crear Archivo yml

Se crea un directorio de trabajo y el archivo de contenedores docker-compose.yml.

7.2 Configurar Archivo yml

Editamos el archivo de acuerdo a un orden de prioridad en el cual se necesitará levantar los

contenedores, por ejemplo, no se puede configurar nuestro servicio de spring boot para que se

levante antes que el servicio de base de datos, pues existe una dependencia, el cual generará un

error de despliegue, como administradores se debe identificar esos aspectos en el

comportamiento de un Proyecto.

Figura 10: Docker-compose Spring boot y Angular

Fuente: Elaboración Propia

29
7.3 Levantar el archivo yml

Una vez teniendo listo la configuración del archivo yml, se podrá iniciar los contenedores

con el comando docker-compose up –d, que levantará todos los servicios configurados en el

archivo docker-compose.yml de acuerdo al orden que fueron establecidos.

30
8 Conclusiones

En esta investigación se ha explicado Docker desde el nivel más básico para realizar
configuraciones, la instalación y la automatización de contenedores.

Ahora se podrá utilizar Docker como entorno de desarrollo, en el cual se podrá crear y probar
las aplicaciones en distintos entornos teniendo la ventaja de que por ninguna razón el host
(maquina local) se dañe. De esta forma con Docker se logra un trabajo más libre para
configurar cualquier entorno de cualquier sistema operativo y luego destruirlo en segundos.

Con Docker se tiene ambientes robustos y ligeros para emular el comportamiento de una
máquina virtual, por lo que ya no se necesita hacer uso de herramientas de virtualización donde
se alojen nuestros servicios.

También se analizó y definió qué es y en que ayuda Docker-compose y lo indispensable que es


hoy en día para la implementación de infraestructuras, ambientes de desarrollo simples o
complejos que necesitan de alguna forma crecer y ser escalables, sin la necesidad de hacer
tantos procesos manuales.

Con la ayuda de docker-compose se vio la forma de configurar varios servicios y empaquetarlos


en un solo contenedor, de esa forma automatizar los servicios para no tener que levantarlos de
uno en uno, sino que con un solo comando levantar todo lo que nuestra aplicación necesita para
su funcionamiento. Asi mejorando el rendimiento, tiempo.
Esta nueva forma de preparar ambientes con Docker hace más fácil el trabajo de un DevOp o
administrador de Servidores, encargado generalmente del despliegue de aplicaciones, base de
datos, etc.

El proceso de Dockerizar y contenerizar servicios, hace que el trabajo de nuestro DevOp sea
más eficiente, mejorando el rendimiento de los entornos, el tiempo el cual conlleva realizar un
despliegue y automatizar nuestras configuraciones, para cubrir y satisfacer las exigencias por
parte del equipo de desarrolladores que requieran de nuevas herramientas, tecnologías, etc.,
para el desarrollo de proyectos.

31
Bibliografía

Anónimo. (2017). DOCKER. Guía práctica. http://rclibros.es/wp-content/uploads/.

González, B. C. (2016). Introducción a docker. Open Canarias.

Juanda. (2015). Docker. http://www.media.formandome.es/markdownslides/docker/.

Nickoloff, J. (2016). Docker in Action. Manning Publications Co.

Torre, M. C. (2016). Docker y Kurbernetes.

https://guiadev.com/introduccion-a-docker/

https://docs.docker.com/install/linux/docker-ce/ubuntu/

https://docs.docker.com/compose/install/#install-compose

32

También podría gustarte