Informe Técnico Virtualización y contenedores-FERCHO

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 15

Informe técnico virtualización y contenedores.

GA5-
220501106-AA2-EV02.

FERNANDO RAVELO LIZARAZO

Servicio Nacional de Aprendizaje-SENA

Programación de Aplicaciones y Servicios para la Nube

22 de agosto 2022
Introducción

Hoy en día, los equipos deben publicar aplicaciones rápidamente para atraer y para
mantener el negocio. Este requisito obliga a los equipos de desarrollo de software
y de soporte técnico a buscar siempre las soluciones que ahorran tiempo y reducen
los costos. Una solución ideal reducirá el tiempo empleado en la creación y la
configuración de entornos de implementación, y simplificará el proceso de
implementación de software.

La idea de usar la tecnología de creación de contenedores de software como una


solución de ahorro de tiempo y reducción de costos es popular. Uno de los puntos
fuertes de la creación de contenedores es que no es necesario configurar hardware
ni perder tiempo en la instalación de sistemas operativos y software para hospedar
una implementación. Los contenedores están aislados entre sí y se pueden ejecutar
varios contenedores en el mismo hardware. Esta configuración nos permite usar
hardware de forma más eficaz y puede mejorar la seguridad de nuestra aplicación.

El uso de Docker como una solución de creación de contenedores parece una


opción ideal.
¿Qué es un contenedor?
Un contenedor es un entorno aislado de forma flexible que nos permite compilar y
ejecutar paquetes de software. Estos paquetes de software incluyen el código y
todas las dependencias para ejecutar aplicaciones de forma rápida y fiable en
cualquier entorno informático. Llamamos a estos paquetes imágenes de
contenedor.

La imagen de contenedor es la unidad que usamos para distribuir nuestras


aplicaciones.
¿Qué es la creación de contenedores de software?
La creación de contenedores de software es un método de virtualización del
sistema operativo que se usa para implementar y ejecutar contenedores sin usar
una máquina virtual (VM). Los contenedores se pueden ejecutar en hardware físico,
en la nube, en máquinas virtuales y en diferentes sistemas operativos.

¿Qué es Docker?
Docker es una plataforma de creación de contenedores que se usa para desarrollar,
distribuir y ejecutar contenedores. Docker no usa un hipervisor y se puede ejecutar
en equipos de escritorio o en portátiles para desarrollar y probar las aplicaciones.
La versión de escritorio de Docker es compatible con Linux, Windows y macOS. En
el caso de los sistemas de producción, Docker está disponible para entornos de
servidor, incluidos muchas variantes de Linux, Microsoft Windows Server 2016 y
versiones posteriores. Muchas nubes, incluida la nube de Azure, son compatibles
con Docker.

Arquitectura de Docker
La plataforma Docker consta de varios componentes que usamos para desarrollar,
ejecutar y administrar nuestras aplicaciones en contenedores.

Motor de Docker

El motor de Docker está formado por varios componentes configurados como una
implementación de cliente y servidor en la que ambos se ejecutan
simultáneamente en el mismo host. El cliente se comunica con el servidor mediante
una API REST, la cual le permite comunicarse también con una instancia del
servidor remoto.
El cliente Docker

El cliente de Docker es una aplicación de línea de comandos


denominada docker que nos proporciona una interfaz de la línea de comandos (CLI)
para interactuar con un servidor de Docker. El comando docker usa la API de REST
de Docker para enviar instrucciones a un servidor local o remoto y funciona como
la interfaz principal que usamos para administrar nuestros contenedores.

El servidor de Docker

El servidor de Docker es un demonio denominado dockerd. El


demonio dockerd responde a las solicitudes del cliente a través de la API de REST
de Docker y puede interactuar con otros demonios. El servidor de Docker también
es responsable de realizar un seguimiento del ciclo de vida de nuestros
contenedores.

Objetos de Docker

Hay varios objetos que creará y configurará para admitir las implementaciones de
contenedores. Estos incluyen redes, volúmenes de almacenamiento, complementos
y otros objetos de servicio. Aquí no trataremos todos estos objetos, pero es
conveniente tener en cuenta que son elementos que se pueden crear e
implementar según sea necesario.

Docker Hub

Docker Hub es un registro de contenedores de Docker de software como servicio


(SaaS). Los registros de Docker son repositorios que se usan para almacenar y
distribuir las imágenes de contenedor que se crean. Docker Hub es el registro
público predeterminado que usa Docker para administrar las imágenes.
Funcionamiento de las imágenes de Docker

Recuerde que la imagen de contenedor es la unidad que usamos para distribuir las
aplicaciones. También hemos mencionado que un contenedor es un formato
normalizado que usan nuestros equipos de desarrollo y operaciones.

Software empaquetado en un contenedor


El software que se empaqueta en un contenedor no está limitado a las aplicaciones
que crean nuestros desarrolladores. Cuando hablamos del software, nos referimos
al código de la aplicación, los paquetes de sistema, los archivos binarios, las
bibliotecas, los archivos de configuración y el sistema operativo que se ejecutan en
el contenedor.

Por ejemplo, supongamos que estamos desarrollando un portal de seguimiento de


pedidos que usarán las tiendas de su empresa. Tenemos que examinar la pila
completa de software que ejecutará la aplicación web. La aplicación que estamos
creando es una aplicación MVC de .NET Core y planeamos implementarla con
Nginx como servidor proxy inverso en Ubuntu Linux. Todos estos componentes de
software forman parte de la imagen de contenedor.

¿Qué es una imagen de contenedor?


Una imagen de contenedor es un paquete portátil que contiene software. Cuando
se ejecuta esta imagen, se convierte en nuestro contenedor. El contenedor es la
instancia en memoria de una imagen.

Las imágenes de contenedor son inmutables. Una vez que se crea una imagen, no
se puede cambiar. La única forma de cambiar una imagen es crear una nueva. Esta
característica es nuestra garantía de que la imagen que usamos en el equipo de
producción es la misma que se usa en los equipos de desarrollo y de control de
calidad.

¿Qué es el sistema operativo del host?


El sistema operativo del host es el sistema operativo en el que se ejecuta el motor
de Docker. Los contenedores de Docker que se ejecutan en Linux comparten el
kernel del sistema operativo del host y no requieren un sistema operativo de
contenedor, siempre que el archivo binario pueda acceder directamente al kernel
del sistema operativo.

¿Qué es el sistema operativo del contenedor?


El sistema operativo del contenedor es el sistema operativo que forma parte de la
imagen empaquetada. Tenemos flexibilidad para incluir diferentes versiones de los
sistemas operativos de Linux o Windows en un contenedor. Esta flexibilidad nos
permite tener acceso a determinadas características del sistema operativo o instalar
software adicional que pueden usar nuestras aplicaciones.
El sistema operativo del contenedor está aislado del sistema operativo del host y es
el entorno en el que se implementa y ejecuta la aplicación. Si se combina con la
inmutabilidad de la imagen, este aislamiento implica que el entorno de la
aplicación que se ejecuta en el departamento de desarrollo es el mismo que el del
departamento de producción.

¿Qué es una imagen base?


Una imagen base es una imagen que usa la imagen de Docker scratch. La
imagen scratch es una imagen de contenedor vacía que no crea una capa de
sistema de archivos. Esta imagen asume que la aplicación que se va a ejecutar
puede usar directamente el kernel del sistema operativo del host.

¿Qué es una imagen primaria?


Una imagen primaria es una imagen de contenedor a partir de la cual se crean las
imágenes.

Por ejemplo, en lugar de crear una imagen a partir de scratch y, después, instalar
Ubuntu, vamos a usar una imagen ya basada en Ubuntu. Incluso podemos usar una
imagen que ya tenga Nginx instalado. Una imagen primaria normalmente incluye
un sistema operativo de contenedor.

¿Cuál es la diferencia principal entre las imágenes


base y las imágenes primarias?
Ambos tipos de imagen nos permiten crear una imagen reutilizable, pero las
imágenes base nos proporcionan más control sobre el contenido de la imagen
final. Recuerde que las imágenes son inmutables, solo puede agregar contenido a
una imagen, no sustraerlo.

¿Qué es un Dockerfile?
Un Dockerfile es un archivo de texto que contiene las instrucciones que se usan
para compilar y ejecutar una imagen de Docker. Define los siguientes aspectos de
la imagen:
 La imagen base o primaria que usamos para crear la nueva imagen.
 Los comandos para actualizar el sistema operativo base e instalar software adicional.
 Los artefactos de compilación que se incluirán, como una aplicación desarrollada.
 Los servicios que se van a exponer, como la configuración de red y del
almacenamiento.
 El comando que se ejecutará cuando se inicie el contenedor.

EJEMPLO:

Supongamos que vamos a crear una imagen de Docker para nuestro sitio web de
ASP.NET Core. El Dockerfile podría tener un aspecto similar al ejemplo siguiente.

Cómo administrar imágenes de Docker


Las imágenes de Docker son archivos de gran tamaño que se almacenan
inicialmente en nuestro equipo, y necesitamos herramientas para administrar estos
archivos.
La CLI de Docker nos permite administrar imágenes mediante su compilación,
enumeración, eliminación y ejecución. Administramos las imágenes de Docker con
el cliente docker. El cliente no ejecuta los comandos directamente, sino que envía
todas las consultas al demonio dockerd.

Aquí no vamos a analizar todos los comandos del cliente ni todas las marcas de
comando, pero veremos algunos de los comandos más usados. La sección más
información de este módulo incluye vínculos a la documentación de Docker, la cual
abarca todos los comandos y las marcas de comando en detalle.

Cómo compilar una imagen


Usamos el comando docker build para compilar imágenes de Docker. Supongamos
que usamos la definición de Dockerfile anterior para compilar una imagen. El
siguiente ejemplo muestra el comando de compilación:

A continuación, se muestra la salida generada por el comando de compilación:


¿Qué es una etiqueta de imagen?

Una etiqueta de imagen es una cadena de texto que se usa para generar versiones
de una imagen.

En la compilación de ejemplo anterior, observe el último mensaje de compilación


que dice "Successfully tagged temp-ubuntu: latest". A la hora de compilar una
imagen, asignamos un nombre a la imagen y, opcionalmente, la etiquetamos
mediante la marca de comando -t. En nuestro ejemplo, hemos asignado un
nombre a la imagen con -t temp-ubuntu, mientras que el nombre de la imagen
resultante contiene la etiqueta temp-ubuntu: latest. Si no especifica una etiqueta
para una imagen, se le asigna la etiqueta latest.

Una sola imagen puede tener varias etiquetas asignadas. Por convención, a la
versión más reciente de una imagen se le asigna la etiqueta latest y otra etiqueta
que describe el número de versión de la imagen. Cuando publica una nueva
versión de una imagen, puede volver a asignar la etiqueta "latest" para hacer
referencia a la nueva imagen.

Aquí tiene otro ejemplo. Imagine que quiere usar las imágenes de Docker de
ejemplo de .NET Core. Aquí tenemos cuatro versiones de plataformas entre las que
podemos elegir:
Compartir una aplicación
Para compartir imágenes de Docker, debemos usar un registro de Docker. El
registro predeterminado es Docker Hub y es de donde provienen todas las
imágenes que hemos usado.

ID de ventana acoplable

Una ID de Docker le permite acceder a Docker Hub, que es la biblioteca y


comunidad más grande del mundo para imágenes de contenedores. Cree una ID
de Docker gratis si no tiene una.

Crea un repositorio
Para enviar una imagen, primero debemos crear un repositorio en Docker Hub.

1. Regístrese o inicie sesión en Docker Hub .

2. Haga clic en el botón Crear repositorio .

3. Para el nombre del repositorio, use getting-started. Asegúrese de que la


Visibilidad sea Public.
Repositorios privados

¿Sabía que Docker ofrece repositorios privados que le permiten restringir el


contenido a usuarios o equipos específicos? Consulte los detalles en la
página de precios de Docker .
4. ¡ Haz clic en el botón Crear !

Si observa la imagen a continuación , se puede ver un comando Docker de


ejemplo. Este comando empujará a este repositorio.
Empujar la imagen
1. En la línea de comando, intente ejecutar el comando push que ve en Docker
Hub. Tenga en cuenta que su comando usará su espacio de nombres, no
"docker".
2. $ docker push docker/getting-started
3. The push refers to repository [docker.io/docker/getting-started]
4. An image does not exist locally with the tag: docker/getting-started

¿Por qué falló? El comando push buscaba una imagen llamada


docker/getting-started, pero no encontró ninguna. Si ejecutas docker image
ls, tampoco verás uno.
Para solucionar esto, necesitamos "etiquetar" nuestra imagen existente que
hemos creado para darle otro nombre.

5. Inicie sesión en Docker Hub con el comando docker login -u YOUR-USER-


NAME.
6. Utilice el docker tagcomando para dar a la getting-startedimagen un nuevo
nombre. Asegúrese de cambiar YOUR-USER-NAMEcon su ID de Docker.
7. $ docker tag getting-started YOUR-USER-NAME/getting-started

8. Ahora intente su comando de inserción nuevamente. Si está copiando el


valor de Docker Hub, puede soltar la tagnameparte, ya que no agregamos
una etiqueta al nombre de la imagen. Si no especifica una etiqueta, Docker
usará una etiqueta llamada latest.
9. $ docker push YOUR-USER-NAME/getting-started

Ejecute la imagen en una nueva instancia


Ahora que nuestra imagen se ha creado y enviado a un registro, intentemos
ejecutar nuestra aplicación en una instancia completamente nueva que nunca ha
visto esta imagen de contenedor. Para ello, utilizaremos Jugar con Docker.

1. Abra su navegador para Jugar con Docker .


2. Haga clic en Iniciar sesión y luego seleccione la ventana acoplable de la
lista desplegable.

3. Conéctese con su cuenta de Docker Hub.

4. Una vez que haya iniciado sesión, haga clic en la opción AGREGAR NUEVA
INSTANCIA en la barra lateral izquierda. Si no lo ve, haga su navegador un
poco más ancho. Después de unos segundos, se abre una ventana de

terminal en su navegador.

5. En la terminal, inicie su aplicación recién impulsada.


6. $ docker run -dp 3000:3000 YOUR-USER-NAME/getting-started

Como podemos ver Docker tiene muchas ventajas, ha solucionado grandes


problemas tanto a nivel de desarrollo como de operaciones. Es una herramienta
muy útil para agilizar un entorno colaborativo de desarrollo ya que cada
programador tendrá la misma versión de toda la aplicación en su equipo, al
tratarse de un archivo de texto se puede guardar en un repositorio de control de
versiones junto al código de la aplicación, de esta manera el proceso de añadir un
nuevo integrante al equipo de desarrollo se resumiría en clonar el repositorio y
ejecutar la imagen.

También podría gustarte