sábado, noviembre 02, 2019

Docker (software)

Esta Escrito:
¿Puede enseñarse a Dios sabiduría, siendo que El juzga a los encumbrados? 
(Job 21:22)
Tomado de: wikipedia
Docker es un proyecto de código abierto que automatiza el despliegue de aplicaciones dentro de contenedores de software, proporcionando una capa adicional de abstracción y automatización de virtualización de aplicaciones en múltiples sistemas operativos.1​Docker utiliza características de aislamiento de recursos del kernel Linux, tales como cgroups y espacios de nombres (namespaces) para permitir que "contenedores" independientes se ejecuten dentro de una sola instancia de Linux, evitando la sobrecarga de iniciar y mantener máquinas virtuales.2
El soporte del kernel Linux para los espacios de nombres aísla la vista que tiene una aplicación de su entorno operativo,3​ incluyendo árboles de proceso, red, ID de usuario y sistemas de archivos montados, mientras que los cgroups del kernel proporcionan aislamiento de recursos, incluyendo la CPU, la memoria, el bloque de E/S y de la red. Desde la versión 0.9, Docker incluye la biblioteca libcontainer como su propia manera de utilizar directamente las facilidades de virtualización que ofrece el kernel Linux, además de utilizar las interfaces abstraídas de virtualización mediante libvirtLXC (Linux Containers) y systemd-nspawn.456
De acuerdo con la firma analista de la industria 451 Research, "Docker es una herramienta que puede empaquetar una aplicación y sus dependencias en un contenedor virtual que se puede ejecutar en cualquier servidor Linux. Esto ayuda a permitir la flexibilidad y portabilidad en donde la aplicación se puede ejecutar, ya sea en las instalaciones físicas, la nube pública, nube privada, etc."7

Docker implementa una API de alto nivel para proporcionar contenedores livianos que ejecutan procesos de manera aislada.8
Construido sobre las facilidades proporcionadas por el kernel Linux (principalmente cgroups y namespaces), un contenedor Docker, a diferencia de una máquina virtual, no requiere incluir un sistema operativo independiente.7​ En su lugar, se basa en las funcionalidades del kernel y utiliza el aislamiento de recursos (CPU, la memoria, el bloque E / S, red, etc.) y namespaces separados para aislar la vista de una aplicación del sistema operativo. Docker accede a la virtualización del kernel Linux ya sea directamente a través de la biblioteca libcontainer (disponible desde Docker 0.9), o indirectamente a través de libvirtLXC o systemd-nspawn69
Mediante el uso de contenedores, los recursos pueden ser aislados, los servicios restringidos, y se otorga a los procesos la capacidad de tener una visión casi completamente privada del sistema operativo con su propio identificador de espacio de proceso, la estructura del sistema de archivos, y las interfaces de red. Contenedores múltiples comparten el mismo núcleo, pero cada contenedor puede ser restringido a utilizar solo una cantidad definida de recursos como CPU, memoria y E / S.
Usar Docker para crear y gestionar contenedores puede simplificar la creación de sistemas altamente distribuidos, permitiendo que múltiples aplicaciones, las tareas de los trabajadores y otros procesos funcionen de forma autónoma en una única máquina física o en varias máquinas virtuales. Esto permite que el despliegue de nodos se realice a medida que se dispone de recursos o cuando se necesiten más nodos, lo que permite una plataforma como servicio (PaaS - Plataform as a Service) de estilo de despliegue y ampliación de los sistemas como Apache CassandraMongoDB o Riak. Docker también simplifica la creación y el funcionamiento de las tareas de carga de trabajo o las colas y otros sistemas distribuidos. 

Tomado de:javiergarzas

¿Qué es Docker?

La idea detrás de Docker es crear contenedores ligeros y portables para las aplicaciones software que puedan ejecutarse en cualquier máquina con Docker instalado, independientemente del sistema operativo que la máquina tenga por debajo, facilitando así también los despliegues.
¡Ala! Definición traducida de la documentación oficial, demasiada información en pocas frases, no me entero de nada. Bien, empecemos por lo primero ¿qué es un contenedor?
Este concepto ya es antiguo, y viene de Linux, pero por hacerte un símil con el mundo real, imagina en tu cabeza un contenedor de esos que suelen llevar los barcos de mercancías, que contiene distintos productos.
docker1


Es algo auto contenido en sí, que se puede llevar de un lado a otro de forma independiente, es portable.
Ahora, volviendo al software, para que podamos acceder como usuarios normales a una aplicación, dicha aplicación software necesita estar ejecutándose en una máquina, en un ordenador. Pero además, dependiendo del tipo de aplicación, dicho ordenador también necesita tener instaladas una serie de cosas para que la aplicación se ejecute correctamente: cierta versión de Java instalado, un servidor de aplicaciones (p.e tomcat, que es el software que realmente estará ejecutando mi aplicación y haciendo que pueda interactuar con ella).
Docker, me permite meter en un contenedor (“una caja”, algo auto contenido, cerrado) todas aquellas cosas que mi aplicación necesita para ser ejecutada (java, Maven, tomcat…) y la propia aplicación. Así yo me puedo llevar ese contenedor a cualquier máquina que tenga instalado Docker y ejecutar la aplicación sin tener que hacer nada más, ni preocuparme de qué versiones de software tiene instalada esa máquina, de si tiene los elementos necesarios para que funcione mi aplicación , de si son compatibles…
Yo ejecutaré mi aplicación software desde el contenedor de Docker, y dentro de él estarán todas las librerías y cosas que necesita dicha aplicación para funcionar correctamente.
En la fecha en la que se ha escrito el post, tienes que tener en cuenta que Docker utiliza ciertos aspectos de Linux, por lo que los contenedores de Docker no funcionan de forma nativa en Windows o OX. Solo funcionan en máquinas Linux, así que si necesitas ejecutar el contenedor sobre una máquina con otro sistema operativo distinto a Linux, deberás instalar una máquina virtual Linux. 

¿Qué beneficios tiene esto?

Docker es una herramienta diseñada para beneficiar tanto a desarrolladores, testers, como administradores de sistemas, en relación a las máquinas, a los entornos en sí donde se ejecutan las aplicaciones software, los procesos de despliegue, etc.
En el caso de los desarrolladores, el uso de Docker hace que puedan centrarse en desarrollar su código sin preocuparse de si dicho código funcionará en la máquina en la que se ejecutará.
Por ejemplo, sin utilizar Docker un posible escenario podría ser el siguiente (hay otras formas de solucionar este escenario, pero por poner un ejemplo claro):
– Pepe tiene en su ordenador instalado Java 8, y está programando una funcionalidad específica de la aplicación con algo que solo está disponible en esa versión de Java.
– José tiene instalado en su máquina Java 7, porque está en otro proyecto trabajando sobre otro código, pero Pepe quiere que José ejecute el código de su aplicación en su máquina. O José se instala Java 8, o la aplicación en su máquina fallará.
Este escenario desaparece con Docker. Para ejecutar la aplicación, Pepe se crea un contenedor de Docker con la aplicación, la versión 8 de Java y el resto de recursos necesarios, y se lo pasa a José.
José, teniendo Docker instalado en su ordenador, puede ejecutar la aplicación a través del contenedor, sin tener que instalar nada más.
Por eso Docker también es muy bueno para el testing, para tener entornos de pruebas. Por un lado, es muy sencillo crear y borrar un contenedor, además de que son muy ligeros, por lo que podemos ejecutar varios contenedores en una misma máquina (donde dicho contenedor tendría el entorno de nuestra aplicación: base de datos, servidor, librerías…). Por otro, un mismo contenedor funcionará en cualquier máquina Linux: un portátil, el ordenador de tu casa, máquinas alojadas en Amazon, tu propio servidor…
Esto además beneficia a la parte de sistemas, ya como los contenedores son más ligeros que las máquinas virtuales, se reduce el número de máquinas necesarias para tener un entorno.
Y lo que es mejor, Docker es open source.
Pero Docker también tiene otras ventajas. En el post de la semana que viene hablaré un poco más de cuáles son los principales elementos de Docker, y veremos otros beneficios que aporta la herramienta. 

¿Y qué diferencia a Docker respecto a una máquina virtual?

Puede que cuando he hablado de que en un mismo ordenador podemos tener varios contenedores Docker te hayas preguntado: ¿y esto no es lo mismo que una máquina virtual?
Realmente el concepto es algo similar, pero un contenedor no es lo mismo que una máquina virtual. Un contenedor es más ligero, ya que mientras que a una máquina virtual necesitas instalarle un sistema operativo para funcionar, un contenedor de Docker funciona utilizando el sistema operativo que tiene la máquina en la que se ejecuta el contenedor.
Digamos que el contenedor de Docker toma los recursos más básicos, que no cambian de un ordenador a otro del sistema operativo de la máquina en la que se ejecuta. Y los aspectos más específicos del sistema que pueden dar más problemas a la hora de llevar el software de un lado a otro, se meten en el interior del contenedor.
Para que te hagas una idea, el concepto de portabilidad de un contenedor de Docker es algo similar a la máquina virtual de Java.
Que un contenedor Docker tome los aspectos básicos de funcionamiento del sistema operativo de la máquina en la que se ejecuta lo vuelve más ligero que una máquina virtual.

Link de Interes: https://poesiabinaria.net/2019/01/utilizar-php-desde-contenedores-docker-tanto-forma-local-produccion/

https://www.campusmvp.es/recursos/post/como-empezar-a-desarrollar-utilizando-docker.aspx

domingo, marzo 24, 2019

SASS y LESS : El presente de CSS

Está Escrito:
Porque la paga del pecado es muerte, mas la dádiva de Dios es vida eterna en Cristo Jesús Señor nuestro.(Romans 6:23)
 Tomado de: Maquetando

A medida que la web sigue avanzando más personas están recurriendo a los pre-procesadores CSS (si sigues escribiendo CSS puro me temo que  estas perdiendo la mitad tu vida detrás de ese ordenador)   hoy hablaremos de LESS y SASS ,  no hay duda de que ambos son los preferidos por la comunidad, tambien esta stylus pero lo abordemos en otro post .

¿Que es un pre-procesador CSS?

Un preprocesador de CSS es una herramienta que nos permite escribir pseudo-código CSS que luego será convertido a CSS real. Ese pseudo-código se conforma de variables, condiciones, bucles o funciones. Podríamos decir que tenemos un lenguaje de programación que genera CSS.
El objetivo de estos preprocesadores es tener un código más sencillo de mantener y editar. Los preprocesadores incluyen características tales como variables, funciones, mixins, anidación o modularidad.

SASS


SASS se desarrolla en 2007 (si desde 2007 hay pre-procesadores, muchos los descubrimos años despues) , SASS ha convertido en el pre-procesador mas utilizado – y por una buena razón. A pesar de que ha existido durante casi una década los desarrolladores detrás SASS siguen ampliar su funcionalidad .
SASS sobresale al utilizarse con frameworks como Compass y Bourbon , ya que estos anexan la funcionalidad que quizá SASS debería tener de forma nativa.

Sintaxis

SASS permite el uso de dos sintaxis diferentes para crear sus archivos. La primera, conocida como SCSS (del inglés, Sassy CSS) .
Además, SCSS es capaz de entender la mayoría de hacks de CSS y la sintaxis específica de los navegadores, como por ejemplo la vieja sintaxis filter de Internet Explorer. Obviamente esta sintaxis básica de CSS se ha mejorado con las características de Sass.
Los archivos creados con esta sintaxis utilizan la extensión .scss.
La segunda sintaxis, conocida como “sintaxis indentada” o simplemente “sintaxis sass” permite escribir los estilos CSS de manera más concisa. En este caso, el anidamiento de selectores se indica con tabulaciones en vez de con llaves y las propiedades se separan con saltos de línea en vez de con puntos y coma.
Los archivos creados con esta segunda sintaxis utilizan la extensión .sass
Algunos diseñadores consideran que esta segunda sintaxis es más sencilla de leer y más rápida de escribir que SCSS. En cualquier caso, las dos sintaxis tienen exactamente las mismas funcionalidades .
Una de las ventajas de SASS es que los archivos creados con una sintaxis pueden importar cualquier archivo creado con la otra sintaxis. Además, dispones de una utilidad para la línea de comandos que te permite convertir una sintaxis en otra.

Sass incluye las siguientes características:


  • 100% compatible con CSS3.
  • Permite el uso de variables, anidamiento de estilos y mixins.
  • Incluye numerosas funciones para manipular con facilidad colores y otros valores.
  • Permite el uso de elementos básicos de programación como las directivas de control y las librerías.
  • Genera archivos CSS bien formateados y permite configurar su formato.
  • Integración con Firebug gracias a la extensión FireSass.

Instalación

Hay dos formas de utilizar y compilar SASS  la fácil y la difícil.

La “difícil” pero mas potente :

SASS  utiliza el lenguaje ruby por lo que tendremos que tenerlo instalado en nuestras maquinas  :

Linux

Si estás usando una distribución de Linux, necesitaras instalar Ruby desde el  gestor de paquetes apt, rbenv o RVM.

Windows

Antes de empezar a usar Sass tendrás que  instalar Ruby. La manera más rápida para obtener Rubí Windows es utilizar instalador  super rápido.
El programa de instalación también instalará una línea de comandos o  powershell Ruby que permitirá utilizar las bibliotecas de Ruby.

Mac

Instalar SASS  es un proceso bastante rápido si estás usando un Mac, felicitaciones, Ruby viene pre-instalado .

Instalar Sass

La instalación de  SASS se realiza mediante el uso de la línea de comandos:
Abrimos la terminal :
En el Mac e terminal.app viene instalado por defecto,se encuentra ubicado en la carpeta “Utilidades”.
En Windows, ejecuta  cmd.
Linux : bah! ya sabes.
Rubí utiliza gemas para gestionar sus diversos paquetes de código como Sass. En el tipo de ventana de terminal abierta:
Esto instalará Sass y sus dependencia , es bastante mágico. Si recibes un mensaje de error, entonces es probable que tengas que anteponer el comando sudo  :
Doble verificación. Ahora debe tener Sass instalado, pero nunca está de mas la  doble verificación, escribe esto en la terminal :
sass -v

Si la respuesta es Sass 3.4.17 (Selective Steve)    perfecto , hemos instalado SASS , ves no dolió tanto.

Compilar nuestro SCSS a CSS

Ahora compilaremos nuestro archivo SASS a CSS
La gran ventaja de esta forma de utilizar SASS es que es mas potente debido a la cantidad de comandos que tenemos disponibles.

La forma fácil :

Hay un gran  número de aplicaciones que  conseguirán poner a SASS  en marcha y funcionando en unos pocos minutos , existen aplicaciones gratuitas y de pago (algunas merecen el gasto) que nos ayudaran a trabajar con SASS :
Para poder compilar nuestro archivo SCSS por ejemplo en Koala , simplemente lo seleccionamos y convertimos , listo.
SASS es un tema extenso pero hay suficiente material en la web para aprender,   un recurso muy bueno es este Libro Web dedicado a SASS.

LESS

Dos años después del lanzamiento de Sass otro CSS pre-procesador llegó a la escena web . LESS nació como una gema para Ruby en  2009 como una alternativa a Sass pero desde entonces ha sido reescrito en JavaScript.
A pesar de que no es mucha la diferencia, algunas personas prefieren usar JavaScript sobre Ruby dicho esto , LESS proporciona una funcionalidad muy similar a la de SASS ,sin embargo, la sintaxis es un poco diferente.
LESS añade comportamiento dinámico a CSS, por ejemplo variables, mixins, operaciones y funciones. LESS puede ejecutarse del lado del servidor (usando Node.js y Rhino) o del lado del cliente (en navegadores modernos).

Sintaxis

LESS proporciona los siguientes mecanismos: variables, anidamiento, operadores, mixins y funciones. La principal diferencia entre LESS y otros pre-procesadores CSS es que LESS permite la compilación en tiempo real.
El ámbito de las variables en LESS es muy similar al de la mayoría de lenguajes de programación. Las variables y los mixins se buscan primero en el ámbito local, si no son encontrados, el compilador buscará en el ámbito inmediatamente superior, y así sucesivamente.
Una pequeña diferencia de SASS es que usa el símbolo @ para las variables, SASS utiliza la $, que es el signo que  SASS utiliza para mixins.