docker and java

21
DOCKER AND JAVA ANTHONY DAHANNE, CONFOO MONTRÉAL, THURSDAY, MARCH 9TH, 2017 @anthonydahanne http://blog.dahanne.net

Upload: anthony-dahanne

Post on 20-Mar-2017

56 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Docker and java

DOCKER AND JAVAANTHONY DAHANNE, CONFOO MONTRÉAL, THURSDAY, MARCH 9TH, 2017 @anthonydahanne http://blog.dahanne.net

Page 2: Docker and java

�Anthony Dahanne, Software Engineer @ Terracotta, a Software AG company

�Working on the Terracotta Management Console, and its integration in Terracotta products

�And strong Docker supporter :-P , trying to containerize as much as I can !

LET ME INTRODUCE MYSELF

Page 3: Docker and java

AGENDA

• Docker fundamentals : quick recap

• Java applications in containers • Hello world from a Java container • SpringBoot app in a container (+ Maven + IntelliJ IDEA integrations) • Multi container deployment

• Extras • CI/CD on premises (Jenkins, Nexus) vs cloud based deployment • Interacting with Docker from Java with Docker Java

Page 4: Docker and java

DOCKER FUNDAMENTALSQUICK RECAP.

Page 5: Docker and java

VMS VS CONTAINERSIT’S ALL ABOUT THE (LINUX?) KERNEL !

picture from http://www.enterprisetech.com/2014/08/18/ibm-techies-pit-docker-kvm-bare-metal/

Page 6: Docker and java

DOCKER CONTAINERS / IMAGES : A PILE OF LAYERSA DOCKER IMAGE IS A DIFF ON TOP OF ITS PARENT

picture from : https://docs.docker.com/v1.6/terms/layer/

Page 7: Docker and java

Host OS

Docker daemon

Images Containers

Docker CLI

> docker run ubuntu bash > docker ps > docker images > etc.

Docker Compose

> docker-compose build > docker-compose up > docker-compose kill > etc.

Volumes

Kitematic

REST APItcp (tls) / Unix socket

Host OS

Docker daemon

Ima Containers

Volume

Page 8: Docker and java

DOCKER VOCABULARY VS JAVA VOCABULARY

• Repository : houses grouped artifacts

• Artifact : org.ehcache:ehcache:3.1.3 (+type : jar/sources/etc.)

Group id VersionArtifact id

Page 9: Docker and java

DOCKER VOCABULARY VS JAVA VOCABULARY

• Registry : hosts repositories

• Repositories : house collections of tagged images

• Image : localhost:5000/anthony/mycoolproduct:v2

DockerHub / quay.io / Registry V2

Registry location Repository name Tag

Page 10: Docker and java

Host OS

Docker daemon

Images

DockerHub Registry

ubuntu

latest 12.04

anthonydahanne/terracotta

latest 4.3.1-oss

anthonydahanne/petclinic

Registry @ SoftwareAG

anthony/tmc

latest 5.0

Host OS

Docker daemon

Images

Docker CLI Docker CLI

REST APItcp (tls) / Unix socket

Page 11: Docker and java

JAVA APPLICATIONS IN CONTAINERSFROM MAIN() TO THE CLOUD !

Page 13: Docker and java

n

PostgreSQL

Webapp with Ehcache3 Clustered

Terracotta Server

MULTI CONTAINER DEPLOYMENTLoad Balancer + Webapp + Terracotta Server + PostgreSQL DB

LoadBalancer

Page 14: Docker and java

DEMO TIME !

• Ehcache demo image design • JHipster application with clustered caching • Depends on Terracotta Server and a Database

• Ehcache demo cloud based deployment • 1 PostgreSQL Database • 1 Terracotta Server instance • n Webapp instances • 1 load balancer

Page 15: Docker and java

EXTRASCI/CD, OTHER JAVA INTEGRATIONS

Page 16: Docker and java

Deployment infra.

ON PREMISES CI/CDRE USING EXISTING INFRA !

Git Repo

Jenkins

Commit & Push

Trigger mvn job

Create & Start Container

Docker daemons

Regular Slaves

Registry

Image buildPush image to registry

Docker daemon

Download Images

Page 17: Docker and java

DOCKER CLOUD DEPLOYMENTPUSH THAT CODE AROUND !

EC2 Azure GCE

DockerCloudGithub DockerHub

Commit & Push

Trigger Automated Build Trigger Redeploy / Scale

Create & Start Container

Page 18: Docker and java

JENKINS DOCKER PLUGIN : ADD CONTAINER BASED SLAVES

Page 19: Docker and java

INTERACTING WITH THE DOCKER DAEMON WITH DOCKER JAVA

DockerClient dockerClient = DockerClientBuilder.getInstance(dockerUrl).build(); Info info = dockerClient.infoCmd().exec();List<Container> containers = dockerClient.listContainersCmd() .withShowAll(false) .exec();

CreateContainerResponse container = dockerClient.createContainerCmd("busybox") .withCmd("touch", "/test") .exec();

dockerClient.startContainerCmd(container.getId()).exec(); dockerClient.stopContainerCmd(container.getId()).exec();

<dependency> <groupId>com.github.docker-java</groupId> <artifactId>docker-java</artifactId> <version>3.0.1</version> </dependency>

Demo at available at : https://github.com/anthonydahanne/montrealjug_docker_java/tree/04_spring_boot_app_docker_api

Page 20: Docker and java

LINKS OF INTERESTS• Docker labs, self paced (great to learn Docker !) https://training.docker.com/category/self-paced-online https://github.com/docker/labs/tree/master/beginner

• Jenkins plugins https://wiki.jenkins-ci.org/display/JENKINS/Support+Core+Plugin https://wiki.jenkins-ci.org/display/JENKINS/Docker+build+step+plugin https://wiki.jenkins-ci.org/display/JENKINS/CloudBees+Docker+Build+and+Publish+plugin

• DockerHub repositories https://hub.docker.com/_/openjdk/ https://hub.docker.com/_/jenkins/ https://hub.docker.com/_/maven/ https://hub.docker.com/r/anthonydahanne/terracotta-server-oss/

• Others https://wiki.eclipse.org/Linux_Tools_Project/Docker_Tooling/User_Guide https://plugins.jetbrains.com/plugin/7724 use socat with Docker For Mac ! http://www.sonatype.org/nexus/2015/09/22/docker-and-nexus-3-ready-set-action/

• Docker & Java talks The JVM and Docker. A good idea? by Christopher Batey Docker Tips & Tricks for Java Developers, by Ray Tsang

Page 21: Docker and java

21