DOCKER: Ciclo de vida de las aplicaciones

DOCKER: Ciclo de vida de las aplicaciones

El ciclo de vida de aplicaciones en contenedor es una trayectoria que empieza por el desarrollador. El desarrollador decide implementar contenedores y Docker, ya que así se eliminan las fricciones en las implementaciones y las operaciones de TI, lo que, en última instancia, ayuda a todos los usuarios a ser más ágiles, más productivos de un extremo a otro y más rápidos.

Un desafío común para los DevOps es administrar las dependencias de una aplicación y el stack de tecnología en varios entornos cloud y desarrollo. Como parte de sus tareas rutinarias, deben mantener la aplicación operativa y estable, independientemente de la plataforma subyacente en la que se ejecute.

Docker permite la eficiencia y reduce los gastos generales operativos para que cualquier desarrollador, en cualquier entorno de desarrollo, pueda crear aplicaciones estables y confiables. Docker brinda la capacidad de empaquetar y ejecutar una aplicación en un entorno vagamente aislado llamado contenedor. El aislamiento y la seguridad le permiten ejecutar muchos contenedores simultáneamente en un host determinado. Puede compartir contenedores fácilmente mientras trabaja y asegurarse de que todas las personas con las que comparte obtengan el mismo contenedor que funciona de la misma manera.

Documentación Docker

Ciclo de vida de las aplicaciónes

El ciclo de vida de una aplicación docker lo podría definir en 6 pasos:

Docker te permite construir, distribuir y ejecutar cualquier aplicación en cualquier lado.

Documentacion oficial Docker

Nos enfocamos en la Documentación oficial docs.docker.com/get-started/overview para armar el ciclo de vida.

DEMO: Despliegue de páginas html con docker

Paso 1: Desarrollo de la aplicación

En este ejemplo vamos a desarrollar una página web en el que estaremos usando un servidor web [Nginx] que se ejecutará en un contenedor Docker.

Por lo tanto lo primero que debemos hacer es crear nuestra página web , en este caso esto usando un template de w3schools

Paso 2: Contrucción de la Imagen Docker

Utilizando un archivo Dockerfile definimos instrucciones de como vamos a crear nuestra imagen:

  • Qué imagen base vamos a utilizar.

  • Qué dependencias/paquetes vamos a instalar

  • Donde copiamos nuestro código fuente

  • Indicamos el servicio que va a ejecutar el contenedor (servidor nginx)

Dockerfile reference

Dockerfile:

Un Dockerfile es un archivo o documento de texto simple que incluye una serie de instrucciones que se necesitan ejecutar de manera consecutiva para cumplir con los procesos necesarios para la creación de una nueva imagen.

FROM nginx:alpine
COPY index.html /usr/share/nginx/html

Creamos nuestra imagen, donde tenemos el Dockerfile, ejecutamos:

Para el funcionamiento de Dockerfile se debe tener en cuenta también el llamado contexto docker build context, es decir, la herramienta que se encarga de indicar cuáles son los archivos, directorios y ficheros a los que tiene acceso la opción de docker build.

$ docker build -t roxsross12/nginx-web:1.0.0 .

Podemos comprobar que en nuestro entorno local tenemos la imagen que acabamos de crear:

docker images
REPOSITORY             TAG       IMAGE ID       CREATED          SIZE
roxsross12/nginx-web   1.0.0     56b61c567ac4   51 seconds ago   41.4MB

Paso 3: Testeamos nuestra aplicación en el entorno local/desarrollo/develop

Creamos un contenedor onfire:

> docker run --name demo-nginx-web -d -p 80:80 roxsross12/nginx-web:1.0.0
a6fa5bd776848fe53d829c6f35b61ed16aef5316abf97f6cdf80b5119e605a17
> docker ps
CONTAINER ID   IMAGE                        COMMAND                  CREATED         STATUS         PORTS                NAMES
a6fa5bd77684   roxsross12/nginx-web:1.0.0   "/docker-entrypoint.…"   3 seconds ago   Up 2 seconds   0.0.0.0:80->80/tcp   demo-nginx-web

Probamos nuestra aplicación:

Paso 4: Distribuir nuestra imagen [Registry - Dockerhub]

Docker Hub es el repositorio de imágenes para contenedores más grande del sector IT, ya que aloja la mayor cantidad de imágenes oficiales de la plataforma.

Docker Hub cuenta, además, con una amplia variedad de fuentes para sus imágenes, dentro de las que se incluyen grandes proveedores de software independientes, algunos proyectos de tipo open source que tienen el objetivo de desarrollar y distribuir su código en contenedores para estos repositorios y la comunidad de desarrolladores.

DockerHub- https://hub.docker.com/

> docker login
Authenticating with existing credentials...
Login Succeeded
> docker push roxsross12/nginx-web:1.0.0
The push refers to repository [docker.io/roxsross12/nginx-web]
f32a27cb18e2: Pushed 
sha256:6a6a5a0461433928d914a304df57fc7ce161ef7e3fa4735babc1c38f0d667261 size: 1990

Podemos comprobar si esta subido al repositorio [Registry Docker-hub]

> docker search roxsross12/nginx-web
NAME                   DESCRIPTION   STARS     OFFICIAL   AUTOMATED
roxsross12/nginx-web

Paso 5: Llevar a prod

En el el entorno de producción, bajamos la imagen de Docker Hub y creamos el contenedor:

> docker pull roxsross12/nginx-web:1.0.0
9a029d5ca5bb: Pull complete 

> docker run --name demo-nginx-web-prod -d -p 80:80 roxsross12/nginx-web:1.0.0

Es una buena practica no usar la etiqueta latest en producción

Usar adecuadamente los tags de la imagen

Las imagenes de Docker se identifican de dos maneras: el nombre y el tag. El formato que sigue es el siguiente: nginx:1.17.5 donde “nginx” es el nombre y “1.17.5” el tag.

En Docker es común aprovechar los tags para versionar. De este modo, se facilita la liberación de código. Es, además, un método muy flexible, puesto que podemos utilizar las tags para obtener variantes muy diversas, no sólo indicando incrementalmente y con una política adecuada nuestra versión (esto en sí mismo es una buena practica.

docker Memes & GIFs - Imgflip

Paso 6: Nueva Versión de la aplicación

Al modificar el código de la aplicación tenemos que generar una nueva imagen.

$ docker build -t roxsross12/nginx-web:1.0.1 .

Podemos de la misma manera probar la nueva version

docker rm -f demo-nginx-web
> docker run --name demo-nginx-web2 -d -p 80:80 roxsross12/nginx-web:1.0.1

Puedes contactarme en roxs.295devops.com