domingo, 10 de enero de 2021

Docker

Docker es una plataforma de contenedorización que se utiliza para desarrollar, enviar y ejecutar contenedores.Es un conjunto de tecnologías que te permiten ejecutar aplicaciones con sus dependencias (llamaremos imagen) dentro de un contenedor, consta de varios componentes que utilizamos para crear, ejecutar y administrar nuestras aplicaciones en contenedores

Uno de los puntos fuertes de la creación de contenedores es que no tiene que configurar el hardware ni perder tiempo instalando sistemas operativos y software para alojar una implementación.

Los contenedores están aislados entre sí y varios contenedores pueden ejecutarse en el mismo hardware. Esta configuración nos ayuda a usar el hardware de manera más eficiente y puede ayudar a mejorar la seguridad de nuestra aplicación. 

Imagen

Una imagen es una representación estática de la aplicación o el servicio y de su configuración y las dependencias.

Una imagen podría contener un sistema operativo con un servidor y una aplicación web instalada.

Hay que tener en cuenta que las imagenes son archivos inmutables de solo lectura, si creas un contenedor a partir de una imagen, y mientras  se está ejecutando el contenedor se cambia algo o se instala alguna herramienta, al parar dicho contenedor y después volver a ejecutar otra vez la misma imagen, esos cambios no se verán reflejados.

Si queremos que los cambios realizados en el contenedor se mantengan, una de las opciones sería la de generar una imagen a partir del contenedor, para ello haríamos lo siguiente:

docker commit -m "<comentario>" -a "<autor>" <id_contenedor> <nombre_imagen>:<etiqueta_imagen>

Hay muchas imágenes públicas con elementos básicos como Java, Ubuntu, Apache…etc, que se pueden descargar y utilizar. Normalmente para crear imágenes, lo hacemos a partir de una imagen padre a la que le vamos añadiendo lo que vayamos necesitando 

Las imágenes se almacenan en un registro, que sirve como biblioteca de imágenes.(DockerHub).

Para crear una imagen utilizaremos un Dockerfile,que es un archivo de texto plano que contiene una serie de instrucciones necesarias para configurar una imagen. 
Ejecutando el comando docker build sobre ese DockerFile, se nos creará la imagen correspondiente.
 
A partir de una única imagen, podemos ejecutar varios contenedores. 

Contenedor

 Un contenedor es un espacio donde se ejecuta la imagen.

Docker se divide en dos ediciones:

  • Docker Community Edition (CE). Se trata de un entorno de desarrollo y ejecución de contenedores basados en Docker que es gratuito y sencillo de utilizar.
Posee dos canales de actualización:
        Edge: De liberación mensual y en la que solo se proporcionará soporte a bugs                     y fallos de seguridad durante el mes en curso.
        Stable: De liberación trimestral con cuatro meses de soporte
  • Docker Enterprise Edition (EE). No es gratuita, provee contenedores certificados y viene con 3 versiones:

                        Básica:  viene con la plataforma, el soporte y la certificación de la ventana                                               acoplable.

                        Estándar y Avanzada: incluyen la administración de contenedores y las                                                               funciones de escaneo de seguridad de la ventana                                                               acoplable agregadas a las funciones de la edición básica. 


Como hemos dicho anteriormente si se destruye una imagen, se pierden los cambios que se han realizado sobre ella, para poder guardar (conservar) esos datos o para compartir datos entre contenedores, existe el  concepto de volúmenes ,que son directorios (o archivos) que están fuera del sistema de archivos de unión predeterminado y existen como directorios y archivos normales en el sistema de archivos del host.

La forma más directa es declarar un volumen en tiempo de ejecución con el indicador -v :