Top Banner
Improve your Java development env with DOCKER Compose & Machine Copyright 2015 eXo Platform
53

Improve your Java Environment with Docker

Jan 10, 2017

Download

Software

HanoiJUG
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Improve your Java Environment with Docker

Improve your Java development env with

DOCKERCompose & Machine

Copyright 2015 eXo Platform

Page 2: Improve your Java Environment with Docker

About Us

Copyright 2015 eXo Platform

● Maxime Gréau○ @mgreau

● Software Engineer at eXo

● Thomas Delhoménie○ @tdelhomenie

● Software Engineer at eXo

Page 3: Improve your Java Environment with Docker

Agenda

Copyright 2015 eXo Platform

1. Docker Toolbox2. Work on multiple technical stacks3. Uses cases “In A Container”

3.1. Debug3.2. Code & Deploy 3.3. Deploy from your IDE 3.4. Build & Run with Maven Docker Plugins3.5. Integration Tests

4. Reproduce production bugs easily5. Work with an architecture closest to production6. Do all the things with Docker & co

Page 4: Improve your Java Environment with Docker

What’s the

PROBLEMwith my development environment?

Copyright 2015 eXo Platform

Page 5: Improve your Java Environment with Docker

Problem 1: Dev environment setup time

Copyright 2015 eXo Platform

Welcome, it’s your first day, you just have to:

● Install Maven 3.2.3

● Install JDK 1.7.0_80

● Install Tomcat 7.0.63

● Install MySQL 5.5, PostgreSQL 9.1

● Read the installation doc…

Page 6: Improve your Java Environment with Docker

The BIG installation doc !

Copyright 2015 eXo Platform

Page 7: Improve your Java Environment with Docker

And after 1 hour....

Page 8: Improve your Java Environment with Docker

Problem 2: Works on my machine

Copyright 2015 eXo Platform

Page 9: Improve your Java Environment with Docker

Problem 3: the matrix hell

Copyright 2015 eXo Platform

MySQL 5.1 MySQL 5.5 Mongo 3.0 Java 7 Java 8

My first app v1 X X

My first app v2 X X X X

My other app v1 X X

...

Page 10: Improve your Java Environment with Docker

Fix all those problems with 3 commands!

Copyright 2015 eXo Platform

Pre-requisites

docker, machine & compose installed

Then

1. Run git clone https://github.com/my-repo/my.git & cd my-project

2. Run docker-compose up

3. Open your browser

Page 11: Improve your Java Environment with Docker

Docker

TOOLBOXFor OSX and Windows

Copyright 2015 eXo Platform

Page 12: Improve your Java Environment with Docker

Docker Toolbox includes...

Copyright 2015 eXo Platform

● Docker Machine for running the docker-machine binary

● Docker Engine for running the docker binary

● Docker Compose for running the docker-compose binary

● Kitematic, the Docker GUI

● Oracle VM VirtualBox

Only for OSX and Windows

Page 13: Improve your Java Environment with Docker

Create dev environment

Copyright 2015 eXo Platform

Mac & Windows

> docker-machine create my-machine-name

> eval $(docker-machine env my-machine-name)

Linux

Nothing special to do!

Page 14: Improve your Java Environment with Docker

TOURNAMENTSTENNIS APP

Sample Application

Copyright 2015 eXo Platform

Page 15: Improve your Java Environment with Docker

Tennis App - Screenshots

Copyright 2015 eXo Platform

batch-tennis-app.warws-tennis-app.war

Page 16: Improve your Java Environment with Docker

WildFly 8.2

WildFly 8.2

JSON-P 1.0

CDI 1.1

WebSocket API 1.0

JPA 2.1

Batch API 1.0

Tennis App - Architecture - Java EE 7

Copyright 2015 eXo Platform

batch-tennis-app.war

MySQL

ws-tennis-app.war

Browser

CSV

Page 17: Improve your Java Environment with Docker

As a Developer you want to

Work on multiple technical stacks

Copyright 2015 eXo Platform

Page 18: Improve your Java Environment with Docker

WildFly 8.2

Multiple apps with docker compose

Copyright 2015 eXo Platform

MySQL 5.7 Maria DB 10.0

batch-tennis-app.war

Apache

Wordpress

Page 19: Improve your Java Environment with Docker

DEMO 1

Copyright 2015 eXo Platform

Application 1

> git clone URL1 & cd app1> mvn package> docker-compose up

open your browser !

Application 2

> git clone URL2 & cd app2> docker-compose up

open your browser !

Page 20: Improve your Java Environment with Docker

Tennis App Batch - Dockerfile

Copyright 2015 eXo Platform

FROM jboss/wildfly:8.2.1.Final

RUN mkdir -p /opt/jboss/wildfly/standalone/deployments/ROOT.war/RUN touch /opt/jboss/wildfly/standalone/deployments/ROOT.war.dodeploy

VOLUME ["/opt/jboss/wildfly/standalone/deployments/ROOT.war/"]

ENV MYSQL_CONNECTOR_VERSION 5.1.34

RUN /opt/jboss/wildfly/bin/add-user.sh -up mgmt-users.properties admin Admin#70365 --silent

# Install mysql driverRUN curl -L -o /opt/jboss/wildfly/standalone/deployments/mysql-connector-java.jar https://repo1.maven.org/maven2/mysql/mysql-connector-java/${MYSQL_CONNECTOR_VERSION}/mysql-connector-java-${MYSQL_CONNECTOR_VERSION}.jar

CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-b", "0.0.0.0"]

Page 21: Improve your Java Environment with Docker

Tennis App Batch - docker-compose.yml

Copyright 2015 eXo Platform

batch_run:build: ./docker/dev/run/backendports:

- "7777:8080"volumes:

- ./app/batch/target/batch:/opt/jboss/wildfly/standalone/deployments/ROOT.war/links:

- dbdbdata:

image: mysql:5.7volumes:

- /var/lib/mysqldb:

image: mysql:5.7volumes_from:

- dbdataenvironment:

- MYSQL_ROOT_PASSWORD=tennistour - MYSQL_DATABASE=tennistour - MYSQL_USER=tennistour- MYSQL_PASSWORD=tennistour

Page 22: Improve your Java Environment with Docker

PHP Application - Dockerfile (Wordpress)

Copyright 2015 eXo Platform

FROM php:5.6-apache

RUN a2enmod rewrite

# install the PHP extensions we needRUN apt-get update && apt-get install -y libpng12-dev libjpeg-dev && rm -rf /var/lib/apt/lists/* \

&& docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr \&& docker-php-ext-install gd

RUN docker-php-ext-install mysqli

VOLUME /var/www/html

ENV WORDPRESS_VERSION 4.3.1ENV WORDPRESS_SHA1 b2e5652a6d2333cabe7b37459362a3e5b8b66221

# upstream tarballs include ./wordpress/ so this gives us /usr/src/wordpressRUN curl -o wordpress.tar.gz -SL https://wordpress.org/wordpress-${WORDPRESS_VERSION}.tar.gz \

&& echo "$WORDPRESS_SHA1 *wordpress.tar.gz" | sha1sum -c - \&& tar -xzf wordpress.tar.gz -C /usr/src/ \&& rm wordpress.tar.gz \&& chown -R www-data:www-data /usr/src/wordpress

COPY docker-entrypoint.sh /entrypoint.sh

# grr, ENTRYPOINT resets CMD nowENTRYPOINT ["/entrypoint.sh"]CMD ["apache2-foreground"]

Page 23: Improve your Java Environment with Docker

PHP Application - docker-compose.yml

Copyright 2015 eXo Platform

wordpress:image: wordpress

links:- db:mysql

ports:- 8080:80

db:image: mariadbenvironment:

MYSQL_ROOT_PASSWORD: example

Page 24: Improve your Java Environment with Docker

Others use cases

Copyright 2015 eXo Platform

eXo use case : multi databases support (matrix compatibility pb)

PostgreSQL 9.3MySQL 5.6MySQL 5.5 PostgreSQL

9.4Oracle 11gR2

Page 25: Improve your Java Environment with Docker

Others use cases

Copyright 2015 eXo Platform

Migration between 2 versions of the database

my-app

MySQL 5.5

my-app

MySQL 5.7

Page 26: Improve your Java Environment with Docker

Copyright 2015 eXo Platform

USE CASES“In a Container”

Page 27: Improve your Java Environment with Docker

As a Developer you want to

Debug Java app in a container

Copyright 2015 eXo Platform

Page 28: Improve your Java Environment with Docker

How to debug in a container ?

Copyright 2015 eXo Platform

WildFly 8.2

MySQL 5.7

batch-tennis-app.warRemote debug

Page 29: Improve your Java Environment with Docker

DEMO 2

Copyright 2015 eXo Platform

Page 30: Improve your Java Environment with Docker

As a Developer you want to

Code and deploy

Copyright 2015 eXo Platform

Page 31: Improve your Java Environment with Docker

How to deploy a new war ?

Copyright 2015 eXo Platform

● Update your code in your favorite IDE

● Build with maven

● Open your browser !

Page 32: Improve your Java Environment with Docker

DEMO 3

Copyright 2015 eXo Platform

Page 33: Improve your Java Environment with Docker

As a Developer you want to

Use your IDE to deploy in a container

Copyright 2015 eXo Platform

Page 34: Improve your Java Environment with Docker

IDE starts to support Docker container technology

Copyright 2015 eXo Platform

● Eclipse Mars (2015)

● Netbeans

● IntelliJ IDEA v14.1

Page 35: Improve your Java Environment with Docker

As a Developer you want to

Build & Run with Maven Docker plugins

Copyright 2015 eXo Platform

Page 36: Improve your Java Environment with Docker

Docker Maven plugins

Copyright 2015 eXo Platform

mvn tomcat:run

https://github.com/rhuss/docker-maven-plugin

mvn docker:start

Page 37: Improve your Java Environment with Docker

As a Developer you want to

Execute Integration Tests in containers

Copyright 2015 eXo Platform

Page 38: Improve your Java Environment with Docker

Arquillian - Intro

Copyright 2015 eXo Platform

● Automated tests without mocks

● Compatible JUnit/TestNG

● Application Server agnostic

● Embedded/Managed/Client modes

Page 40: Improve your Java Environment with Docker

As a Developer you want to

Easily reproduce production bugs

Copyright 2015 eXo Platform

Page 41: Improve your Java Environment with Docker

Test with the production version of the “old” stack

Copyright 2015 eXo Platform

my-app

MySQL 5.5

my-app

MySQL 5.7

> git checkout v1> “build”> docker-compose up

New dev stackProd stack

5.5 5.7

v1 v2

Page 42: Improve your Java Environment with Docker

As a Developer you want to

Work with an architecture close to production

Copyright 2015 eXo Platform

Page 43: Improve your Java Environment with Docker

Angular / Java EE 7 Application

Copyright 2015 eXo Platform

Apache HTTPD

UIAngular

Load Balancer

WildFly 8.2

WildFly 8.2

batch-tennis-app.war MySQL

ws-tennis-app.war

Cache Redis

CSV

WildFly 8.2

ws-tennis-app.war

WildFly 8.2

ws-tennis-app.war

Page 44: Improve your Java Environment with Docker

DEMO 4

Copyright 2015 eXo Platform

Page 45: Improve your Java Environment with Docker

DO ALL THE THINGS WITH DOCKER

Copyright 2015 eXo Platform

Page 46: Improve your Java Environment with Docker

Build your projects with docker

Copyright 2015 eXo Platform

You will only need docker tools

on your laptop!

Page 47: Improve your Java Environment with Docker

DEMO 5

Copyright 2015 eXo Platform

Page 48: Improve your Java Environment with Docker

Docker

TOOLS

Copyright 2015 eXo Platform

Page 49: Improve your Java Environment with Docker

GUI for Docker

Copyright 2015 eXo Platform

● Kitematic

● DockerUI

Page 50: Improve your Java Environment with Docker

Docker

BEST PRACTICES

Copyright 2015 eXo Platform

Page 51: Improve your Java Environment with Docker

Some best practices for development

Copyright 2015 eXo Platform

● Use Docker Machine to organize your images and limit resources usage

(CPU, memory, …)

● Use volume containers to keep your data safe (schema)

● Useful docker commands:

○ stopped docker containers : docker stop $(docker ps -q)

○ remove dangling docker images:

■ docker rmi $(docker images -q -f "dangling=true")

○ and more: https://github.com/javaee-samples/docker-

java/blob/master/chapters/docker-commands.adoc

Page 52: Improve your Java Environment with Docker

Copyright 2015 eXo Platform

Docker doesn’t invent the container technology,

BUT

make it possible to use it easily on your laptop!

Page 53: Improve your Java Environment with Docker

Improve your Java development env withDocker Compose & Machine

Thanks@tdelhomenie @mgreau

Code: http://github.com/mgreau/docker4dev-tennistour-app