Docker: conceptos principales y tutorial paso a paso

Virtualización con Docker primeros pasos

Hoy queremos hablaros de Docker un proyecto que cada día es más usado, porque permite desplegar programas en contenedores de software.

¿Qué es y cómo funciona Docker?

Como hemos comentado, Docker es un proyecto Open Source creado y liderado por Solomon Hykes que afronta el problema de la virtualización de servicios y programas. Este tema es muy importante, ya que se busca aprovechar al máximo el recurso disponible (un servidor) para ejecutar los servicios que necesitemos.

El funcionamiento de Docker es distinto a los métodos más comunes que se han utilizado anteriormente, ya que no necesita un sistema operativo invitado para ejecutar sobre él los servicios, sino que lo hace sin este intermediario. Esta tecnología se denomina de contenedores, siendo un contenedor un programa, servicio o sistema que queremos desplegar. Esta arquitectura se puede ver en la siguiente ilustración:

Contenedores de Docker

Al no utilizar máquinas virtuales es capaz de conseguir un mayor rendimiento, ya que el consumo de recursos es menor. Sin embargo, gracias al uso del kernel de Linux es capaz de aislar cada contenedor. Esta decisión también aporta otras características como una mayor seguridad (gracias a estar aislados) o un despliegue más rápido de los recursos.

Leer más

Crea diagramas rápidamente usando código

Crea diagramas rápidamente usando código

Cada vez estamos más acostumbrados a usar código para generar la infraestructura (IaC), documentar nuestro código (Gherkin) y multitud de tareas más, así que los diagramas no se pueden quedar atrás. Esto es debido a que usar código nos permite versionar los ficheros de manera muy fácil, ver los cambios y tener el fichero fuente para poder realizar modificaciones. Además este tipo de modelos se integran de forma perfecta con el modelo de trabajo habitual de un desarrollador, por lo que no es algo que necesite una nueva infraestructura, ni forma de proceder.

 

Diagramas UML

UML, acrónimo de Lenguaje Unificado de Modelado, es un estándar para esquematizar y realizar diagramas de características del software. En mi caso particular, sobre UML tuve un par de asignaturas en la carrera de Ingeniería Informática, pero el tema es demasiado extenso como para dominarlo aún después de cursarlas. En definitiva cada tipo de flecha, color, grosor y forma tiene una connotación específica que seguramente a la mayoría se nos escape, por ello os recomiendo que os centréis en los aspectos fundamentales, si vuestro trabajo no requiere de tal rigurosidad. Al final lo importante es que todos entendamos lo mismo al leer el diagrama.

Desde mi punto de vista, el tipo de diagrama más importante y que aporta más valor es el diagrama de secuencia, por los siguientes motivos:

  • Representa todos los actores involucrados
  • Muestra el orden en el que se producen las acciones
  • Define quién es el origen de la acción y cuál es el destino
  • Permite un gran nivel de detalle
  • Se adapta muy bien a multitud de ambientes (desarrollo web, móvil, de escritorio, etc.)

Leer más

Procesamiento del lenguaje natural con ElasticSearch

Procesamiento del lenguaje natural con ElasticSearch

Uno de los problemas que se presentan con una mayor frecuencia hoy en día, es la realización de búsquedas textuales. Este problema se puede resolver con muchos enfoques, desde una búsqueda exacta como permiten la mayoría de los lenguajes de programación, hasta la utilización de algoritmos de procesamiento del lenguaje natural.

¿Qué es el procesamiento del lenguaje natural?

El procesamiento del lenguaje natural, conocido también por sus siglas en inglés NPL consiste en desarrollar y aplicar distintas técnicas, metodologías y algoritmos que utilizan como entrada y/o salida texto o voz. La complejidad de este campo, es que agrupa conceptos como:

  • El reconocimiento de voz (traducir la voz en texto).
  • La síntesis de voz (traducir el texto en voz).
  • La traducción en tiempo real.
  • La identificación del idioma del usuario.

Además, hay que tener en cuenta que mientras que la escritura por ordenador es siempre igual, en el caso de la voz cada usuario dependiendo de su lugar, sexo, edad, etc presenta características distintas.

¿Qué es ElasticSearch?

ElasticSearch es un proyecto basado en Apache Lucene, que nos permite tener un servidor para realizar búsquedas. El proyecto fue creado por Shay Banon y tiene como principales características la velocidad de búsqueda y la escalabilidad. Este software es ampliamente usado en buscadores, e-commerce y para tratar el lenguaje natural.

Leer más

Elige tecnología clásica y aburrida

Elige tecnología clásica y aburrida para tus proyectos

Uno de los problemas que solemos tener los programadores, es que nos gusta estar a la última y usar aquello que acabamos de leer que usa Google, Facebook o la startup que lo está rompiendo. Sin embargo, ¿es esto lo mejor?

Tú no eres Google

Últimamente veo muchos equipos pequeños, startups y compañías con equipos técnicos poco maduros y no muy grandes apostar por arquitecturas o tecnologías muy modernas, como los microservicios, bases de datos NoSQL, etc. En mi opinión, uno de los principales problemas de esto, es utilizar una herramienta, tecnología o metodología porque X empresa lo usa. Está claro que todos queremos hacerlo lo mejor posible y aprovechar todas las novedades, pero muchas veces se toman decisiones que son como matar moscas a cañonazos.

Donde digo Google, puedes poner cualquier otra tecnológica grande como Facebook, Microsoft, Amazon, etc.

¿Cuáles son tus problemas? ¿Cuáles son los problemas de Google?

Los problemas de Google los podemos resumir en los siguientes puntos:

  • Un tráfico ingente
  • Miles de desarrolladores a gestionar
  • Muchísimos servicios distintos
  • Necesidad de integrar todos los productos
  • Un nivel de disponibilidad de prácticamente el 100%

Sin embargo, dudo mucho que tú/tu empresa tengáis un tráfico similar al de Google, ni seáis miles de desarrolladores, ni tengaís decenas de productos. Entonces, cuál es la necesidad de cosas como:

  • Bases de datos NoSQL cuando tus datos siempre siguen un esquema
  • Microservicios cuando con un par de instancias de tu monolito soportas todo tu tráfico
  • Microservicios cuando solo tienes un producto, hecho en una tecnología y por un único equipo de desarrollo
  • Colas de eventos cuando lanzas un número muy limitado de eventos
  • Microfrontents cuando el equipo de front son pocas personas

Si quieres leer más, te recomiendo el artículo que me dio idea para realizar esta sección.

Leer más

Cómo usar Docker en Windows

Cómo usar Docker en Windows

Docker es una de las herramientas más usadas por los desarrolladores, sin embargo, usarlo en Windows tiene algunas características especiales que deberás conocer.

¿Cómo funciona Docker en Windows?

Como ya comenté en la entrada general para aprender docker, Docker aprovecha una serie de características del Kernel de Linux para conseguir seguridad y aislamiento de cada contenedor. Esto no lo soporta Windows, así que en un primer momento Windows necesitaba crear una máquina virtual Linux, para ejecutar Docker en ella. Básicamente eso era lo que hacía Docker Desktop, como puedes ver en la siguiente imagen:

Docker en Windows crea una máquina virtual vía Hyper V

Sigue leyendo si queres saber otra manera de hacerlo funcionar

¿Es necesario usar Windows 10 Pro?

Como seguramente te preguntarás, ¿se puede usar Docker sin Windows 10 Pro?, esta pregunta debe ser contestada con un depende. Por una parte Hyper-V necesita de Windows 10 Pro para instalarse y como he dicho anteriormente, Docker se apoya en Hyper-V para funcionar, así que sí sería necesario. Sin embargo, hay otra manera de hacerlo funcionar usando WSL.

Leer más

Analiza el coste del uso de JavaScript

Analiza el coste del uso de JavaScript

Como seguramente sabrás el uso de JavaScript ha crecido exponencialmente en los últimos tiempos, sin embargo, su uso exagerado está haciendo que muchas webs se vuelvan lentas.

¿De dónde viene el coste de JavaScript?

Hoy en día, las páginas webs están cargadas de código JavaScript que permite añadir gran cantidad de dinamismo, eventos, acciones, validaciones y en definitiva a crear grandes diseños, fluidos y personalizados. Sin embargo, todo esto no viene de gratis, sino que tiene un coste que presenta dos patas:

  • El coste de descargar el código JavaScript
  • El coste de parsear y ejecutar el código JavaScript

En lo relativo al coste de descargar el código, es una característica que comparte con otros recursos como las imágenes o las hojas de estilo CSS.

Leer más

¿Cómo usar agile para mejorar tu gestión de proyectos?

¿Cómo usar agile para mejorar tu gestión de proyectos?

En los últimos tiempos y debido a la transformación digital de las empresas, cada vez la gestión de proyectos cobra más importacia. En este artículo te quiero enseñar como la metodología agile permite mejorar tu productividad.

¿Cómo era la gestión de proyectos antes de agile?

Como sabrás, antes de agile también se gestionaban proyectos y la manera de enfocarlo solía ser mediante una metodología en cascada. Esto consiste en una serie de fases, donde al finalizar cada una de ellas se logra una parte del proyecto y luego se salta a la fase siguiente. Un ejemplo podría ser el siguiente:

  1. Toma de requisitos mediante reuniones con el cliente
  2. Análisis del proyecto
  3. Diseño de la implementación
  4. Desarrollo del diseño propuesto
  5. Pruebas

Este modelo de gestión de proyectos tienen bastantes problemas:

  • Hasta finalizar el desarrollo, es imposible validar que lo que se ha hecho cumple con los objetivos principales
  • No se puede hacer pruebas con usuarios hasta mediados del punto 4
  • Poca flexibilidad y posibilidad de realizar cambios

Por todo ello, un grupo de personas se reunió para plantear una metodología mejor que se adaptase a la forma de ser de los proyectos software.

Leer más

¿Cómo prepararte para una entrevista de trabajo?

¿Cómo prepararte para una entrevista de trabajo?

Uno de los temas que son más populares hoy, son las entrevistas de trabajo en el campo de la informática. Como sabrás, el sector cada vez crece más y la necesidad de encontrar personal cualificado, hace que las compañías se lances a realizar ofertas y entrevistas a multitud de candidatos.

¿Se pueden preparar la entrevistas de trabajo?

En mi opinión, hay una parte muy difícil de preparar, que está relacionada con la parte técnica. Esto es debido, a que cada empresa suele elegir una vía en la que enfocar sus preguntas. Algunas prefieren preguntar directamente problemas que han sufrido en los últimos tiempos y cómo los solucionarías, otras van más hacia temas más teóricos y otro grupo se centra en preguntas de manual.

Para preparar esta parte de preguntas técnicas, te recomendaría hacer lo siguiente:

  • Leer blogs técnicos de tecnología variados, para conocer qué hacen los grandes jugadores (Amazon, Google…) y las novedades del sector, como la programación funcional.
  • Tener algún desarrollo que se pueda enseñar, si lo publicas en GitHub, mejor.
  • Conocer los principios de la programación orientada a objectos, SOLID, algoritmos y las estructuras de datos.

La parte que sí considero que se puede preparar más, es la relativa a la entrevista con recursos humanos. Principalmente, porque las preguntas suelen ser muy similares y se podrían englobar en:

  • Preguntas sobre ti a nivel personal, cosas que te gustan, ambiciones, cómo eres, etc.
  • Preguntas sobre tu formación.
  • Cuestiones sobre tu experiencia profesional.
  • Información relativa a por qué tienes interes en cambiarte y qué buscas con el cambio.

Leer más

Cómo comprobar la seguridad de una web

Como comprobar la seguridad de una web con Flan

¿Cómo analizar la seguridad de una web?

Cada vez preocupa más los graves problemas a los que se enfrentan los negocios online por no comprobar la seguridad de una web. Esto da lugar a multitud de sitios inseguros, que son presa fácil de estafadores y otros piratas informáticos. Por ello es muy importante analizar la seguridad de una web de manera periódica, así como, un buen mantenimiento preventivo y mantener copias de seguridad.

Me gustaría hacer una mención especial a un tipo de proyectos que cada vez es más común, los proyectos WordPress, debido a que, en líneas generales, la seguridad web de WordPress deja mucho que desear, en su configuración por defecto. WordPress es el principal CMS del mercado y muchas veces se usa para webs de bajo presupuesto, que no tienen mantenimiento, lo que les hace ser un objeto directo de los ataques informáticos. Como consejo, si te preocupa la seguridad de tu web y usas WordPress te recomendaría dejar de usar servicios y desarrollos de dudosa procedencia y aprender cómo desarrollar para este CMS.

Para securizar una web, el primer paso que debes dar es comprobar sus problemas de seguridad, usando herramientas como nmap. Sin embargo, este es un proceso complejo y un poco lento, por ello hoy te quiero enseñar otra herramienta más sencilla, pero igualmente útil.

Leer más

Como crear una web: 5 Gtmetrix y la optimización

 

Como crear una web la optimización y GTmetrix

 

Una vez que ya tenemos el diseño creado de nuestra web, es muy importante verificar si este diseño es óptimo o si por el contrario debe sufrir algunas modificaciones para que el rendimiento en general de la web sea mayor. Para todo ello, el administrador cuenta con una serie de herramientas, con las cuales puede “medir” lo bien diseñada que está la web.

Conceptos clave en la optimización

Para la optimización de páginas web, hay una serie de conceptos que se deben conocer tanto qué son, como el cómo afecta a mi web. Aquí detallo las más importantes:

  • Tiempo de carga de página (Page load time): este concepto es bastante sencillo, se refiere al tiempo que tarda nuestra página en cargarse por completo. Según algunas informaciones Google toma en cuenta los tiempos de carga de página para el posicionamiento y este debería siempre estar en la medida de lo posible por debajo de 5s. Es muy recomendable tiempos de carga entorno a 2s ya que el usuario suele abandonar si tarda mucho nuestra página en cargar, además desde redes móviles los tiempos de carga suelen ser mayores, con lo que se agrava el problema.
  • Tamaño de la página (Total page size): es lo que pesa nuestra página, hace un par de años, era un concepto poco importante porque nuestras conexiones eran lo suficientemente rápidas en este aspecto, hoy en día nadie quiere que al visitar x página gaste 15MB de su tarifa de datos. Así que hay que mantener esto lo más bajo posible, se recomienda que no sea muy superior a 1MB.
  • Número de peticiones (Total number of requests): es el número de peticiones que debe realizar nuestro ordenador al servidor, para cargar la página completa. Una petición se puede generar por muy diversos motivos como: cargar una imagen, cargar un archivo javascript, cargar una hoja de estilos etc. El problema es que el servidor tarda un tiempo en atender cada petición, así que por muy rápido que sea nuestro servidor, si realizamos 200 peticiones siempre tardará un mínimo de tiempo, por el tiempo de procesar la petición. Aquí se recomiendan utilizar una única hoja de estilos para toda la web, pocos archivos de javascript y combinar las distintas imágenes o cambiarlas por código CSS si son botones, para reducir las peticiones.
  • Número de peticiones a la base de datos: este dato no sale en GTmetrix, pero si nos sale a los administradores en nuestros CMS (si tenemos alguno instalado), esto nos indica cuantas consultas se tienen que hacer en la base de datos para mostrar la página. Como en el apartado anterior hay que minimizar al máximo el número de consultas.

Leer más