Saltar al contenido principal

Dockerize & Deploy: Desafío Full Stack con Java, Go y PostgreSQL

El objetivo es automatizar la construcción, pruebas, empaquetado y despliegue de las aplicaciones Java y Go, junto con la base de datos PostgreSQL, utilizando Docker y Docker Compose. Incorporar prácticas de versionado semántico y asegurar una integración continua fluida para garantizar la entrega continua y la estabilidad del sistema."

Containerizar una API REST en Java, una aplicación web en Go, una base de datos PostgreSQL, y luego utilizar Docker Compose para orquestar los contenedores. Además, se incluye la subida a Docker Hub y un script bash para manejar versiones que se publican en docker-hub.

Desafío Docker:

Arquitectura

Repositorio


git clone -b ejercicio2-dockeriza https://github.com/roxsross/bootcamp-devops-2023.git

cd 295words-docker

API REST en Java:

Proporciona un proyecto Java que sirva palabras desde una base de datos. Containeriza la aplicación usando un Dockerfile.

Version de JAVA >= 18
Version de Maven >= 3
se recomienda el uso de amazoncorretto
Conexion string base de datos: postgresql://db:5432/postgres [linea 24 , Main.java]
Port 8080

Aplicación Web en Go:

La aplicación web en Go que llama a la API Java y convierta las palabras en oraciones. Containeriza la aplicación utilizando un Dockerfile.

Imagen recomendada: golang:alpine

Base de Datos PostgreSQL:

Configura una base de datos PostgreSQL que almacene las palabras.

data de inicio words.sql

CREATE TABLE nouns (word TEXT NOT NULL);
CREATE TABLE verbs (word TEXT NOT NULL);
CREATE TABLE adjectives (word TEXT NOT NULL);

INSERT INTO nouns(word) VALUES
('cloud'),
('elephant'),
('gø language'),
('laptøp'),
('cøntainer'),
('micrø-service'),
('turtle'),
('whale'),
('gøpher'),
('møby døck'),
('server'),
('bicycle'),
('viking'),
('mermaid'),
('fjørd'),
('legø'),
('flødebolle'),
('smørrebrød');

INSERT INTO verbs(word) VALUES
('will drink'),
('smashes'),
('smøkes'),
('eats'),
('walks tøwards'),
('løves'),
('helps'),
('pushes'),
('debugs'),
('invites'),
('hides'),
('will ship');

INSERT INTO adjectives(word) VALUES
('the exquisite'),
('a pink'),
('the røtten'),
('a red'),
('the serverless'),
('a brøken'),
('a shiny'),
('the pretty'),
('the impressive'),
('an awesøme'),
('the famøus'),
('a gigantic'),
('the gløriøus'),
('the nørdic'),
('the welcøming'),
('the deliciøus');
Imagen recomendada: postgres:15-alpine
datos de conexion:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
Recuerde de inyectar los datos antes de iniciar el contenedor

Docker Compose:

Crea un archivo docker-compose.yml que defina servicios para cada contenedor (api, web, db) y configure las conexiones necesarias entre ellos.

Subida a Docker Hub:

  • Crea cuentas en Docker Hub si no las tienes.

  • Sube las imágenes de tus contenedores al Docker Hub con versiones semánticas utilizando etiquetas. Puedes usar el comando docker push.

Script Bash:

Crea un script bash llamado, por ejemplo, deploy.sh que automatice el proceso. El script debe contener pasos para construir las imágenes Docker, etiquetarlas con versiones, subirlas a Docker Hub y ejecutar Docker Compose.

Utiliza herramientas como git describe o semantic-release para gestionar versiones semánticas automáticamente.

Recuerda documentar adecuadamente tu código, Dockerfiles, y el docker-compose.yml.

El script bash debería ser ejecutable y fácil de entender para facilitar la automatización del proceso.

Resultados: