- Docker Engine
- Docker Hub
- Docker Machine
- Docker Compose
- Kitematic
- Docker Swarm
- Docker Registry
Docker Engine: Cuando hablamos de Docker Engine, nos referimos al demonio Docker que se ejecuta dentro del sistema operativo, puesto que Docker está basado en Linux (aunque actualmente hay versiones desarrollándose para Windows). Sólo es capaz de ejecutarse en este entorno, no obstante, dentro de su página web podemos encontrar instrucciones para poderlo instalar, tanto en Linux en diversas distribuciones, así como instrucciones para instalarlo en entornos Mac OS X y Windows. A Docker Engine también se le denomina Docker Cliente y Servidor.
Docker está disponible para Windows Server y Linux.
Lo que hace en realidad las instalaciones no Linux es levantar una máquina virtual con un Linux muy básico que contiene el demonio Docker, que es el que hace de servidor, y la parte cliente de Docker sí que puede ejecutar en otros sistemas operativos.
El Demonio o servidor es el proceso principal de gestión del engine que corre en la máquina anfitriona. El usuario nunca interactúa con el demonio directamente, sino que lo hace por medio del cliente.
El Cliente es el binario que constituye la interfaz de usuario entre el cliente y el demonio del servicio. Acepta y procesa las acciones del cliente a través de una serie de comandos.
Una Imagen de Docker es análogamente como una plantilla de una máquina virtual, las imágenes son utilizadas para crear contenedores. Las imágenes se pueden actualizar fácilmente y se pueden compartir públicamente, por ejemplo, podemos descargar una imagen con WordPress y ejecutarlo en nuestro entorno, como haríamos con las aplicaciones de una máquina virtual.
Las imágenes están construidas por capas, los contenedores se lanzan o ejecutan desde imágenes, las cuales están construidas previamente. Su formato por capas se construye paso a paso usando una serie de instrucciones, por ejemplo: añadir un fichero, ejecutar un comando, abrir un puerto. Se podría considerar que las imágenes son el “código fuente” para nuestros contenedores, los cuales son portables y pueden ser compartidos, almacenados y actualizados.
- Los Registros de Docker son almacenes de imágenes tanto para acceso privado como público. El lugar habitual donde se comparten públicamente la colección de imágenes se denomina Docker Hub. Cualquiera puede crear una cuenta en Docker Hub y usarla para compartir y almacenar nuestras imágenes. También contiene mas de 10.000 imágenes que otras personas han construido y compartido.
- Un Contenedor de Docker es similar a una carpeta/directorio de un sistema de ficheros, el contenedor alberga todo lo necesario para que una aplicación pueda ejecutarse de forma aislada. En un contenedor, podemos empaquetar nuestras aplicaciones y servicios. Un contenedor lo podemos iniciar, parar, mover o borrar. Un contenedor se ejecuta usando una imagen y puede contener uno o más procesos ejecutándose. Se podría decir que las imágenes construyen y empaquetan aspecto de Docker y los contenedores son los que ejecutan y dan vida a esos aspectos.
- En un entorno de máquinas virtuales, tenemos máquinas individuales donde se ejecuta un sistema operativo completo, con las librerías necesarias y el software que ejecuta las aplicaciones. Con Docker, el “sistema operativo invitado” se convierte en el “Hypervisor”, cada contenedor comparte recursos con el OS anfitrión, en particular, el núcleo de Linux. Este último punto es importante, ya que permite utilizar contenedores que usen distintos sistemas operativos, proporcionando gran flexibilidad. Así que podríamos tener un Ubuntu con SO anfitrión que contuviese contenedores donde corriese CentOS, Debian o Redhat Linux.
Desplegar código desde desarrollo a producción se hace usando contenedores sin que su contenido requiera ningún cambio en alguna etapa intermedia.
Docker Hub
El Docker Hub es un servicio de registro basado en la nube para la construcción y envío de aplicaciones o servicios de contenedores. Proporciona un recurso centralizado para el descubrimiento de la imagen de contenedores , la distribución y la gestión del cambio , el usuario y la colaboración en equipo , y la automatización del flujo de trabajo a lo largo de la línea de desarrollo .
Específicamente , Docker Hub ofrece las siguientes características y funciones principales :
- Repositorio de imágenes: Buscar, administrar y enviar y obtener imágenes oficiales de la comunidad y bibliotecas de imágenes privadas.
- Construcciones automatizadas : Creación automática de nuevas imágenes cuando realiza cambios en una fuente GitHub o un repositorio Bitbucket.
- WebHooks : Una característica para automatizar construcciones, WebHooks permite desencadenar acciones después de enviar con éxito a un repositorio.
- Organizaciones: Crear grupos de trabajo para gestionar el acceso de usuarios a los repositorios de imágenes.
- Integración GitHub y Bitbucket: Añadir las imágenes alojadas en Docker Hub a sus flujos de trabajo.
Docker Machine
Docker Machine permite crear máquinas virtuales en diferentes proveedores, en una máquina anfitrión con VirtualBox hasta Amazon EC2 o Digital Ocean. La lista de controladores soportados es bastante amplia.
Para empezar a utilizar Docker, primero debemos configurar un demonio de Docker. Docker Machine configura automáticamente Docker en su ordenador, en los proveedores en la nube, y dentro de su centro de proceso de datos. Docker machine instala el demonio Docker (también llamado Docker engine) en los anfitriones y luego configura el cliente Docker para que se comunique con los demonios de Docker.
Docker machine automatiza todas las tareas de aprovisionamiento e instalación de un único host Docker .
Con el siguiente comando de ejemplo crearíamos una máquina virtual llamada “dev” dentro de nuestro virtualbox local
$ docker-machine create -d virtualbox dev
Por defecto, cuando se instala Docker en Mac os x, nos instala una aplicación llamada Docker Quickstart Terminal, la cual en realidad arranca usando Docker-machine, una máquina virtual llamada “default” en virtualbox.
Docker Compose
Nos permite definir aplicaciones de varios contenedores en un archivo con las mismas propiedades que indicaríamos con el comando “Docker run” individualmente. Con un único comando, podremos iniciar todos los contenedores y en el orden que especifiquemos.
El archivo descriptor nos puede servir no sólo como forma de iniciar los contenedores en un entorno de desarrollo, sino de documentación de la aplicación en la que veremos claramente que contenedores, imágenes, volúmenes, enlaces y demás propiedades tienen.
El descriptor de contenedores
El descriptor de los contenedores o archivo de definición a usar con Docker Compose es un archivo de texto con formato yaml en la que especificamos los diferentes contenedores y sus propiedades. Básicamente podemos indicar las mismas propiedades que si lo hiceramos arrancando los contenedores individualmente con el comando “docker run”.
Iniciar los contenedores con Docker Compose
Escrito el archivo de definición de contenedores y llamándolo docker-compose.yml, podemos iniciar los contenedores con el comando docker-compose up estando en el mismo directorio de trabajo donde esté ubicado el archivo yml (y previamente habiendo iniciado el servicio o demonio de docker). Con “docker-compose ps” podremos ver el estado de los contenedores y de cuales está compuesta la aplicación. Con la opción –help podemos ver la lista completa de comandos disponibles.
Docker Compose inicia los contenedores en el orden que hemos indicado en el archivo de definición, las trazas emitidas de los servicios de los contenedores aparecerán en la terminal si iniciamos los contenedores en primer plano y con Ctrl+C se pararán los contenedores. Indicando la opción -d los contenedores se iniciarán en segundo plano, con “docker-compose stop” podremos pararlos, con “docker-compose restart” reiniciarlos, “docker-compose rm” para eliminar completamente los contenedores y con “docker-compose logs” veremos las trazas emitidas por los servicios que nos serán de utilidad si iniciamos los contenedores en segundo plano.
Kitematic
Es un proyecto open source (de código abierto) creado para simplificar y racionalizar el uso de Docker en Mac o Windows. Kitematic automatiza el proceso de instalación y configuración de Docker y proporciona una interfaz intuitiva gráfica de usuario para el funcionamiento de los contenedores Docker. Kitematic se integra con Docker-machine para provisionar máquinas virtuales en VirtualBox e instalar el demonio Docker en su máquina.
Una vez instalada la interfaz gráfica de usuario, Kitematic lanza y permite desde la pantalla de inicio en la que muestra las imágenes disponibles que se puedan ejecutar al instante con una sola pulsación de raton. Podemos buscar cualquier imagen pública sobre Docker Hub en Kitematic con tan sólo escribir en la barra de búsqueda. Podemos utilizar la interfaz gráfica de usuario para crear, ejecutar y administrar sus contenedores con sólo hacer clic en los botones. Kitematic le permite alternar entre el Docker CLI y la GUI. Kitematic también automatiza características avanzadas, tales como la gestión de puertos y configuración de volúmenes. Podemos utilizar Kitematic para cambiar las variables de entorno, registros de log, y hacer clic en un sólo terminal en su contenedor Docker, todo desde la interfaz gráfica de usuario.
Lista de contenedores: Listas Kitematic lista todos los contenedores, tanto los que están ejecutándose como los inactivos en el lado izquierdo, debajo del vínculo "Nuevo Contenedor".
La lista contenedor incluye todos los contenedores, incluso los que no han sido iniciados por Kitematic, dándole una vista rápida del estado del demonio Docker.
Se puede hacer clic en cualquier contenedor para ver sus logs (la salida del proceso principal del contenedor), reiniciar, detener o ejecutar en ese contenedor.
La gestión de contenedores podemos hacerla a través del GUI Kitematic. Está aún en fase “Alpha”, pero funciona a la perfección. Desde ella podremos buscar en el repositorio Docker Hub y administrar los contenedores e imágenes que tengamos ya descargadas y/o ejecutándose.
Tenemos una guía completa en: https://docs.docker.com/kitematic/userguide/
Docker Swarm
Swarm es la forma más fácil de ejecutar un contenedor Docker en producción. Permite que una aplicación que está en desarrollo implementarlo en un clúster de servidores.
Debido a que Docker Swarm utiliza el API estándar Docker, cualquier herramienta que se comunique con el demonio Docker puede utilizar Swarm para escalar de forma transparente a múltiples host.
Algunas de las herramientas soportadas serían:
- Dokku
- Docker Compose
- Krane
- Jenkins
Y por supuesto el cliente Docker en sí es compatible.
El primer paso para el uso de swarm en nuestra red es obtener la imagen de Docker Swarm. Después, usando Docker configurar el gestor de swarm y todos los nodos ejecutarán Docker Swarm, esto requiere abrir un puerto TCP en cada nodo para la comunicación con el gestor Swarm, tener Docker instalado en cada nodo y crear y administrar certificados TLS para garantizar la seguridad del clúster.
Como punto de partida, el método manual es el más adecuado para los administradores experimentados. La alternativa sería utilizar Docker Machine para instalar Swarm.
Usando Docker Machine, se puede instalar rápidamente un Docker Swarm en un proveedor, en la nube o dentro de nuestro propio centro de proceso de datos. Si tenemos VirtualBox instalado en la máquina local, podría crear rápidamente Docker Swarm en un entorno local. Este método genera automáticamente un certificado para garantizar la seguridad del clúster.
El uso de Docker Machine es el mejor método para comenzar con Docker Swarm.
Docker Registry
Es un repositorio que nos permite almacenar nuestras propias imágenes.
Por defecto, el registro se levanta sobre una conexión http en claro y sin autenticación.
En el momento de escribir esto Docker registry va por la versión 2.
docker run -d -p 5000:5000 --restart=always --name registry registry:2
Muy buena información
ResponderEliminar