#4sysadmins

Inicio » GNU/Linux » Docker » Docker

Docker

Últimas Entradas

Follow #4sysadmins on WordPress.com

Docker “es una herramienta que puede empaquetar una, o mas aplicaciones y sus dependencias, en un contenedor virtual aislando estos servicios del resto de procesos de la máquina anfitriona, ofreciendo la posibilidad de poder ejecutar ese mismo contenedor en cualquier servidor Linux”

A diferencia de la virtualización convencional, Docker virtualiza a nivel de OS anfitrión, es decir, no necesita instalar un sistema operativo independiente (Guest) para cada “maquina virtual”. Con ello se evita la sobrecarga que implica el tener que desplegar y administrar una máquina virtual completa.

Docker crea a partir de una imagen de sistema operativo (parecidas a las Live CDs) contenedores en los que son instalados aquellos servicios que se deseen, como por ejemplo samba, http, ftp… de modo que cuando un contenedor sea instanciado como proceso Linux, desplegará una cierta arquitectura de software que será ejecutada de forma aislada al resto de los procesos de la máquina. Podríamos tener un contenedor en el que se ejecutase un servidor LAMP, de manera que cuando este contenedor sea desplegado, Linux, Apache, MySQL y PHP serán ejecutados, encapsulados dentro de un mismo proceso del sistema.

Por lo tanto, múltiples contenedores comparten el mismo Kernel y Hardware, pero cada uno de ellos puede tener ciertas limitaciones o restricciones de acceso a recursos como CPU, RAM, Red, E/S… Para tal aislamiento Docker utiliza características del kernel de Linux tales como cgroups y espacios de nombres (namespaces).

Docker accede a las facilidades de virtualización del kernel de Linux directa o indirectamente. Desde la v.0.9 incluye la librería libcontainer, la cual proporciona acceso directo, mientras que con libvirt, LXC y Systemd-spawn, lo puede hacer de forma indirecta. LXC era utilizado como entorno de ejecución por defecto hasta que se incluyó libcontainer.

Entre otras muchas funciones, Docker permite la automatización del despliegue de aplicaciones dentro de cada uno de los contenedores de software, y que el despliegue de nodos se realice a medida que se dispone de recursos o cuando se necesiten mas nodos, lo que permite crear una plataforma como servicio (PaaS).

Docker se puede integrar con diferentes herramientas de infraestructura como AWS, Ansible, Chef, Cfengine, Google Cloud Plataform, OpenStack, Puppet, Salt y Vagrant.

 

Dependencias

En realidad no son dependencias como tal, si no mas bien los cimientos sobre los que se construye Docker, o de lo que puede haber derivado.

Recomiendo una lectura de los siguientes recursos, para aquellos que quieran conocer un poco mejor el funcionamiento de Docker a bajo nivel:

 

Partes y elementos de los que se compone Docker

Docker Engine

Docker Engine proporciona el core de Docker en si, y está formado por los siguientes componentes:

  • Docker host: dentro de la terminología Docker, debemos de saber que un Docker host, es el host que contiene los contenedores, es decir nuestra máquina local, llamada anfitrión en el resto de sistemas de virtualización.
  • Demonio: utilizado para administrar los contenedores (LXC) en el host anfitrión, de ahora en adelante Docker-Host.
  • CLI: Interfaz de linea de comando para comunicarnos con el demonio de Docker. La sintaxis para interactuar con Docker es la siguiente:
# docker [opciones] [comandos] [argumentos]
# docker run --help
  • Docker images: una imagen es un sistema de archivos independiente junto a unos parámetros, comandos o instrucciones utilizados en tiempo de ejecución. Docker dispone de una plataforma (Docker Hub) en la que deberemos de estar registrados para contar con un usuario con el que poder descargar imágenes, o subir las nuestras personalizadas. Es igual de posible descargar o cargar imágenes en Docker Hub desde el portal web o desde la línea de comandos.

Nota: es bueno hacer público nuestro repositorio.

  • Docker image index: repositorio de imágenes Docker (público o privado)
  • Docker containers: es una instancia de una imagen. Los contenedores son creados al instanciar imágenes mediante Dockerfiles. En definitiva, son directorios del sistema de archivos local (Docker Host)  que contiene todo lo relacionado con la aplicación/es que lo forman. Estos directorios tienen un cierto formato reconocido por Docker. Es posible empaquetar este directorio como otro cualquiera para poder migrarlo a otra máquina. El único requisito es tener configurado el host al que se migra para que sea capaz de levantar contenedores Docker. Cuando se instancia un contenedor se le pasa un comando que será ejecutado dentro del mismo, cuando ese comando finalice el contenedor se detendrá.
  • Dockerfile: script para la automatización del proceso de creación de imágenes. Contienen una serie de comandos o instrucciones que al ser ejecutados generarán una nueva imagen Docker. Los Dockerfiles comienzan con la definición de una imagen base utilizando el comando FROM. Existen otros comandos empleados en un Dockerfile, como por ejemplo:
    • ADD: añadir un archivo local a un contenedor
    • CMD: configura los comandos que serán ejecutados al iniciar la imagen (instanciar el contenedor)
    • ENTRYPOINT: define en el contenedor el punto de entrada de la aplicación
    • ENV: inicializa variables de entorno
    • EXPOSE: expone un puerto al exterior, esto es, será el puerto utilizado por el Docker Host u otros equipos de la red, para comunicarse con el contenedor si es que fuese necesario. Si dentro del contenedor se levanta un Apache, a lo mejor lo configuramos para que escuche en el puerto 80 dentro del contenedor pero este lo mapearemos con un puerto de alto rango del Docker Host por donde se conectará con el exterior
    • FROM: configura la imagen base a usar
    • MAINTAINER: define el autor del archivo Dockerfile
    • RUN: ejecuta un comando y realiza un commit
    • USER: define el usuario que ejecutará contenedores para una imagen determinada
    • VOLUMEN: monta un directorio local en un contenedor
    • WORKDIR: establece el directorio de trabajo donde los comandos definidos por CMD serán ejecutados

Si estás interesado en aprender Docker, en las próximas entradas veremos como instalarlo en múltiples distribuciones Linux y a dar nuestros primeros pasos.

Anuncios

Deja un comentario, Gracias!

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: