lunes, 8 de febrero de 2021

Integración continúa

Con el fin de evitar mayores problemas al final de un nuevo desarrollo extenso, se aconseja utilizar la integración continúa como buenas prácticas.

Los desarrolladores van integrando su código una o varias veces al día en el código base principal. Debido a que se trata de pequeños fragmentos de código, la integración se realiza rápidamente y, en tan solo unos minutos y si se descubre algún error en este proceso, se podrá localizar y solucionar rápidamente.

domingo, 7 de febrero de 2021

RabbitMQ

Es una librería para intercambio de mensajes mediante colas.

Implementa el protocolo AMQP (Advanced Message Queuing Protocol), cuya gran ventaja es que emisores y destinatarios no tienen por qué entender el mismo lenguaje de programación.

Lombok

Es una librería que nos permite a través de las anotaciones obtener un código más limpio y reducido.

Algunas de las anotaciones más utilizadas:

  • @Data ,con esta anotación a nivel de clase, nos ahorramos  tener que añadir  getter/setter o constructores, o los métodos equals, toString().. a una clase.
  • @Setter o @Getter a nivel de propiedad, no es necesario generar el getter y setter de las propiedades que tengan esta anotación. Se puede utilizar también a nivel de clase y generaría para todos las propiedades de la misma.
  • @NotNull  nos ahorramos comprobar si un parámetro de entrada de un método es nulo o no.
Para poder utilizar Lombok, lo único que necesitamos es importar el jar en nuestro proyecto y configurar nuestro entorno de desarrollo para que procese las anotaciones.



martes, 19 de enero de 2021

MongoDB

MongoDB es una de las más famosas entre las bases de datos no relacionales. 

Las bases de datos no relacionales no trabajan con SQL, no tienen tablas ni registros.

MongoDB guarda los datos en documentos, sin seguir ningún esquema predefinido, es una de las diferencias más importante con respecto a las bbdd relacionales. 

Estos documentos son almacenados en BSON, que es una representación binaria de JSON.

MongoDB está escrito en C++, aunque las consultas se hacen pasando objetos JSON como parámetro.

martes, 12 de enero de 2021

Docker Compose

 Docker Compose es una herramienta que permite simplificar el uso de Docker con la utilización de archivos YAML (docker-compose.yml), gracias a esta herramienta podremos crear distintos contenedores, y en cada uno crear diferentes servicios. 

El archivo compose debe estar colocado en la ráiz del proyecto.

Algunos de los comandos más comunes que nos podemos encontrar son:

  • version: muestra la versión de docker-compose. 

  • build: Construye las imágenes de los servicios indicados en el docker-compose file.

  • up: crea y levanta los servicios indicados en el docker-compose file, con el argumento -d lo hace en segundo plano.

  • down: Para todo los servicios indicados en el docker-compose file, destruyendo los contenedores.

  • stop: Solo para los servicios no destruye los contenedores.

  • start: solo levanta los servicios pero no los crea.

  • restart: Reinicia todos los servicios.

Usar Compose es básicamente un proceso de 3 pasos. 

  1. Definir el  entorno de la aplicación con un Dockerfile. 
  2. Definir los servicios que conforman la aplicación en docker-compose.yml para que puedan ejecutarse juntos en un entorno aislado.
  3. Ejecutar docker-compose up y se iniciará y ejecutará toda la aplicación.
  4.  

Veamos un ejemplo sencillo de un archivo yml:

version : "3.8"
services:
    imagen1:
        image: imagen1:1.0
        ports:
            - 80:80
        restart: always
        volumes:
            - app-volume:/var/www/html

version: Es lo primero que definifimos en el archivo y se aconseja utilizar la última versión admitida en Referencia de archivos de Compose 

service: Contiene los contenedores que se crearán para desplegar nuestra aplicación.

En  esta entrada podremos ver más detalles de un docker-compose.yml

 


 

 

lunes, 11 de enero de 2021

DockerFile

Vamos a ver como crear una nueva imagen a través del fichero Dockerfile.

Recordemos que Dockerfile es simplemente un fichero de texto que nos permite definir las instrucciones a seguir por Docker para construir una imagen.

Deben estar guardados dentro de un build context (directorio el cuál contiene todos los archivos necesarios para construir nuestra imagen). El nombre del fichero es Dockerfile sin extensión.

Una buena práctica es crear el archivo .dockerignore que nos ayudá a definir lo que realemente necesita el directorio de contexto . Con este archivo, puede especificar ignorar reglas y excepciones de estas reglas para archivos y carpetas, que no se incluirán en el contexto de compilación y, por lo tanto, no se empaquetarán en un archivo ni se cargarán en el servidor Docker.

Ejemplo sencillo de un archivo Dockerfile:


FROM ubuntu

ADD . /app

RUN apt-get update RUN apt-get upgrade -y

RUN apt-get install -y nodejs ssh mysql

RUN cd /app && npm install

# esto debería iniciar tres procesos, mysql y ssh

# en segundo plano y node app en primer plano

CMD mysql & sshd & npm start

Instrucciones que podemos usar para crear un Dockerfile:

FROM — Especifica la base para la imagen.

ENV — Establece una variable de entorno persistente.

ARG — Permite definir una variable usable en el resto del Dockerfile con la sintaxis ${NOMBRE_DEL_ARG}

RUN — Ejecuta el comando especificado. Se usa para instalar paquetes en el contenedor.

COPY — Copia archivos y directorios al contenedor.

ADD — Lo mismo que COPY pero con la funcionalidad añadida de descomprimir archivos .tar y la capacidad de añadir archivos vía URL.

WORKDIR — Indica el directorio sobre el que se van a aplicar las instrucciones siguientes.

ENTRYPOINT — Docker tiene un Entrypoint por defecto, /bin/sh -c, que se ejecuta cuando el contenedor está listo. Este comando permite sobreescribirlo.

CMD — Especifica el comando y argumentos que se van a pasar al contenedor. Se ejecutarán junto con lo indicado en el Entrypoint.

EXPOSE — Indica que puerto del contenedor se debe exponer al ejecutarlo. No lo expone directamente.

LABEL — Nos permite aportar meta-datos a la imagen.

VOLUME — Crea un directorio sobre el que se va a montar un volumen para persistir datos más allá de la vida del contenedor.

USER — Establece el usuario que se va a usar cuando se ejecute cualquier operación posterior con RUN, CMD y ENTRYPOINT.

SHELL — Permite especificar el uso de otra terminal, como zsh, csh, tcsh, powershell, u otras..

STOPSIGNAL — Indica una señal que va a finalizar el contenedor.

HEALTHCHECK — Indica a Docker una manera de testear el contenedor para verificar que sigue funcionando correctamente.

ONBUILD — Cuando la imagen donde se encuentra se use como base de otra imagen, va a actuar de trigger y va a ejecutar el comando que le indiquemos.



Comandos Docker

  •  docker image muestra todos los comandos  que podemos usar sobre las imágenes.
  • docker container  muestra todos los comandos que podemos usar sobre los contenedores.
  • docker pull NOMBREIMAGEN . Este comando sirve para descargar una imagen.

  • docker images  muestra imágenes que tenemos descargadas.
  • docker ps -a    muestra los contenedores disponibles en tu host.
  • docker run IMAGE_ID, creará y ejecutará un contenedor basado en esta. Si la imagen no existe, Docker primero la obtendrá desde el Hub.
  • docker build [OPTIONS]  <nombre_imagen> construye una imagen
  • docker rmi  IMAGE_ID elimina imagen.
  • docker rmi `docker images -q` elimina todas las imágenes.
  • docker info  Muestra informacion de las imagenes, tamaño , fecha creacion  nombre ,…
  • docker search NAME   para buscar en docker.
  • docker stop NOMBRECONTENEDOR detener un contenedor
  • docker logs <friendly-name|container-id>
En su web podemos.encontrar más información sobre los comandos y sus opciones.