Top Banner
in the belly of the
34

Apache Camel in the belly of the Docker whale

Jul 02, 2015

Download

Technology

Henryk Konsek

Apache Camel in the belly of the Docker whale
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: Apache Camel in the belly of the Docker whale

in the belly of the

Page 2: Apache Camel in the belly of the Docker whale

Brought to you by...

Page 3: Apache Camel in the belly of the Docker whale

What is...

Server for running and managing Linux containers.

Page 4: Apache Camel in the belly of the Docker whale

What are Linux containers?

Para-virtualized Linux instances.

Page 5: Apache Camel in the belly of the Docker whale

Why not regular virtualization?

● slooooooow● gigantic images● aggressive resource allocation● bad API

Page 6: Apache Camel in the belly of the Docker whale

Key concepts

● image (immutable, no state)● container (has state)

Container is the running image.

Page 7: Apache Camel in the belly of the Docker whale

Docker awesomeness #1

Commands.

Page 8: Apache Camel in the belly of the Docker whale

Docker awesomeness #2

Layers.

WAR

Tomcat

JRE

Ubuntu base

Page 9: Apache Camel in the belly of the Docker whale

Docker awesomeness #3

Registries.

Page 10: Apache Camel in the belly of the Docker whale

Docker awesomeness #4

Build once. Deploy everywhere!

Page 11: Apache Camel in the belly of the Docker whale

Dockerfiles

“Recipes” for the new images.

FROM ubuntu

EXPOSE 8080

RUN apt-get install java

RUN mkdir /jars

ADD target/app.jar /jars/

CMD ["java", "-jar", "/jars/app.jar"]

Page 12: Apache Camel in the belly of the Docker whale

Create new image in the local repo

$ docker build -t com.me/app:1.0

$ docker run -t com.me/app:1.0

Page 13: Apache Camel in the belly of the Docker whale

Apache Camel

Framework that routes messages like crazy.

Page 14: Apache Camel in the belly of the Docker whale

How to deploy Camel?

● Karaf (JBoss Fuse, ServiceMix, Talend ESB)● Tomcat● WildFly (JBoss EAP)● standalone/embeded● Akka plugin● Grails plugin● Spring Boot

Page 15: Apache Camel in the belly of the Docker whale

Camel and Docker

How to split it? What should I dockerize?

Page 16: Apache Camel in the belly of the Docker whale

Messaging architecture in a nutshell

Page 17: Apache Camel in the belly of the Docker whale

Concrete messaging architecture

Page 18: Apache Camel in the belly of the Docker whale
Page 19: Apache Camel in the belly of the Docker whale

Dockerized example

Page 20: Apache Camel in the belly of the Docker whale

In-endpoint routefrom(“netty-http:http://0.0.0.0:18080”).

setBody(randomUUID()).

inOnly("jms:invoices");

...

new ActiveMQConnectionFactory("tcp://amqbroker:6162")

Page 21: Apache Camel in the belly of the Docker whale

Processing routefrom("jms:invoices").

setBody().

groovy("new Invoice(request.body,currentTimeMillis())").

to("mongodb:mongo?...operation=insert");

...

new ActiveMQConnectionFactory("tcp://amqbroker:6162");

...

new MongoClient("mongodb");

Page 22: Apache Camel in the belly of the Docker whale

How can I get database images?

docker run -d -p 27017:27017

--name mongodb dockerfile/mongodb

Provided by database community/vendor.

Page 23: Apache Camel in the belly of the Docker whale

How can I put fresh jar into image?

Docker Maven plugin by Roland ‘Jolokia’ Huß

Page 24: Apache Camel in the belly of the Docker whale

How to bootstrap Camel?

● no Karaf bundle activators● no server (Tomcat, etc.)● how can we start CamelContext?

Page 25: Apache Camel in the belly of the Docker whale

Custom class with the main method

Page 26: Apache Camel in the belly of the Docker whale

Spring Boot for Camel

http://projects.spring.io/spring-boot

Page 27: Apache Camel in the belly of the Docker whale

Camel + Spring Boot: step #1

Take a Spring Boot fat jar.

Page 28: Apache Camel in the belly of the Docker whale

Camel + Spring Boot: step #2

Add camel-spring-boot jar to your classpath.

Page 29: Apache Camel in the belly of the Docker whale

Camel + Spring Boot: step #3

Add Camel route to your classpath.

Page 30: Apache Camel in the belly of the Docker whale

Camel + Spring Boot: step #4

Dockerize your fat jar and run it!

Page 31: Apache Camel in the belly of the Docker whale

ENV-centric runtime configuration# override endpoint definition via ENV variable

docker run -e FROM=jms:queue -it my-springboot-camel-app

# run with the given Spring profile

docker run -e spring.profiles.active=production -it my-springboot-camel-app

Page 32: Apache Camel in the belly of the Docker whale

Monitoring

Expose JMX via REST with the Jolokia base image.

Page 33: Apache Camel in the belly of the Docker whale

Kubernetes

● orchestration of many Docker containers● ...and many Docker servers!● logical container groups (pods)● auto-scaling● wiring your Docker stuff together

Page 34: Apache Camel in the belly of the Docker whale

Thank you!