En este vídeo te muestro cómo Dockerizar una API REST desarrollada con Java + Spring Boot con PostgreSQL y Docker Compose para facilitar el despliegue de tus apps en entornos de producción. Además, aprenderás los comandos básicos para gestionar tus contenedores de Docker en lote usando Docker Compose y probaremos nuestra API REST de Spring Boot usando Thunder Client a través de VSCode. Para este tutorial he utilizado Eclipse como IDE para desarrollar con Java, pero puedes usar el IDE que más te guste para este fin. Si te ha gustado o te ha sido útil, no te vayas sin comentar un "que tengas buen código" #programacionenespañol Contenido del vídeo: === 00:00 - Introducción 01:03 - Creando la app 04:27 - Dependencias del proyecto 05:48 - Extensiones de Eclipse 06:28 - Desarrollando la API 11:45 - Conexión a la BD 13:37 - Dockerfile 16:21 - Docker compose 24:00 - Pruebas y correcciones 25:26 - Gestionar contenedores 28:18 - Probando la API 30:11 - Conclusiones Enlaces de interés: === - Spring initializer: start.spring.io/ - Repositorio con el código: github.com/pedrovelasquez9/springboot-postgresql-docker-compose - Devathon: programacion-es.dev/devathon - Redes de la comunidad: programacion-es.dev/redes/ Conviértete en miembro de este canal para disfrutar de ventajas, sorteos exclusivos dentro de la comunidad y un badge con tu imagen de perfil en la web de Programación en español: ua-cam.com/channels/NliuGyPizt7uNcdCrUoduQ.htmljoin
La verdad no tengo nada que decir, solamente agradezcer que alguien por fin da una buena explicacion de como manejar docker compose, ya que todos los demas videos son de hace 2 años y no me han funcionado, sin embargo este fue de gran ayuda, muchas gracias por su aporte.
que maestro! jamas pude hacer andar docker ni lo entendi. pero ahora que me lo explicaste asi ya se como funciona y por donde empezar a dockerizar mis proyectos en spring boot. saludos
GRACIAS! No suelo comentar videos, pero en serio gracias! Estaba muy atascado al intentar dockerizar una app SB, PostgreSQL y Angular; la pereza de no leer documentación y no tomar tan importante el tema de la dockerización hizo que entienda mal muchas cosas y que de muchas vueltas perdiendo mi tiempo. Gracias UA-cam y sobre todo gracias a tí por crear estos videos que quedan como anillo al dedo a gente atascada en cosas específicas ♥
Tengo que agradecerte yo a ti por el comentario, ayer estaba grabando y estaba medio desanimado hasta que hoy leí tu comentario, el hecho de saber que el contenido ayuda me anima un montón a seguir creando, mil gracias y que tengas buen código!!!
Excelente toda la info que tiras hermano, justo estoy aprovechando 1 mes de donweb cloud y esto me viene al pelo para aprovecharlo y desplegar mi api rest. Nuevo suscriptor!
muchas gracias! llevaba ya 1 día intentando desplegar una aplicación pero no conseguía de ninguna forma. tenía un problema con la URL de base de datos. gracias a este video he podido entender como funciona y he podido desplegarlo.
Muchas Gracias por compartir este video me aclaro dudas , me gustaría ver uno de sus videos sobre docker compose con Volumenes para orquestación de front and Backend en java puesto que tengo problemas de permisos con ubuntu Saludos
Gran explicación.... Solo tengo una consulta. Para el desarrollo y depuración con intelliJ Idea, es necesario tener el OpenJDK instalado en el equipo host??? O se puede solo en el contenedor y montar un volumen sincronizando el proyecto?? Muchas gracias
Depende de cómo quieras usar el contenedor, he visto casos donde montan un volumen y sincronizan los cambios en el código con el contenedor levantado a través del volumen, aunque personalmente no soy fan xD
Le entendí a todo tu video, muchas gracias por explicar bien y sin tanto rodeo. Solo una duda, si desarrollé mi app de Spring Boot con JDK 21, qué imagen me recomiendas usar en mi Dockerfile? Intenté con openjdk:21-jdk-alpine pero no existe aparentemente, y estoy pensando si usar openjdk:17-jdk-alpine pero no sé qué tantos problemas entre versiones de JDK pueda traer. Gracias!
Muchas gracias por comentar!! Dependiendo de las fearures que uses puede darte más o menos problemas, si usas algo específico de la 21 que no esté disponible en la 17, por ejemplo. Podrías hacer una prueba inicial de levantado del contenedor a ver qué tal 😎🤘
Esta buenísimo, he estado buscando la parte de docker con spring boot y gradlew. Tengo una duda, que no se si lo haces de esa forma para saltarte algunas cosas o porque simplemente esa es la forma correcta. En el Dockerfile ya tienes previamente generado el jar, por lo que el layer lo único que indica es que copie el jar a la ruta donde te interesa. Pero como haces si quisieras generar el jar y luego copiarlo? Tener esos layer en el Dockerfile
Por qué se construye el .jar si las variables de entorno aún no fueron seteadas hasta antes del minuto 14:40 ? Hasta ese momento solo se configuraron en el application.properties mas no se setearon dichos valores como la url a la base de datos, usuario y la contraseña, lo menciono porque en mi caso, cuando trato de construir el .jar me sale un error sobre que la conexión (url) a la base de datos está incorrecto, agregar que ejecute el comando para que evite los tests, lo intente con Postgres y MySQL y el error es el mismo
Mmm, si te estás saltando los tests, no debería darte error al empaquetar, usualmente da el error de url errónea de conexión a la BD por algún tests por defecto que se está ejecutando al empaquetar. Te copio el comando que estoy ejecutando por si, de casualidad, tenías algún typo: ./mvnw clean package -DskipTests
Amigo muy buen video, estoy haciendo la practica en una maquina virtual con virtual box y estoy en el minuto 23:31 en donde usas este comando "docker-compose up" el comando corre hasta que me muestra este log "database system is ready to accept connections" por favor me podrías decir por que se queda en este proceso, muchas gracias por la atención.
Habría que ver la traza, puede ser por muchas razones, puedes abrir un hilo en nuestro foro de ayuda en el servidor de Discord, el enlace al server lo tienes aquí: programacion-es.dev/redes/
Muy buen video! Consulta. Si tuvieras que hacer cambios en el API REST (porque te pidieron features nuevas), cual seria la forma mas sencilla de programar y testear el API, sin tener que crear la imagen nuevamente?
En principio la generación de versiones de nuevas imágenes te permite justamente trabajar con versiones para nuevos features/fixes, por lo que la idea sería generar nuevas imágenes con versión actualizada. Ahora, si lo que necesitas es un entorno de desarrollo en el contenedor, podrías usar volúmenes para sincronizar tus cambios en el código con la app ejecutándose en el contenedor de Docker =)
No se me ocurrió al momento de hacer el ejercicio, pero me anoto un videillo explicando el concepto y agregandolo al ejercicio de este para complementar 😎🤘
cuando tenga es api en producción como puedo acceder remotamente a la base de datos que esta en el contendor?? o hay manera de configurar el docker para que se conecte a una base de datos del servidor??
¡Muy buen video! Vine aquí porque rstoy teniendo problemas para dockerizar una aplicación con web2py y postgresql para aprender. Pero no sé desde dónde crear la bd. He intentado desde el Dockerfile ejecutando un comando para acceder a postgres, pero me sale error porque al parecer no reconoce la conexión o es rechazada. No creo que sea una buena práctica crear la bd desde allí. ¿Alguien sabe desde dónde la puedo crear? 🥲
Podrías tener un script con las instrucciones de creación de la BD y agregar la ejecución como parte del levantado del contenedor, solo es una idea, no sé si estás buscando algo así =)
Es necesario que el puerto del contenedor sea igual al puerto de la app spring boot? La app inicia en port 8080 y el contenedor también en 8080, pasa algo si son diferentes? Cambia algo?
Hola! Si te refieres al puerto que expones al host, no tiene que ser el mismo, puedes mapear otro puerto, por ejemplo, si la app de spring está en el 8080, puedes mapear el 9090 al host y accedes desde ese puerto =) Te dejo un enlace con documentación por si te hace falta más detalle/ejemplo: docs.docker.com/network/
@@userdefault3016 No estoy seguro de entender qué quieres hacer, pero si tu app está en el puerto 8080 y necesitas, por ejemplo, comunicarte con la app dentro del contenedor por x razón, si, tiene que ser el mismo puerto, el puerto lo define la app, el contenedor lo expone, mapea o bloquea según lo configures
Hola! Esta es una duda más de Spring Boot, noto que si en User.java, no se le declara @Table(name = "users") si no "user" en singular no funciona las consultas a la API, alguien me puede explicar por qué? Me salté eso porque quería dejarlo en singular, pero si no lo pongo en plural no funciona. Gracias!!
Seguramente, si miras los logs al levantar los contenedores, tengas un error de postgresql cuando hibernate trata de crear la tabla porque user es una palabra reservada de postgresql, si quieres usar ese nombre en la tabla, intenta con un scape de comillas, algo tal que así: @Table(name="\"user\"")
Tenés razón, gracias! Otra pregunta: si empaqueto la app con el comando que das de "./mvnw clean package -DskipTests" funciona, pero si corro la aplicación normal por ejemplo en mi IDE Intellij me da un error: "Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource" que basicamente me dice que en application.properties no he definido el url de la bd, tú no hiciste ninguna configuración extra, pero no corriste la aplicación sin tests y eso me genera dudas de como debería de funcionar normalmente, hace falta algún configuración más para que pueda acceder a el contenedor de la bd o algo? Muchas gracias!! @@programacion-es
lo q pasa es q eso se usa para definir el nombre o bien decirle q tabla quiere tomarla de la bd como user osea puedes creae una entidas user pero en la base de datos que ya te dio tu jefe esta como persona tonces hace la entidad user y em table pones persona
hola! cuando intento crear mi archivo jar, me da un error de conexion sql (obviamente la base de datos "no existe" aun ya que no se esta corriendo la imagen de la bd) entonces no me deja correr mi docker compose si no tengo mi archivo jar, pero no me deja generar mi archivo jar si no tengo corriendo la imagen de docker
@@programacion-es graciass, ya lo logré levantar, el tema es que mi app java no se conecta con la bd, lo intento desde mi IDE y mi bd en docker y tampoco, pero si lo hago con una base de datos en mi propio pc (sin docker) ahi si no tengo nigun problema, el error es entre conexiones de contenedores
Mmm, puedes probar ejecutando el proceso de forma manual para que veas los logs específicos de cada comando de forma más directa y ver si la generación del .jar te arroja un error
Tener un Dockerfile pierde totalmente la gracia cuando directamente le pones el compilado dentro, ya que obligas que el compilado se haga desde la maquina del desarollador o la CI. De esta manera tienes dos entornos distintos y uno no controlado. Si usass multi-stage builds solo necesitas compilarlo en una y ejecutarlo en el otro. Esta practica es la habitual en Docker en otros mundos como Go, Rust, C o similares y deberia serlo para Java tambien.
Ayuda, estoy intentando ejecutar una aplicacion pero conectandose a una base MySQL. Pero al ejecutar la imagen me lanza este error en los logs de spring: java.lang.NullPointerException: Cannot invoke "org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(java.sql.SQLException, String)" because the return value of "org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.sqlExceptionHelper()" is null De forma local sin dockerizar la aplicacion ejecuta Ok.
Mmm, puede ser algo con las credenciales o los puertos de tu bd en docker, échale un ojo al log completo por si hay alguna traza haciendo referencia a un error de config más concreto
@@programacion-es Cuando coloco localhost en la url me devuelve un connection refused, con el nombre del contenedor de la base me dice que no reconoce el host. Ya intente de miles de maneras
hola, muchas gracias por el tutorial, muy intersante, tengo un problema de ejecucion para reproducir los pasos, os comento: tras clonarme el repo del project original, crear el paquete jar y lanzar por consola el comando: docker-compose build java_app ( con el comando docker-composite up tb me sale lo mismo) , me sale este error: => ERROR [java_app internal] load build context , failed to solve: changes out of order: "target/dockerized.postgresql-0.0.1-SNAPSHOT.jar" "", lo cual hace que no se me cree la imagen docker necesaria, a alguien mas le sucede o se sabe a que puede ser debido? ... gracias adelantadas. log: [+] Building 4.4s (5/6) docker:default => [java_app internal] load build definition from dockerfile 0.1s => => transferring dockerfile: 177B 0.0s => [java_app internal] load metadata for docker.io/library/openjdk:17-jdk-alpine 3.9s => [java_app internal] load .dockerignore 0.1s => => transferring context: 2B 0.0s => ERROR [java_app internal] load build context 0.1s => => transferring context: 69B 0.0s => [java_app 1/2] FROM docker.io/library/openjdk:17-jdk-alpine@sha256:4b6abae565492dbe9e7a894137c966a74851542389 0.1s => => resolve docker.io/library/openjdk:17-jdk-alpine@sha256:4b6abae565492dbe9e7a894137c966a7485154238902f2f25e9 0.1s ------ > [java_app internal] load build context: ------ failed to solve: changes out of order: "target/dockerized.postgresql-0.0.1-SNAPSHOT.jar" ""
Tengo un problema con un docker compose, me salie el siguiente error: Caused by: java.lang.IllegalArgumentException: URL must start with 'jdbc' En el docker compose esta de la siguiente manera: - DATABASE_URL=jdbc:postgresql://db:5432/SR y en el propierties de la siguiente: spring.datasource.url= = ${DATABASE_URL}
Ojo con el doble "=" en el datasource.url, de todos modos, puedes echarle un ojo al formato del yml y a lo que necesitees en el repositorio del vídeo, te dejo por aquí el enlace: github.com/pedrovelasquez9/springboot-postgresql-docker-compose
En este vídeo te muestro cómo Dockerizar una API REST desarrollada con Java + Spring Boot con PostgreSQL y Docker Compose para facilitar el despliegue de tus apps en entornos de producción.
Además, aprenderás los comandos básicos para gestionar tus contenedores de Docker en lote usando Docker Compose y probaremos nuestra API REST de Spring Boot usando Thunder Client a través de VSCode.
Para este tutorial he utilizado Eclipse como IDE para desarrollar con Java, pero puedes usar el IDE que más te guste para este fin.
Si te ha gustado o te ha sido útil, no te vayas sin comentar un "que tengas buen código"
#programacionenespañol
Contenido del vídeo:
===
00:00 - Introducción
01:03 - Creando la app
04:27 - Dependencias del proyecto
05:48 - Extensiones de Eclipse
06:28 - Desarrollando la API
11:45 - Conexión a la BD
13:37 - Dockerfile
16:21 - Docker compose
24:00 - Pruebas y correcciones
25:26 - Gestionar contenedores
28:18 - Probando la API
30:11 - Conclusiones
Enlaces de interés:
===
- Spring initializer:
start.spring.io/
- Repositorio con el código:
github.com/pedrovelasquez9/springboot-postgresql-docker-compose
- Devathon:
programacion-es.dev/devathon
- Redes de la comunidad:
programacion-es.dev/redes/
Conviértete en miembro de este canal para disfrutar de ventajas, sorteos exclusivos dentro de la comunidad y un badge con tu imagen de perfil en la web de Programación en español:
ua-cam.com/channels/NliuGyPizt7uNcdCrUoduQ.htmljoin
La verdad no tengo nada que decir, solamente agradezcer que alguien por fin da una buena explicacion de como manejar docker compose, ya que todos los demas videos son de hace 2 años y no me han funcionado, sin embargo este fue de gran ayuda, muchas gracias por su aporte.
Infinitas gracias por el comentario, me alegra un montón que el contenido sea útil, un gran abrazo y que tengas buen código!
que maestro! jamas pude hacer andar docker ni lo entendi. pero ahora que me lo explicaste asi ya se como funciona y por donde empezar a dockerizar mis proyectos en spring boot. saludos
Esoooo, me alegra un montón que te haya sido útil!! Un saludo y que tengas buen código!!
GRACIAS!
No suelo comentar videos, pero en serio gracias!
Estaba muy atascado al intentar dockerizar una app SB, PostgreSQL y Angular; la pereza de no leer documentación y no tomar tan importante el tema de la dockerización hizo que entienda mal muchas cosas y que de muchas vueltas perdiendo mi tiempo. Gracias UA-cam y sobre todo gracias a tí por crear estos videos que quedan como anillo al dedo a gente atascada en cosas específicas ♥
Tengo que agradecerte yo a ti por el comentario, ayer estaba grabando y estaba medio desanimado hasta que hoy leí tu comentario, el hecho de saber que el contenido ayuda me anima un montón a seguir creando, mil gracias y que tengas buen código!!!
Excelente contenido man, sos un genio, me aclaraste muchas dudas que tenia sobre docker
Grandeeee me alegra que el contenido te haya sido útil, un saludo y que tengas buen código!!
Debo decir, que este video era todo lo que necesitaba saber, Muchas gracias enserio.
Muchísimas graciaaaas, me alegra un montón que te haya servido, un gran saludo y que tengas buen código!!
Este es el primer vídeo que veo tuyo, muy buen contenido, mil gracias y buen código!
Mil graciaaaaas! Un gran saludo y que tengas buen código!!
Master!!
Excelente, una muy buena base de aprendizaje para avanzar.
Muchas gracias!
Muchas gracias a ti por comentar!! Un saludo y que tengas buen código!!
Excelente toda la info que tiras hermano, justo estoy aprovechando 1 mes de donweb cloud y esto me viene al pelo para aprovecharlo y desplegar mi api rest. Nuevo suscriptor!
Grandeeeeeee, mil gracias por el comentario y el apoyo, un saludo y que tengas buen código!!
Esto sí que es contenido de calidad, crack!
Mil graciaaaaas!!! Se agradece un montón el feedback, un gran abrazo y que tengas buen código!!
Sencillo y muy bueno, gracias.
Gracias a ti por comentar, un saludo y que tengas buen código!!
Excelente aporte, muy bien explicado.
Mil gracias!
Me ha resultado muy útil :-) Muy buen contenido, ¡que tengas buen código!
Esoooo un saludo y que tengas buen código!!
excelente me sirvio mucho, solo tube problemas al empaquetar que por alguna razon daba error y demas, pero despues funciono
saludos !!!!
Esoooo, un saludo y que tengas buen código!!
Excelente contenido y bien explicado al punto. Gracias por compartir
¡¡Mil gracias!!
Excelente explicación!! 🙌
Saludos!!!
Mil gracias!! Un saludo y que tengas buen código!!
Liked and subscribed !
Thanks!!!
Excelente tutorial, me ayudó mucho...suscrito.
!Buen código!
Esooooo, mil gracias por la sub genio!! Un saludo y que tengas buen código!
Excelente video...Muchas Gracias
Muchas gracias a ti por comentar!!
excelente explicacion, gracias
Esooo, gracias a ti por comentar! Un saludo y que tengas buen código!
Muchas gracias por este contenido de alto valor. 🤙
Gracias a ti por el comentario y la buena vibra, un saludo y que tengas buen código!!
gracias estimado. junto lo que estaba buscando.
Esoooo me alegra un montón que te haya sido útil, un saludo y que tengas buen código!!
muchas gracias por el aporte
Mil gracias por comentar!
Muchas gracias Pedro!!!
Muchas gracias a ti por comentar!! Un saludo y que tengas buen código!!
Muchas gracias por este video :D muy útil
Esoooo muchas gracias por el comentario!! Un saludo y que tengas buen código!!
excelente, gracias
Gracias a ti por comentar!! Un saludo y que tengas buen código!!
muchas gracias! llevaba ya 1 día intentando desplegar una aplicación pero no conseguía de ninguna forma. tenía un problema con la URL de base de datos. gracias a este video he podido entender como funciona y he podido desplegarlo.
Ojooo, que grandeeeee, me alegra un montón que el vídeo te haya sido útil, un saludo y que tengas buen código!!
Muchas Gracias por compartir este video me aclaro dudas , me gustaría ver uno de sus videos sobre docker compose con Volumenes para orquestación de front and Backend en java puesto que tengo problemas de permisos con ubuntu Saludos
Tienes un vídeo con volúmenes y redes aquí, por si te sirve =) ua-cam.com/video/DIDel70dFlI/v-deo.html
Vengo por la curiosidad de ver a Pedro usando Eclipse y Java. Contenido de calidad.
Of course que yes, hoy es día de java sin Scripts 😎👨💻🤘😜
Gracias Pedro!!!! 🥰
Gracias a ti por comentar Verónica!! =) Un saludo y que tengas buen código!
Gran explicación.... Solo tengo una consulta. Para el desarrollo y depuración con intelliJ Idea, es necesario tener el OpenJDK instalado en el equipo host??? O se puede solo en el contenedor y montar un volumen sincronizando el proyecto?? Muchas gracias
Depende de cómo quieras usar el contenedor, he visto casos donde montan un volumen y sincronizan los cambios en el código con el contenedor levantado a través del volumen, aunque personalmente no soy fan xD
Le entendí a todo tu video, muchas gracias por explicar bien y sin tanto rodeo.
Solo una duda, si desarrollé mi app de Spring Boot con JDK 21, qué imagen me recomiendas usar en mi Dockerfile? Intenté con openjdk:21-jdk-alpine pero no existe aparentemente, y estoy pensando si usar openjdk:17-jdk-alpine pero no sé qué tantos problemas entre versiones de JDK pueda traer.
Gracias!
Muchas gracias por comentar!! Dependiendo de las fearures que uses puede darte más o menos problemas, si usas algo específico de la 21 que no esté disponible en la 17, por ejemplo. Podrías hacer una prueba inicial de levantado del contenedor a ver qué tal 😎🤘
nice maestro!, nuevo sub
esperando a un tuto desplegando esas imagenes en aws con una base de datos almacenada en RDS
Esooooo, me anoto hacer cosas en AWS para próximos vídeos!! Un saludo y que tengas buen código!!
Esta buenísimo, he estado buscando la parte de docker con spring boot y gradlew. Tengo una duda, que no se si lo haces de esa forma para saltarte algunas cosas o porque simplemente esa es la forma correcta. En el Dockerfile ya tienes previamente generado el jar, por lo que el layer lo único que indica es que copie el jar a la ruta donde te interesa. Pero como haces si quisieras generar el jar y luego copiarlo? Tener esos layer en el Dockerfile
Próximamente grabaré un vídeo con lo que comentas =)
esto es genial!
Mil gracias!!
Que tengas buen código !!!
Esooooo!! Un abrazo y que tengas buen código!!
Por qué se construye el .jar si las variables de entorno aún no fueron seteadas hasta antes del minuto 14:40 ? Hasta ese momento solo se configuraron en el application.properties mas no se setearon dichos valores como la url a la base de datos, usuario y la contraseña, lo menciono porque en mi caso, cuando trato de construir el .jar me sale un error sobre que la conexión (url) a la base de datos está incorrecto, agregar que ejecute el comando para que evite los tests, lo intente con Postgres y MySQL y el error es el mismo
Mmm, si te estás saltando los tests, no debería darte error al empaquetar, usualmente da el error de url errónea de conexión a la BD por algún tests por defecto que se está ejecutando al empaquetar. Te copio el comando que estoy ejecutando por si, de casualidad, tenías algún typo: ./mvnw clean package -DskipTests
@@programacion-es funciono! muchas gracias
Gracias. Tienes mas contenido de Docker?
¡Si! Te dejo una lista de reproducción con mis vídeos de Docker (pronto vendrán más): ua-cam.com/play/PL8ztFHK8Pm3sfDZSTz56VpEcwN-_e0Vn-.html
Amigo muy buen video, estoy haciendo la practica en una maquina virtual con virtual box y estoy en el minuto 23:31 en donde usas este comando "docker-compose up" el comando corre hasta que me muestra este log "database system is ready to accept connections" por favor me podrías decir por que se queda en este proceso, muchas gracias por la atención.
Habría que ver la traza, puede ser por muchas razones, puedes abrir un hilo en nuestro foro de ayuda en el servidor de Discord, el enlace al server lo tienes aquí: programacion-es.dev/redes/
Muy buen video! Consulta. Si tuvieras que hacer cambios en el API REST (porque te pidieron features nuevas), cual seria la forma mas sencilla de programar y testear el API, sin tener que crear la imagen nuevamente?
En principio la generación de versiones de nuevas imágenes te permite justamente trabajar con versiones para nuevos features/fixes, por lo que la idea sería generar nuevas imágenes con versión actualizada. Ahora, si lo que necesitas es un entorno de desarrollo en el contenedor, podrías usar volúmenes para sincronizar tus cambios en el código con la app ejecutándose en el contenedor de Docker =)
@@programacion-es Excelente! Por casualidad no tendras un video de eso, no? jaja
@@rodrigOriginal91 Si, aquí explico volúmenes y redes con Docker =) ua-cam.com/video/DIDel70dFlI/v-deo.html
@@programacion-es Muchas gracias!!!
Muy bueno
Mil gracias!
Təşəkkür.
muy buen video pero tengo la duda de porque no usaste multistage build para el empaquetado de la app spring boot?
No se me ocurrió al momento de hacer el ejercicio, pero me anoto un videillo explicando el concepto y agregandolo al ejercicio de este para complementar 😎🤘
esta pequeña prueba sirve pero +docker seria la voz, mas complejo en produccion
@@poolcitopoolcito9394 tendrías esto como base, el resto dependerá de tu entorno y qué tengas que adaptar al contenedor, redes, config, etc
genial
Mil gracias!
awesome!!!
😎🤘👨💻
cuando tenga es api en producción como puedo acceder remotamente a la base de datos que esta en el contendor?? o hay manera de configurar el docker para que se conecte a una base de datos del servidor??
Si lo tienes en el contenedor, puedes exponer el puerto donde tengas el gestor de bbdd para que puedas acceder desde el navegador =)
¡Muy buen video! Vine aquí porque rstoy teniendo problemas para dockerizar una aplicación con web2py y postgresql para aprender. Pero no sé desde dónde crear la bd. He intentado desde el Dockerfile ejecutando un comando para acceder a postgres, pero me sale error porque al parecer no reconoce la conexión o es rechazada. No creo que sea una buena práctica crear la bd desde allí. ¿Alguien sabe desde dónde la puedo crear? 🥲
Podrías tener un script con las instrucciones de creación de la BD y agregar la ejecución como parte del levantado del contenedor, solo es una idea, no sé si estás buscando algo así =)
Tenes idea de o me podrías pasar un tuto, de como agregar liquibase al docker-compose?
Puedes usar la imagen de liquibase para docker: hub.docker.com/r/liquibase/liquibase
@@programacion-es Muchas gracias!
una pregunta: hay diferencia si lo hago con Gradle en lugar de Maven?
No, solo cambiará lo relacionado con la gestión de los paquetes del proyecto, donde use maven, usas gradle como necesites y listo =)
disculpa la imagen de java que usas me dice que está deprecada ¿crees que es buena idea usar la imagen amazoncorretto
Puedes usar alguna oficial o de otro autor que esté actualizada =) me anoto actualizarla también en el repo del ejercicio
@@programacion-es le agradecería:3
Estupendo video, pero en la parte de docker-compose te caiste al usar un fondo oscuro con letras negras :C.
Nooooo askdjashjdgajhdgahsd lo tomo en cuenta para próximos vídeos, mil gracias por el feedback =)
Hola, que tema esta usando para la consola de bash?
Hola! No estoy usando un tema, estoy usando git bash directamente =)
Es necesario que el puerto del contenedor sea igual al puerto de la app spring boot? La app inicia en port 8080 y el contenedor también en 8080, pasa algo si son diferentes? Cambia algo?
Hola! Si te refieres al puerto que expones al host, no tiene que ser el mismo, puedes mapear otro puerto, por ejemplo, si la app de spring está en el 8080, puedes mapear el 9090 al host y accedes desde ese puerto =) Te dejo un enlace con documentación por si te hace falta más detalle/ejemplo: docs.docker.com/network/
@@programacion-es Hola. No, me refiero al puerto por el cuál escucha el contenedor, no al puerto que mapea al host. Saludos.
@@userdefault3016 No estoy seguro de entender qué quieres hacer, pero si tu app está en el puerto 8080 y necesitas, por ejemplo, comunicarte con la app dentro del contenedor por x razón, si, tiene que ser el mismo puerto, el puerto lo define la app, el contenedor lo expone, mapea o bloquea según lo configures
buen codigo
Esoooo
Hola! Esta es una duda más de Spring Boot, noto que si en User.java, no se le declara @Table(name = "users") si no "user" en singular no funciona las consultas a la API, alguien me puede explicar por qué? Me salté eso porque quería dejarlo en singular, pero si no lo pongo en plural no funciona. Gracias!!
Seguramente, si miras los logs al levantar los contenedores, tengas un error de postgresql cuando hibernate trata de crear la tabla porque user es una palabra reservada de postgresql, si quieres usar ese nombre en la tabla, intenta con un scape de comillas, algo tal que así: @Table(name="\"user\"")
Tenés razón, gracias! Otra pregunta: si empaqueto la app con el comando que das de "./mvnw clean package -DskipTests" funciona, pero si corro la aplicación normal por ejemplo en mi IDE Intellij me da un error: "Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource" que basicamente me dice que en application.properties no he definido el url de la bd, tú no hiciste ninguna configuración extra, pero no corriste la aplicación sin tests y eso me genera dudas de como debería de funcionar normalmente, hace falta algún configuración más para que pueda acceder a el contenedor de la bd o algo? Muchas gracias!! @@programacion-es
lo q pasa es q eso se usa para definir el nombre o bien decirle q tabla quiere tomarla de la bd como user osea puedes creae una entidas user pero en la base de datos que ya te dio tu jefe esta como persona tonces hace la entidad user y em table pones persona
hola! cuando intento crear mi archivo jar, me da un error de conexion sql (obviamente la base de datos "no existe" aun ya que no se esta corriendo la imagen de la bd) entonces no me deja correr mi docker compose si no tengo mi archivo jar, pero no me deja generar mi archivo jar si no tengo corriendo la imagen de docker
Revisa bien qué tienes definido en el Docker compose, fíjate que en el minuto 20:00 comienzo a explicar esa dependencia justamente =)
@@programacion-es graciass, ya lo logré levantar, el tema es que mi app java no se conecta con la bd, lo intento desde mi IDE y mi bd en docker y tampoco, pero si lo hago con una base de datos en mi propio pc (sin docker) ahi si no tengo nigun problema, el error es entre conexiones de contenedores
no se por que me da un error de Communications link failure al momento de iniciar la api ya revise todo y esta igual al video
Ten en cuenta los datos de conexión a tu BD y las demás variables de entorno que estés usando para asegurar que se adaptan a tu entorno
para mysql es lo mismo?
Si, solo cambia la conexión a nivel técnico y donde uso postgre, usarías mysql =)
Que tengas buen codigo.
Esooooo
A alguien más no le sale el archivo .jar en la carpeta target? no lo tengo :(
Mmm, puedes probar ejecutando el proceso de forma manual para que veas los logs específicos de cada comando de forma más directa y ver si la generación del .jar te arroja un error
@@programacion-es Pude corregirlo gracias!
Tener un Dockerfile pierde totalmente la gracia cuando directamente le pones el compilado dentro, ya que obligas que el compilado se haga desde la maquina del desarollador o la CI. De esta manera tienes dos entornos distintos y uno no controlado. Si usass multi-stage builds solo necesitas compilarlo en una y ejecutarlo en el otro. Esta practica es la habitual en Docker en otros mundos como Go, Rust, C o similares y deberia serlo para Java tambien.
De hecho voy a agregar un video a la playlist de multi stage builds =)
@@programacion-es Genial. Con algo simple tienes algo muchisimo mas resiliente.
FROM maven:3.9.9-eclipse-temurin-22-alpine AS build
WORKDIR /app
COPY . .
RUN mvn clean package -DskipTests
FROM eclipse-temurin:22-jre-alpine
WORKDIR /app
COPY --from=build /app/target/demo.jar demo.jar
EXPOSE 3000
ENTRYPOINT ["java", "-jar", "/app/demo.jar"]
Muy util... ahora tengo en mi github un ejemplo de como dockenizar spring + postgres @davidlarocka muchas gracias
¡Esooooo!
Ayuda, estoy intentando ejecutar una aplicacion pero conectandose a una base MySQL. Pero al ejecutar la imagen me lanza este error en los logs de spring: java.lang.NullPointerException: Cannot invoke "org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(java.sql.SQLException, String)" because the return value of "org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.sqlExceptionHelper()" is null
De forma local sin dockerizar la aplicacion ejecuta Ok.
Mmm, puede ser algo con las credenciales o los puertos de tu bd en docker, échale un ojo al log completo por si hay alguna traza haciendo referencia a un error de config más concreto
@@programacion-es Cuando coloco localhost en la url me devuelve un connection refused, con el nombre del contenedor de la base me dice que no reconoce el host. Ya intente de miles de maneras
hola, muchas gracias por el tutorial, muy intersante, tengo un problema de ejecucion para reproducir los pasos, os comento: tras clonarme el repo del project original, crear el paquete jar y lanzar por consola el comando: docker-compose build java_app ( con el comando docker-composite up tb me sale lo mismo) , me sale este error: => ERROR [java_app internal] load build context , failed to solve: changes out of order: "target/dockerized.postgresql-0.0.1-SNAPSHOT.jar" "", lo cual hace que no se me cree la imagen docker necesaria, a alguien mas le sucede o se sabe a que puede ser debido? ... gracias adelantadas.
log:
[+] Building 4.4s (5/6) docker:default
=> [java_app internal] load build definition from dockerfile 0.1s
=> => transferring dockerfile: 177B 0.0s
=> [java_app internal] load metadata for docker.io/library/openjdk:17-jdk-alpine 3.9s
=> [java_app internal] load .dockerignore 0.1s
=> => transferring context: 2B 0.0s
=> ERROR [java_app internal] load build context 0.1s
=> => transferring context: 69B 0.0s
=> [java_app 1/2] FROM docker.io/library/openjdk:17-jdk-alpine@sha256:4b6abae565492dbe9e7a894137c966a74851542389 0.1s
=> => resolve docker.io/library/openjdk:17-jdk-alpine@sha256:4b6abae565492dbe9e7a894137c966a7485154238902f2f25e9 0.1s
------
> [java_app internal] load build context:
------
failed to solve: changes out of order: "target/dockerized.postgresql-0.0.1-SNAPSHOT.jar" ""
Mmm, has construido el paquete para generar el snapshot.jar antes de hacer el docker compose build?
alguien sabe por que sale este error cuando realizo el mvnw install ?
Errors:
[ERROR] ApplicationTests.contextLoads ┬╗ IllegalState Failed to load ApplicationContext for [WebMergedContextConfiguration@210d2a6c testClass = com.pee.dockerized.postgresql.ApplicationTests, locations = [], classes = [com.pee.dockerized.postgresql.Application], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5745ca0e, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@15a34df2, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@3feb2dda, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@1500b2f3, org.springframework.boot.test.context.SpringBootTestAnnotation@ce007a56], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]
solo lo he descargado y ejecutado
Si quieres déjalo en el foro de ayuda de Discord con todo el detalle que puedas =)
Tengo un problema con un docker compose, me salie el siguiente error:
Caused by: java.lang.IllegalArgumentException: URL must start with 'jdbc'
En el docker compose esta de la siguiente manera: - DATABASE_URL=jdbc:postgresql://db:5432/SR
y en el propierties de la siguiente: spring.datasource.url= = ${DATABASE_URL}
Ojo con el doble "=" en el datasource.url, de todos modos, puedes echarle un ojo al formato del yml y a lo que necesitees en el repositorio del vídeo, te dejo por aquí el enlace: github.com/pedrovelasquez9/springboot-postgresql-docker-compose
Que tengas buen código !!!
Grandeeeee, un abrazo y que tengas buen código!!
Que tengas buen código !!!
Grandeeeee