View
3.545
Download
1
Category
Preview:
Citation preview
About Us
Copyright 2015 eXo Platform
● Maxime Gréau○ @mgreau
● Software Engineer at eXo
● Thomas Delhoménie○ @tdelhomenie
● Software Engineer at eXo
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
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…
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
...
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
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
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!
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
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
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 !
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"]
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
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"]
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
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
Others use cases
Copyright 2015 eXo Platform
Migration between 2 versions of the database
my-app
MySQL 5.5
my-app
MySQL 5.7
How to debug in a container ?
Copyright 2015 eXo Platform
WildFly 8.2
MySQL 5.7
batch-tennis-app.warRemote debug
How to deploy a new war ?
Copyright 2015 eXo Platform
● Update your code in your favorite IDE
● Build with maven
● Open your browser !
IDE starts to support Docker container technology
Copyright 2015 eXo Platform
● Eclipse Mars (2015)
● Netbeans
● IntelliJ IDEA v14.1
Docker Maven plugins
Copyright 2015 eXo Platform
mvn tomcat:run
https://github.com/rhuss/docker-maven-plugin
mvn docker:start
Arquillian - Intro
Copyright 2015 eXo Platform
● Automated tests without mocks
● Compatible JUnit/TestNG
● Application Server agnostic
● Embedded/Managed/Client modes
Arquillian Cube
Copyright 2015 eXo Platform
http://arquillian.org/modules/cube-extension/
Shameless auto-promotion :http://mgreau.com/posts/2015/03/03/docker-asciidoctorj-wildfly-arquillian.html
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
As a Developer you want to
Work with an architecture close to production
Copyright 2015 eXo Platform
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
Build your projects with docker
Copyright 2015 eXo Platform
You will only need docker tools
on your laptop!
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
Copyright 2015 eXo Platform
Docker doesn’t invent the container technology,
BUT
make it possible to use it easily on your laptop!
Improve your Java development env withDocker Compose & Machine
Thanks@tdelhomenie @mgreau
Code: http://github.com/mgreau/docker4dev-tennistour-app
Recommended