Empezar a trabajar con Contenedores

El día de hoy vamos a conocer un poco sobre contenedores, si bien el blog es de OpenStack los contenedores hoy en día son parte fundamental de la nube y por esta razón pensé en escribir este post.

En términos generales el trabajo con contenedores busca optimizar recursos creando espacios virtuales de aplicaciones, únicamente cargando el core de la aplicación y sus dependencias, pero funcionando sobre un único sistema operativo, los contenedores se han utilizado por mucho tiempo en sistemas operativos Linux desde ejecutar el comando chroot para indicarle a nuestra sesión que su ruta del directorio / cambio (jail - enjaular) hasta trabajar con software mas especializado como LXC, Cgroups y Docker para hacer este trabajo sobre espacios virtuales mucho mas eficiente y de una forma mas enfocada.


En esta post trabajaremos con Docker que es uno de los productos mas conocidos y con mayor soporte tanto Enterprise como de la comunidad, Docker es una plataforma de código abierto que hace uso de las funciones de aislamiento de recursos del kernel de Linux para poder dar lugar a contenedores independientes, dentro de los cuales se ejecutará una única aplicación con sus respectivas dependencias, aunque funcionando siempre con un único kernel que seria el de la máquina real, esto soluciona tener que virtualizar cada aplicaciones en una maquina virtual o instancia


Como se puede observar en la imagen de la izquierda, las aplicaciones AppA, AppB y AppC unicamente cargan el código de su aplicación y sus archivos binarios y librerías necesarias para su funcionamiento, estas se ejecutan sobre el software docker engine que esta instalado en un sistema operativo, que a su vez esta sobre una infraestructura este servidor puede ser fisico o virtual VS la imagen de la derecha, donde las aplicaciones AppA, AppB y AppC tienen un sistema operativo completo e independiente por cada aplicacion, lo que puede hacer que se ocupe al menos ejemplo, 1 GB de memoria RAM solo en S.O, se estima una aplicación ejecutada un contenedor ocupa alrededor del un 80% menos de recursos, por ejemplo 200 MB de RAM.

Luego de la teoria, vamos a empezar a trabajar con Contenedores

Existen dos métodos para usar contenedores de Docker, El primero consiste en implementar el Docker Engine sobre una instalación existente del sistema operativo.

Si lo vamos a realizar sobre CentOS / Red Hat los pasos serian:

1. Actualizar el Sistema Operativo
yum check-update

2. Descargar e instalar la ultima version de Docker
curl -fsSL https://get.docker.com/ | sh 

3. Iniciar y habilitar el demonio de docker
systemctl start docker
systemctl enable docker

4. Adicionar privilegios de docker al usuario root
usermod -aG docker $(whoami)

El otro método es instalar o desplegar un servidor con una instancia llamada Docker Machine que instala automáticamente Docker en ella.
Algunos de estas S.O conocidos que ya contienen la instalación de docker y se pueden desplegar sobre algunas nubes son:
- CoreOS
- RedHat Project Atomic 
- RancherOS
- Snappy Ubuntu Core 
- Mesosphere DCOS 
- VMware Photon

Una vez tengamos acceso a nuestra instancia con docker (sin importar el método) podemos ejecutar los siguientes comandos básicos:

Comandos básicos

Buscar contenedores disponibles
[root@jmanuelcalvo ~]# docker search centos
En la columna OFICIAL, OK indica una imagen creada y apoyada por la empresa detrás del proyecto.

Descargar el contenedor a su equipo local
[root@jmanuelcalvo ~]# docker pull centos

Visualizar las imágenes descargadas
[root@jmanuelcalvo ~]# docker images

Ejecutar un contenedor en modo interactivo
[root@jmanuelcalvo ~]# docker run -it centos
 -i, --interactive, -t, --tty

Dentro del contenedor se pueden instalar aplicaciones tal como si se estuviera dentro de un S.O
[root@59839a1b7de2 /]# yum -y install httpd
[root@59839a1b7de2 /]# vim /var/www/html/index.html
<h1>Apache en un contenedor</h1>

Importante: Observe el container ID en el prompt del sistema. En el ejemplo anterior, es 59839a1b7de2.

Una vez listo el contenedor con el software instalado y personalizado es necesario salvar los cambios
[root@jmanuelcalvo ~]# docker commit -m "instalacion de apache" -a "Autor Jose Manuel" 59839a1b7de2 carpeta/centos-httpd

Publicar un servicio en Docker
[root@jmanuelcalvo ~]# docker run -i -p 80:80 -t carpeta/centos-httpd /bin/bash
[root@1c827c63f2c5 /]# /usr/sbin/httpd 

IMPORTANTE: si quiere que el servicio de apache se ejecute automaticamente al lanzar el contenedor, se debe crear un script de inicializacion de servicio para usarlo al momento de llamar el contenedor (ejemplo iniciarservicios.sh) donde el script contenga la sentencia de comandos de inicio en formato shell
[root@jmanuelcalvo ~]# docker run -i -p 80:80 -t carpeta/centos-httpd /root/iniciarservicios.sh


Salvar y restaurar una imagen de contenedor en caso que desee guardarla o llevarla a otra maquina que soporte contenedores 
Exportar
[root@jmanuelcalvo ~]# docker save carpeta/centos-httpd -o centos-http.tgz 

Importar
[root@otroserver ~]# docker load --input centos-http.tgz


Listar los contenedores que se ejecutaron para concer su ID o los que se encuentran en ejecucion
[root@jmanuelcalvo ~]# docker ps
[root@jmanuelcalvo ~]# docker ps -a 

Borrar las imágenes descargadas 
[root@jmanuelcalvo ~]# docker rmi 02acb16f957d







No hay comentarios:

Publicar un comentario