This page details a migration of an AWS elasticbeanstalk deployment of a Java microservice with an RDS backend database to docker, kubernetes and helm.
Spring boot based reference architecture - Reference Architecture
Spring boot war deployed to tomcat - Java Spring JPA Microservice on Kubernetes or EKS or ECS or Docker or Beanstalk or EC2 Tomcat Spring Boot
Spring boot jar running the spring embedded tomcat container - Spring Boot Microservice
Infrastructure
Docker
Containerization of Maven Built Artifacts
https://blogs.oracle.com/javamagazine/containerizing-apps-with-jlink
DockerFile using tomcat image
FROM tomcat:8.0.48-jre8 COPY target/biometric.web-*-SNAPSHOT.war /usr/local/tomcat/webapps/biometric.web.war
DockerFile using alpine image
Build/Tag/Deploy Docker Image
see https://hub.docker.com/r/obrienlabs/biometric-web and https://github.com/obrienlabs/biometric under - BIOMETRIC-10Getting issue details... STATUS
obrienlabs:biometric.web.docker michaelobrien$ ./build.sh Sending build context to Docker daemon 50.96MB Step 1/2 : FROM tomcat:8.0.48-jre8 8.0.48-jre8: Pulling from library/tomcat 723254a2c089: Pull complete a23d5c1d9825: Pull complete Digest: sha256:b2cd0873b73036b3442c5794a6f79d554a4df26d95a40f5683383673a98f3330 Status: Downloaded newer image for tomcat:8.0.48-jre8 ---> e072422ca96f Step 2/2 : COPY target/biometric.web-*-SNAPSHOT.war /usr/local/tomcat/webapps/biometric.web.war ---> 5cd1152a967b Successfully built 5cd1152a967b Successfully tagged obrienlabs/biometric-web:latest obrienlabs/biometric-web latest 5cd1152a967b 1 second ago 608MB Authenticating with existing credentials... Login Succeeded The push refers to repository [docker.io/obrienlabs/biometric-web] 2d64f287a896: Pushed 7a5faefa0b46: Layer already exists d1a0f91a1ad8: Layer already exists c4d99fd86e94: Layer already exists 04178c827c65: Layer already exists c571db474d75: Layer already exists 93742a1ae069: Layer already exists 7ffe9646653b: Layer already exists 6ef532e39c1e: Layer already exists a4d7b0ac0438: Layer already exists 06f4de5fefea: Layer already exists 851f3e348c69: Layer already exists e27a10675c56: Layer already exists 0.0.1: digest: sha256:dac09eb8c16fe9d5fb0080479e183acddbd178f77ab60d24fe7072aef0d7d073 size: 3048
Run Docker Image locally
obrienlabs:biometric.web.docker michaelobrien$ docker run / --name biometric_web \ -d \ -p 8888:8080 \ -v ~/Dropbox/env/mbp4/biometric/tomcat-users.xml:/usr/local/tomcat/conf/tomcat-users.xml \ obrienlabs/biometric-web f0f35ace3cacd4dbfd1be709975afc5ff28c22dfe19f014d898db3ce26b35d81 obrienlabs:biometric.web.docker michaelobrien$ docker ps -a | grep biometric f0f35ace3cac obrienlabs/biometric-web "catalina.sh run" 37 seconds ago Up 36 seconds 0.0.0.0:8888->8080/tcp biometric_web # check credentials obrienlabs:biometric.web.docker michaelobrien$ docker exec -it biometric_web /bin/bash root@f0f35ace3cac:/usr/local/tomcat# cat conf/tomcat-users.xml <tomcat-users> <role rolename="admin-gui"/> <user username="tomcat" password="tomcat" roles="manager-gui"/> </tomcat-users>
Login
http://127.0.0.1:8888/manager/html
Check logs
obrienlabs:biometric.web.docker michaelobrien$ docker exec -it biometric_web /bin/bash root@f0f35ace3cac:/usr/local/tomcat/logs# cat localhost.2019-09-04.log fix Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'os.environment.configuration.dir' in string value "file://${os.environment.configuration.dir}/${os.environment.ecosystem}" obrienlabs:biometric.web.docker michaelobrien$ docker stop biometric_web biometric_web obrienlabs:biometric.web.docker michaelobrien$ docker rm biometric_web biometric_web obrienlabs:biometric.web.docker michaelobrien$ docker run --name biometric_web -d -p 8888:8080 -v ~/Dropbox/env/mbp4/biometric/tomcat-users.xml:/usr/local/tomcat/conf/tomcat-users.xml -v ~/Dropbox/env/mbp4/biometric/setenv.sh:/usr/local/tomcat/bin/setenv.sh -e os.environment.configuration.dir=/ -e os.environment.db.biometric.schema=biometric -e os.environment.db.url=jdbc... -e os.environment.db.username=yyyy -e os.environment.db.password=yyyy -e os.environment.discriminator=biometric -e os.environment.ecosystem=prod obrienlabs/biometric-web af2c86207d63a02707872b86c6e5d624d7f4cf3a1c05154008986f2aab8a53f2 obrienlabs:biometric.web.docker michaelobrien$ docker exec -it biometric_web /bin/bash root@af2c86207d63:/usr/local/tomcat# cat logs/localhost.2019-09-04.log 04-Sep-2019 20:46:01.509 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log 1 Spring WebApplicationInitializers detected on classpath 04-Sep-2019 20:46:01.664 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log Initializing Spring root WebApplicationContext 04-Sep-2019 20:46:09.729 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log ContextListener: contextInitialized() 04-Sep-2019 20:46:09.729 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log SessionListener: contextInitialized()
Check website
http://127.0.0.1:8888/biometric.web/
r:5671,s:4271172,hr1:null,hr2:null,45.344003,-75.940494,54
1 Comment
Michael O'Brien
Figured out the issue of why the RDS tunnel is not connecting from inside docker - forgot that 127.0.0.1 inside docker means "this" container itself - not the host machine where the tunnel is running. so application.properties will need to be "host.docker.internal" instead of 127.0.0.1 when debugging appmgr locallythis works now
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(
"jdbc:mysql://host.docker.internal:3406/biometric?useSSL=" + useSSL, username, password);
obrienlabs@172.31.94.184