BELFAST JUG
SPRING BOOT & DOCKER
// NICE TO MEET YOU:
- HUDSON MENDES, 32
- ITALO-BRAZILIAN (BORN IN BRAZIL)
- HYBRID-CREATURE (JAVA AND .NET)
- BETWEEEN PYTHON AND RUBY? RUBY
- LOVE ANIME & _LOVE_ GUINNESS!
- BEEN A SOFTWARE ENGINEER SINCE 1999
IF DEPLOYING SOFTWARE IS HARD, (…), THEN
DEVELOPERS WILL OFTEN BUILD EVERYTHING
INTO THE EXISTING APPLICATION IN ORDER TO
AVOID SUFFERING THE NEW DEPLOYMENT
PENALTY.
Karl Matthias, Docker: Up & Running
SPRING BOOT & DOCKER
DEVELOPING MICROSERVICES MUST BE EASY…

DEPLOYMENT MUST BE

EVEN EASIER!
Karl Matthias, Docker: Up & Running
AN ENGINEERING
PERSPECTIVE TO DOCKER
// TODO:
- overview on docker
- simple spring boot application (.jar)
- wrapped with Dockerfile, Gradle and Maven
- deployed to a repository, ran locally and ran remotely (ECS)
- in the build pipeline
- a glimpse of what matters from the docker ecosystem
AN ENGINEERING
PERSPECTIVE TO DOCKER
// TODO:
WHAT IS DOCKER? BUILD DOCKER IMAGE RUN DOCKER CONTAINER MAKING IT WORK FOR YOU
OVERVIEW
SPRING BOOT &
DOCKER
SPRING BOOT & DOCKER
OVERVIEW
Source “8 surprising facts about Docker”

(https://www.datadoghq.com/docker-adoption/)
SPRING BOOT & DOCKER
OVERVIEW
Source Google Trends, compare Docker, Virtualisation, Angularjs

(https://trends.google.com/trends/explore?q=docker,virtualization,angularjs)
SPRING BOOT & DOCKER
OVERVIEW
Why?
SPRING BOOT & DOCKER
OVERVIEW
Source: “Performance on Docker vs VMs” (by Ali Hussain, Flex7)

(https://www.slideshare.net/Flux7Labs/performance-of-docker-vs-vms)
SPRING BOOT & DOCKER
OVERVIEW
SPRING BOOT & DOCKER
OVERVIEW
Must knows
‣ Conceptual evolution of LXC
‣ Not A VIRTUAL MACHINE
‣ Initial release: 2014
‣ Open API
‣ Now supports Windows
SPRING BOOT & DOCKER
OVERVIEW
SPRING BOOT & DOCKER
OVERVIEW
TOO LARGE TO GO THROUGH
SPRING BOOT & DOCKER
OVERVIEW
$ docker build
BUILD ENVIRONMENT
SPRING BOOT & DOCKER
OVERVIEW
$ docker build
$ docker images
BUILD ENVIRONMENT
SPRING BOOT & DOCKER
OVERVIEW
$ docker build
$ docker push
$ docker images
IMAGE REPOSITORY
BUILD ENVIRONMENT
SPRING BOOT & DOCKER
OVERVIEW
$ docker build
$ docker push
$ docker images
RUNNING ENVIRONMENT
IMAGE REPOSITORY
BUILD ENVIRONMENT
$ docker run
AN ENGINEERING
PERSPECTIVE TO DOCKER
// TODO:
WHAT IS DOCKER? BUILD DOCKER IMAGE RUN DOCKER CONTAINER MAKING IT WORK FOR YOU
DEMO, SPRING BOOT
MICRO SERVICE
SIMPLEST .JAR
SPRING BOOT &
DOCKER
PRETTY BASIC .JAR, REST SPRING BOOT, LISTENING 8080 FROM SHELL
DOCKER IMAGE BUILT FROM GRADLE PLUGIN
DOCKER IMAGE BUILT FROM MAVEN PLUGIN
DOCKER IMAGE BUILT FROM DOCKERFILE
SPRING BOOT & DOCKER
DEMO, SIMPLEST JAR IN A DOCKER CONTAINER
SPRING BOOT & DOCKER
https://github.com/bmuschko/gradle-docker-plugin
gradle dockerPushImage
PRETTY BASIC .JAR, REST SPRING BOOT, LISTENING 8080 FROM SHELL
DOCKER IMAGE BUILT FROM GRADLE PLUGIN
DOCKER IMAGE BUILT FROM MAVEN PLUGIN
DOCKER IMAGE BUILT FROM DOCKERFILE
SPRING BOOT & DOCKER
DEMO, SIMPLEST JAR IN A DOCKER CONTAINER
SPRING BOOT & DOCKER
https://github.com/spotify/docker-maven-plugin
mvn clean package docker:build -DpushImage
PRETTY BASIC .JAR, REST SPRING BOOT, LISTENING 8080 FROM SHELL
DOCKER IMAGE BUILT FROM GRADLE PLUGIN
DOCKER IMAGE BUILT FROM MAVEN PLUGIN
DOCKER IMAGE BUILT FROM DOCKERFILE
SPRING BOOT & DOCKER
DEMO, SIMPLEST JAR IN A DOCKER CONTAINER
SPRING BOOT & DOCKER
docker build -t hudsonmendes/api-example && 

docker push
PRETTY BASIC .JAR, REST SPRING BOOT, LISTENING 8080 FROM SHELL
DOCKER IMAGE BUILT FROM GRADLE PLUGIN
DOCKER IMAGE BUILT FROM MAVEN PLUGIN
DOCKER IMAGE BUILT FROM DOCKERFILE
SPRING BOOT & DOCKER
DEMO, SIMPLEST JAR IN A DOCKER CONTAINER
SPRING BOOT & DOCKER
DEMO, SIMPLEST JAR IN A DOCKER CONTAINER
https://github.com

/hudsonmendes

/belfastjug-sample-2

/branches
SPRING BOOT & DOCKER
DEMO, SIMPLEST JAR IN A DOCKER CONTAINER
Base image
SPRING BOOT & DOCKER
DECIDING ON BASE IMAGE WHICH IMAGE?
RUNS OR
WILL EVER RUN
LINUX CONTAINERS?
JAVA7, JAVA8
OR JAVA9
RUNNING ON

WINDOWS SERVER?
DEBIAN
SPECIFIC?
DEBIAN
SPECIFIC?
openjdk:

7-jre
openjdk:

7-jre-alpine
openjdk:

9-jre
REQUIRES .MSI OR
WIN CORE ROLES?
openjdk:

*-nanoserver
openjdk:

*-windowservercore
openjdk:

8-jre
openjdk:

8-jre-alpine
YESYES
YES
YES
NO
NO
JAVA 8
JAVA 7
JAVA 9
NO
YESYES NO
AN ENGINEERING
PERSPECTIVE TO DOCKER
// TODO:
WHAT IS DOCKER? BUILD DOCKER IMAGE RUN DOCKER CONTAINER MAKING IT WORK FOR YOU
DOCKER RUN,
ECS AND ECR
SPRING BOOT &
DOCKER
SPRING BOOT & DOCKER
DOCKER RUN, ECR, ECS
DOCKER IMAGE PUSHED, CHECKED
REMOVE LOCAL IMAGE
2 INSTANCES OF THE SAME CONTAINER IMAGE
ORCHESTRATION AND EPS
SPRING BOOT & DOCKER
DOCKER RUN, ECR, ECS
DOCKER ORCHESTRATION TECHNOLOGIES
SPRING BOOT & DOCKER
DOCKER RUN, ECR, ECS
DOCKER ORCHESTRATION TECHNOLOGIES
SPRING BOOT & DOCKER
DOCKER RUN, ECR, ECS
SPRING BOOT & DOCKER
DOCKER RUN, ECR, ECS
DOCKER IMAGE PUSHED, CHECKED
REMOVE LOCAL IMAGE
2 INSTANCES OF THE SAME CONTAINER IMAGE
ORCHESTRATION AND EPS
SPRING BOOT & DOCKER
DOCKER RUN, ECR, ECS
AN ENGINEERING
PERSPECTIVE TO DOCKER
// TODO:
WHAT IS DOCKER? BUILD DOCKER IMAGE RUN DOCKER CONTAINER MAKING IT WORK FOR YOU
DOCKER IN THE
BUILD PIPELINE
SPRING BOOT &
DOCKER
SPRING BOOT & DOCKER
DOCKER IN THE BUILD PIPELINE
$ (develop) git push
ECR REPOSITORY ECS ORCHESTRATION
EC2 UBUNTU
$ docker build
$ docker run
DEVELOP
MASTER
:LATEST
:LATEST
:LATEST
:LATEST
SVC1@2
SVC1@1
SVC2@2
SVC2@1
SVC3@2
SVC3@1
SPRING BOOT & DOCKER
DOCKER IN THE BUILD PIPELINE
$ (develop) git push
ECR REPOSITORY
EC2 UBUNTU
$ docker build
$ docker run
DEVELOP
:LATEST
:LATEST
:LATEST
:LATEST
SPRING BOOT & DOCKER
DOCKER IN THE BUILD PIPELINE
ECR REPOSITORY ECS ORCHESTRATION
MASTER
:LATEST
:LATEST
:LATEST
:LATEST
SVC1@2
SVC1@1
SVC2@2
SVC2@1
SVC3@2
SVC3@1
AN ENGINEERING
PERSPECTIVE TO DOCKER
// TODO:
WHAT IS DOCKER? BUILD DOCKER IMAGE RUN DOCKER CONTAINER MAKING IT WORK FOR YOU
TIME FOR Q&A
// HUDSON MENDES
github.com/hudsonmendes
twitter.com/hudsonmendes
medium.com/@hudsonmendes
linkedin.com/in/hudsonmendes
THANKS!
// HUDSON MENDES

Belfast JUG, Spring Boot & Docker

  • 1.
  • 2.
    // NICE TOMEET YOU: - HUDSON MENDES, 32 - ITALO-BRAZILIAN (BORN IN BRAZIL) - HYBRID-CREATURE (JAVA AND .NET) - BETWEEEN PYTHON AND RUBY? RUBY - LOVE ANIME & _LOVE_ GUINNESS! - BEEN A SOFTWARE ENGINEER SINCE 1999
  • 4.
    IF DEPLOYING SOFTWAREIS HARD, (…), THEN DEVELOPERS WILL OFTEN BUILD EVERYTHING INTO THE EXISTING APPLICATION IN ORDER TO AVOID SUFFERING THE NEW DEPLOYMENT PENALTY. Karl Matthias, Docker: Up & Running SPRING BOOT & DOCKER
  • 5.
    DEVELOPING MICROSERVICES MUSTBE EASY…
 DEPLOYMENT MUST BE
 EVEN EASIER! Karl Matthias, Docker: Up & Running
  • 6.
    AN ENGINEERING PERSPECTIVE TODOCKER // TODO: - overview on docker - simple spring boot application (.jar) - wrapped with Dockerfile, Gradle and Maven - deployed to a repository, ran locally and ran remotely (ECS) - in the build pipeline - a glimpse of what matters from the docker ecosystem
  • 7.
    AN ENGINEERING PERSPECTIVE TODOCKER // TODO: WHAT IS DOCKER? BUILD DOCKER IMAGE RUN DOCKER CONTAINER MAKING IT WORK FOR YOU
  • 8.
  • 9.
    SPRING BOOT &DOCKER OVERVIEW Source “8 surprising facts about Docker”
 (https://www.datadoghq.com/docker-adoption/)
  • 10.
    SPRING BOOT &DOCKER OVERVIEW Source Google Trends, compare Docker, Virtualisation, Angularjs
 (https://trends.google.com/trends/explore?q=docker,virtualization,angularjs)
  • 11.
    SPRING BOOT &DOCKER OVERVIEW Why?
  • 12.
    SPRING BOOT &DOCKER OVERVIEW Source: “Performance on Docker vs VMs” (by Ali Hussain, Flex7)
 (https://www.slideshare.net/Flux7Labs/performance-of-docker-vs-vms)
  • 13.
    SPRING BOOT &DOCKER OVERVIEW
  • 14.
    SPRING BOOT &DOCKER OVERVIEW Must knows ‣ Conceptual evolution of LXC ‣ Not A VIRTUAL MACHINE ‣ Initial release: 2014 ‣ Open API ‣ Now supports Windows
  • 15.
    SPRING BOOT &DOCKER OVERVIEW
  • 16.
    SPRING BOOT &DOCKER OVERVIEW TOO LARGE TO GO THROUGH
  • 17.
    SPRING BOOT &DOCKER OVERVIEW $ docker build BUILD ENVIRONMENT
  • 18.
    SPRING BOOT &DOCKER OVERVIEW $ docker build $ docker images BUILD ENVIRONMENT
  • 19.
    SPRING BOOT &DOCKER OVERVIEW $ docker build $ docker push $ docker images IMAGE REPOSITORY BUILD ENVIRONMENT
  • 20.
    SPRING BOOT &DOCKER OVERVIEW $ docker build $ docker push $ docker images RUNNING ENVIRONMENT IMAGE REPOSITORY BUILD ENVIRONMENT $ docker run
  • 21.
    AN ENGINEERING PERSPECTIVE TODOCKER // TODO: WHAT IS DOCKER? BUILD DOCKER IMAGE RUN DOCKER CONTAINER MAKING IT WORK FOR YOU
  • 22.
    DEMO, SPRING BOOT MICROSERVICE SIMPLEST .JAR SPRING BOOT & DOCKER
  • 23.
    PRETTY BASIC .JAR,REST SPRING BOOT, LISTENING 8080 FROM SHELL DOCKER IMAGE BUILT FROM GRADLE PLUGIN DOCKER IMAGE BUILT FROM MAVEN PLUGIN DOCKER IMAGE BUILT FROM DOCKERFILE SPRING BOOT & DOCKER DEMO, SIMPLEST JAR IN A DOCKER CONTAINER
  • 24.
    SPRING BOOT &DOCKER https://github.com/bmuschko/gradle-docker-plugin gradle dockerPushImage
  • 25.
    PRETTY BASIC .JAR,REST SPRING BOOT, LISTENING 8080 FROM SHELL DOCKER IMAGE BUILT FROM GRADLE PLUGIN DOCKER IMAGE BUILT FROM MAVEN PLUGIN DOCKER IMAGE BUILT FROM DOCKERFILE SPRING BOOT & DOCKER DEMO, SIMPLEST JAR IN A DOCKER CONTAINER
  • 26.
    SPRING BOOT &DOCKER https://github.com/spotify/docker-maven-plugin mvn clean package docker:build -DpushImage
  • 27.
    PRETTY BASIC .JAR,REST SPRING BOOT, LISTENING 8080 FROM SHELL DOCKER IMAGE BUILT FROM GRADLE PLUGIN DOCKER IMAGE BUILT FROM MAVEN PLUGIN DOCKER IMAGE BUILT FROM DOCKERFILE SPRING BOOT & DOCKER DEMO, SIMPLEST JAR IN A DOCKER CONTAINER
  • 28.
    SPRING BOOT &DOCKER docker build -t hudsonmendes/api-example && 
 docker push
  • 29.
    PRETTY BASIC .JAR,REST SPRING BOOT, LISTENING 8080 FROM SHELL DOCKER IMAGE BUILT FROM GRADLE PLUGIN DOCKER IMAGE BUILT FROM MAVEN PLUGIN DOCKER IMAGE BUILT FROM DOCKERFILE SPRING BOOT & DOCKER DEMO, SIMPLEST JAR IN A DOCKER CONTAINER
  • 30.
    SPRING BOOT &DOCKER DEMO, SIMPLEST JAR IN A DOCKER CONTAINER https://github.com
 /hudsonmendes
 /belfastjug-sample-2
 /branches
  • 31.
    SPRING BOOT &DOCKER DEMO, SIMPLEST JAR IN A DOCKER CONTAINER Base image
  • 32.
    SPRING BOOT &DOCKER DECIDING ON BASE IMAGE WHICH IMAGE? RUNS OR WILL EVER RUN LINUX CONTAINERS? JAVA7, JAVA8 OR JAVA9 RUNNING ON
 WINDOWS SERVER? DEBIAN SPECIFIC? DEBIAN SPECIFIC? openjdk:
 7-jre openjdk:
 7-jre-alpine openjdk:
 9-jre REQUIRES .MSI OR WIN CORE ROLES? openjdk:
 *-nanoserver openjdk:
 *-windowservercore openjdk:
 8-jre openjdk:
 8-jre-alpine YESYES YES YES NO NO JAVA 8 JAVA 7 JAVA 9 NO YESYES NO
  • 33.
    AN ENGINEERING PERSPECTIVE TODOCKER // TODO: WHAT IS DOCKER? BUILD DOCKER IMAGE RUN DOCKER CONTAINER MAKING IT WORK FOR YOU
  • 34.
    DOCKER RUN, ECS ANDECR SPRING BOOT & DOCKER
  • 35.
    SPRING BOOT &DOCKER DOCKER RUN, ECR, ECS DOCKER IMAGE PUSHED, CHECKED REMOVE LOCAL IMAGE 2 INSTANCES OF THE SAME CONTAINER IMAGE ORCHESTRATION AND EPS
  • 36.
    SPRING BOOT &DOCKER DOCKER RUN, ECR, ECS DOCKER ORCHESTRATION TECHNOLOGIES
  • 37.
    SPRING BOOT &DOCKER DOCKER RUN, ECR, ECS DOCKER ORCHESTRATION TECHNOLOGIES
  • 38.
    SPRING BOOT &DOCKER DOCKER RUN, ECR, ECS
  • 39.
    SPRING BOOT &DOCKER DOCKER RUN, ECR, ECS
  • 40.
    DOCKER IMAGE PUSHED,CHECKED REMOVE LOCAL IMAGE 2 INSTANCES OF THE SAME CONTAINER IMAGE ORCHESTRATION AND EPS SPRING BOOT & DOCKER DOCKER RUN, ECR, ECS
  • 41.
    AN ENGINEERING PERSPECTIVE TODOCKER // TODO: WHAT IS DOCKER? BUILD DOCKER IMAGE RUN DOCKER CONTAINER MAKING IT WORK FOR YOU
  • 42.
    DOCKER IN THE BUILDPIPELINE SPRING BOOT & DOCKER
  • 43.
    SPRING BOOT &DOCKER DOCKER IN THE BUILD PIPELINE $ (develop) git push ECR REPOSITORY ECS ORCHESTRATION EC2 UBUNTU $ docker build $ docker run DEVELOP MASTER :LATEST :LATEST :LATEST :LATEST SVC1@2 SVC1@1 SVC2@2 SVC2@1 SVC3@2 SVC3@1
  • 44.
    SPRING BOOT &DOCKER DOCKER IN THE BUILD PIPELINE $ (develop) git push ECR REPOSITORY EC2 UBUNTU $ docker build $ docker run DEVELOP :LATEST :LATEST :LATEST :LATEST
  • 45.
    SPRING BOOT &DOCKER DOCKER IN THE BUILD PIPELINE ECR REPOSITORY ECS ORCHESTRATION MASTER :LATEST :LATEST :LATEST :LATEST SVC1@2 SVC1@1 SVC2@2 SVC2@1 SVC3@2 SVC3@1
  • 46.
    AN ENGINEERING PERSPECTIVE TODOCKER // TODO: WHAT IS DOCKER? BUILD DOCKER IMAGE RUN DOCKER CONTAINER MAKING IT WORK FOR YOU
  • 47.
    TIME FOR Q&A //HUDSON MENDES github.com/hudsonmendes twitter.com/hudsonmendes medium.com/@hudsonmendes linkedin.com/in/hudsonmendes
  • 48.