¿Que es Docker?
Proyecto de codigo abierto que automatiza el despliegue de aplicaciones dentro de contenedores de software, proporcionando una capa adicional de abstraccion y automatizacion de virtualizacion a nivel de sistema operativo Linux. Utiliza las caracteristicas de aislamiento de recursos de kernel de Linux, tales como cgroups y namespaces para permitir que contenedores independientes se ejecuten dentro de una sola instancia de Linux, evitando la sobrecarga de iniciar y mantener maquinas virtuales.
El soporte de kernel de Linux para los namespaces aisla de vista, en su mayoria, una aplicacion del entorno operativo, incluyendo arboles de procesos, red, ID de usuario y sistemas de archivos montados, mientras que los cgroups del kernel proporcionan aislamiento de recursos, inluyendo CPU, memoria, bloque I/O y red.
Desde la version 0.9, se inluye la libreria libcontainer como su propia manera de utilizar directamente las facilidades de virtualizacion que ofrece el kernel de Linux, ademas de utilizar las interfaces abstraidas de virtualizacion mediante libvirt, LXC (Linux Containers) y systemd-nspawn.
Docker vs Maquinas virtuales
La principal diferencia es: Una maquina virtuales un sistema operativo completo, mientras que Docker se ejecuta sobre el sistema operativo donde se ejecuta aprovechando los recursos.
Arquitectura
Docker utiliza la arquitectura cliente-servidor. El cliente de Docker habla con el Daemon de Docker que hace el trabajo de crear, correr y distribuir los contenedores. Tanto el cliente como el Daemon pueden ejecutarse en el mismo Sistema, o puede conectar un cliente remoto a un daemon de docker.
Para entender como funciona docker internamente, debemos conocer tres componentes.
Imagenes (docker-images)
Son una plantilla de solo lectura, es decir, una imagen puede contener el Sistema operativo de CentOS o Ubuntu con Nginx instalados, pero esto solo nos permitira crear los contenedores basados en esta configuracion. Si hacemos cambios en el contenedor ya lanzado, al detenerlo esto no se vera reflejado en la imagen.
Registros (docker-registries)
Los registros guardan las imagenes, estos son repos publicos o privados donde podemos subir o descargar imagenes. El registro publico lo provee el Hub de Docker que sirve una coleccion de imagenes para nuestro uso. Los registros de dockers basicamente son el componente de distribucion de docker.
Contenedores (docker-containers)
El contenedor aloja todo lo necesario para ejecutar una aplicacion. Cada contenedor es creado de una imagen de docker. Cada contenedor es una plataforma aislada.
Primeros pasos
Busqueda de imagenes
Una vez instalado docker, en una terminal ejecutamos docker search ubuntu
y nos apareceran resultados sobre imagenes listas para utilizar.
NAME proporciona el nombre de la imagen
DESCRIPTION proporciona una descripcion sencilla de la imagen
STARS indica la popularidad de la imagen
OFFICIAL devuelve un [OK] si es oficial
AUTOMATED indica si es una imagen creada automaticamente (modificacion de otra)
Otra opcion de busqueda, es ir al Hub de Docker y realizar la busqueda.
Descarga de imagen
Cuando tengamos localizada la imagen que queramos descargar, procedemos a su descarga.
El comando es docker pull ubuntu
(siendo ubuntu el NAME que nos proporciono la busqueda). Tambien encontraremos el comando de como ejecutarlo, desde el Hub, a la derecha de la descripcion del repositorio.
Una vez completada la descarga, comprobamos que esta la imagen.
docker images
y nos aparecera la imagen descargada.
Trabajar con la imagen
Para ejecutar la imagen, procedemos a ello con docker run -i -t ubuntu /bin/bash
Siendo -i interactivo, -t tty, ubuntu nombre de la imagen y /bin/bash el comando que ejecutara.
Si por ejemplo, ejecutamos docker run -i -t ubuntu echo "Hello World"
obtendremos unicamente la respuesta del echo
.
_ **El post se ira actualizando _