package java ee applications using docker

108
Package your Java EE applications using Docker and Kubernetes Arun Gupta, @arungupta Red Hat

Upload: indicthreads

Post on 15-Jul-2015

376 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Package Java EE applications using Docker

Package your Java EE applications

usingDocker and Kubernetes

Arun Gupta, @arungupta Red Hat

Page 2: Package Java EE applications using Docker

Arun Gupta Director, Developer Advocacy

@arungupta blog.arungupta.me [email protected]

Page 3: Package Java EE applications using Docker

What is Docker?

Page 4: Package Java EE applications using Docker

What is Docker?• Open source project and company

Page 5: Package Java EE applications using Docker

What is Docker?• Open source project and company

• Used to create containers for software applications

Page 6: Package Java EE applications using Docker

What is Docker?• Open source project and company

• Used to create containers for software applications

• Package Once Deploy Anywhere (PODA)

Page 7: Package Java EE applications using Docker

Advantages

Page 8: Package Java EE applications using Docker

Advantages• Faster deployments

Page 9: Package Java EE applications using Docker

Advantages• Faster deployments

• Isolation

Page 10: Package Java EE applications using Docker

Advantages• Faster deployments

• Isolation

• Portability - “it works on my machine”

Page 11: Package Java EE applications using Docker

Advantages• Faster deployments

• Isolation

• Portability - “it works on my machine”

• Snapshotting

Page 12: Package Java EE applications using Docker

Advantages• Faster deployments

• Isolation

• Portability - “it works on my machine”

• Snapshotting

• Security sandbox

Page 13: Package Java EE applications using Docker

Advantages• Faster deployments

• Isolation

• Portability - “it works on my machine”

• Snapshotting

• Security sandbox

• Limit resource usage

Page 14: Package Java EE applications using Docker

Advantages• Faster deployments

• Isolation

• Portability - “it works on my machine”

• Snapshotting

• Security sandbox

• Limit resource usage

• Simplified dependency

Page 15: Package Java EE applications using Docker

Advantages• Faster deployments

• Isolation

• Portability - “it works on my machine”

• Snapshotting

• Security sandbox

• Limit resource usage

• Simplified dependency

• Sharing

Page 16: Package Java EE applications using Docker

Underlying Technology

Page 17: Package Java EE applications using Docker

Underlying Technology• Written in Go

Page 18: Package Java EE applications using Docker

Underlying Technology• Written in Go

• Uses several Linux features

Page 19: Package Java EE applications using Docker

Underlying Technology• Written in Go

• Uses several Linux features

• Namespaces to provide isolation

Page 20: Package Java EE applications using Docker

Underlying Technology• Written in Go

• Uses several Linux features

• Namespaces to provide isolation

• Control groups to share/limit hardware resources

Page 21: Package Java EE applications using Docker

Underlying Technology• Written in Go

• Uses several Linux features

• Namespaces to provide isolation

• Control groups to share/limit hardware resources

• Union File System makes it light and fast

Page 22: Package Java EE applications using Docker

Underlying Technology• Written in Go

• Uses several Linux features

• Namespaces to provide isolation

• Control groups to share/limit hardware resources

• Union File System makes it light and fast

• libcontainer defines container format

Page 23: Package Java EE applications using Docker

Is it only Linux?

Page 24: Package Java EE applications using Docker

Is it only Linux?• Natively supported in Linux

Page 25: Package Java EE applications using Docker

Is it only Linux?• Natively supported in Linux

• Can be installed on Mac or Windows using boot2docker

Page 26: Package Java EE applications using Docker

Is it only Linux?• Natively supported in Linux

• Can be installed on Mac or Windows using boot2docker

• Tiny Core Linux VM

Page 27: Package Java EE applications using Docker
Page 28: Package Java EE applications using Docker
Page 29: Package Java EE applications using Docker
Page 30: Package Java EE applications using Docker

• Image defined in text-based Dockerfile

Page 31: Package Java EE applications using Docker

• Image defined in text-based Dockerfile

• List of commands to build the image FROM fedora:latest CMD echo “Hello world”

Page 32: Package Java EE applications using Docker

• Image defined in text-based Dockerfile

• List of commands to build the image

• docker build or pull

FROM fedora:latest CMD echo “Hello world”

Page 33: Package Java EE applications using Docker
Page 34: Package Java EE applications using Docker

• Images shared using registry

Page 35: Package Java EE applications using Docker

• Images shared using registry

• Docker Hub is public SaaS

Page 36: Package Java EE applications using Docker

• Images shared using registry

• Docker Hub is public SaaS

• Private registries can be setup inside firewall

Page 37: Package Java EE applications using Docker

• Images shared using registry

• Docker Hub is public SaaS

• Private registries can be setup inside firewall

• docker push or pull <IMAGE_ID>

Page 38: Package Java EE applications using Docker
Page 39: Package Java EE applications using Docker

• Container built from the image

Page 40: Package Java EE applications using Docker

• Container built from the image

• Runtime representation of the image

Page 41: Package Java EE applications using Docker

• Container built from the image

• Runtime representation of the image

• Self contained execution environment

Page 42: Package Java EE applications using Docker

• Container built from the image

• Runtime representation of the image

• Self contained execution environment

• docker run <IMAGE_ID>

Page 43: Package Java EE applications using Docker

Docker commands• docker ps: List running containers

• docker stop: Stop a running container

• docker rm: Remove a running container

• docker rmi: Remove an image

• …

https://docs.docker.com/reference/commandline/cli/

Page 44: Package Java EE applications using Docker

Docker Hub

Docker Host DaemonDocker

Client

Docker Workflow

Page 45: Package Java EE applications using Docker

Docker Hub

Docker Host DaemonDocker

Client

docker run <image> docker …

Docker Workflow

Page 46: Package Java EE applications using Docker

Docker Hub

Docker Host DaemonDocker

Client

docker run <image> docker …

Docker Workflow

Page 47: Package Java EE applications using Docker

Docker Hub

Image 1

Image 2

Image 3

Image M

Docker Host DaemonDocker

Client

docker run <image> docker …

Docker Workflow

Page 48: Package Java EE applications using Docker

Docker Hub

Image 1

Image 2

Image 3

Image M

Docker Host

Image 1

Image 2

Image 3

Image N

DaemonDocker Client

docker run <image> docker …

Docker Workflow

Page 49: Package Java EE applications using Docker

Docker Hub

Image 1

Image 2

Image 3

Image M

Docker Host

Image 1

Image 2

Image 3

Image N

Daemon

Container 1

Container 2

Container O

Docker Client

docker run <image> docker …

Docker Workflow

Page 50: Package Java EE applications using Docker
Page 51: Package Java EE applications using Docker

Recipe #1.1

FROM jboss/wildfly

RUN curl -L https://github.com/javaee-samples/javaee7-hol/raw/master/solution/movieplex7-1.0-SNAPSHOT.war -o /opt/jboss/wildfly/standalone/deployments/movieplex7-1.0-SNAPSHOT.war

docker run -it -p 8080:8080 arungupta/javaee7-hol

Host

Application Server

Database

Page 52: Package Java EE applications using Docker

Recipe #1.2Host

Application Server Database

http://blog.arungupta.me/wildfly-javaee7-mysql-link-two-docker-container-techtip65/

data-source add --name=mysqlDS --driver-name=mysql --jndi-name=java:jboss/datasources/ExampleMySQLDS --connection-url=jdbc:mysql://$DB_PORT_3306_TCP_ADDR:

$DB_PORT_3306_TCP_PORT/sample?useUnicode=true&amp;characterEncoding=UTF-8 --user-name=mysql --password=mysql --use-ccm=false --max-pool-size=25 --blocking-

timeout-wait-millis=5000 --enabled=true

Page 53: Package Java EE applications using Docker

Recipe #1.3Host

Application Server Database

http://blog.arungupta.me/docker-orchestration-fig-techtip67/

Page 54: Package Java EE applications using Docker

Recipe #1.4Host

Application Server

http://blog.arungupta.me/docker-container-linking-across-multiple-hosts-techtip69/

Host

Database

Page 55: Package Java EE applications using Docker

Recipe #1.4Host

Application Server

http://blog.arungupta.me/docker-container-linking-across-multiple-hosts-techtip69/

Host

Database

Page 56: Package Java EE applications using Docker

Recipe #1.4Host

Application Server

http://blog.arungupta.me/docker-container-linking-across-multiple-hosts-techtip69/

Host

Database

Page 57: Package Java EE applications using Docker

Recipe #1.4Host

Application Server

http://blog.arungupta.me/docker-container-linking-across-multiple-hosts-techtip69/

Host

Database

Page 58: Package Java EE applications using Docker

Arquillian Cube• Controls the lifecycle of Docker images as part of

test cycle - automatically or manually

• Uses Docker REST API to talk to container

• Talk using WildFly remote adapter (in container)

• Try it out

http://blog.arungupta.me/run-javaee-tests-wildfly-docker-arquillian-cube/

Page 59: Package Java EE applications using Docker

Docker: Pros and Cons

Page 60: Package Java EE applications using Docker

Docker: Pros and Cons• PROS

• Extreme application portability

• Very easy to create and work with derivative

• Fast boot on containers

Page 61: Package Java EE applications using Docker

Docker: Pros and Cons• PROS

• Extreme application portability

• Very easy to create and work with derivative

• Fast boot on containers

• CONS

• Host-centric solution

• No higher-level provisioning

• No usage tracking/reporting

Page 62: Package Java EE applications using Docker

Application Operating Environment

Page 63: Package Java EE applications using Docker

Kubernetes

Page 64: Package Java EE applications using Docker

Kubernetes• Open source orchestration system for Docker

containers

Page 65: Package Java EE applications using Docker

Kubernetes• Open source orchestration system for Docker

containers

• Provide declarative primitives for the “desired state”

• Self-healing

• Auto-restarting

• Schedule across hosts

• Replicating

Page 66: Package Java EE applications using Docker
Page 67: Package Java EE applications using Docker

Concepts

Page 68: Package Java EE applications using Docker

Concepts• Pods: collocated group of

Docker containers that share an IP and storage volume Docker

Pod 1 Pod 2

C1 C2 C3

Page 69: Package Java EE applications using Docker

Concepts• Pods: collocated group of

Docker containers that share an IP and storage volume

• Service: Single, stable name for a set of pods, also acts as LB

DockerPod 1 Pod 2

C1 C2 C3

Pod 1

JBoss

Pod 2

JBoss

Service “web”

port 8080 port 8080

Page 70: Package Java EE applications using Docker

Concepts• Pods: collocated group of

Docker containers that share an IP and storage volume

• Service: Single, stable name for a set of pods, also acts as LB

• Replication Controller: manages the lifecycle of pods and ensures specified number are running

DockerPod 1 Pod 2

C1 C2 C3

Pod 1

JBoss

Pod 2

JBoss

Service “web”

port 8080 port 8080

Page 71: Package Java EE applications using Docker

Concepts• Pods: collocated group of

Docker containers that share an IP and storage volume

• Service: Single, stable name for a set of pods, also acts as LB

• Replication Controller: manages the lifecycle of pods and ensures specified number are running

• Label: used to organize and select group of objects

DockerPod 1 Pod 2

C1 C2 C3

Pod 1

JBoss

Pod 2

JBoss

Service “web”

port 8080 port 8080

Page 72: Package Java EE applications using Docker

kubectl

Page 73: Package Java EE applications using Docker

kubectl• Controls the Kubernetes cluster manager

Page 74: Package Java EE applications using Docker

kubectl• Controls the Kubernetes cluster manager

• kubectl get pods or minions

Page 75: Package Java EE applications using Docker

kubectl• Controls the Kubernetes cluster manager

• kubectl get pods or minions

• kubectl create -f <filename>

Page 76: Package Java EE applications using Docker

kubectl• Controls the Kubernetes cluster manager

• kubectl get pods or minions

• kubectl create -f <filename>

• kubectl update or delete

Page 77: Package Java EE applications using Docker

kubectl• Controls the Kubernetes cluster manager

• kubectl get pods or minions

• kubectl create -f <filename>

• kubectl update or delete

• kubectl resize —replicas=3 replicationcontrollers <name>

Page 78: Package Java EE applications using Docker

export KUBERNETES_PROVIDER=vagrant./cluster/kube-up.sh

Mac OS X

Kubernetes (Vagrant)

Master Minion

Page 79: Package Java EE applications using Docker

Recipe #2.1Mac OS X

Kubernetes (Vagrant)

Master

Minion

PodDocker

(WildFly)

http://blog.arungupta.me/javaee7-wildfly-kubernetes-mac-vagrant/

Page 80: Package Java EE applications using Docker

Services• Abstract a set of pods as a single IP and port

• Simple TCP/UDP load balancing

• Creates environment variables in other pods

• Like “Docker links” but across hosts

• Stable endpoint for pods to reference

• Allows list of pods to change dynamically

Page 81: Package Java EE applications using Docker

Recipe #2.2Minion

PodDocker

(WildFly)

PodDocker

(MySQL)MySQL Service

http://blog.arungupta.me/mysql-kubernetes-service-access-wildfly-pod-techtip72/

Page 82: Package Java EE applications using Docker

Minion 2

Recipe #2.3Minion 1

PodDocker

(WildFly)

PodDocker

(MySQL)MySQL Service

Page 83: Package Java EE applications using Docker

Replication Controller

Page 84: Package Java EE applications using Docker

Replication Controller• Ensures specified number of pod “replicas” are

running

Page 85: Package Java EE applications using Docker

Replication Controller• Ensures specified number of pod “replicas” are

running

• Pod templates are cookie cutters

Page 86: Package Java EE applications using Docker

Replication Controller• Ensures specified number of pod “replicas” are

running

• Pod templates are cookie cutters

• Rescheduling

Page 87: Package Java EE applications using Docker

Replication Controller• Ensures specified number of pod “replicas” are

running

• Pod templates are cookie cutters

• Rescheduling

• Manual or auto-scale replicas

Page 88: Package Java EE applications using Docker

Replication Controller• Ensures specified number of pod “replicas” are

running

• Pod templates are cookie cutters

• Rescheduling

• Manual or auto-scale replicas

• Rolling updates

Page 89: Package Java EE applications using Docker

Recipe #2.4

Page 90: Package Java EE applications using Docker

Recipe #2.4

Page 91: Package Java EE applications using Docker

Recipe #2.4

Minion 2

Minion 1Pod

Docker (WildFly)

PodDocker

(MySQL)MySQL Service

PodDocker

(WildFly)

WildFly Service

Page 92: Package Java EE applications using Docker

Recipe #2.4

Minion 2

Minion 1Pod

Docker (WildFly)

PodDocker

(MySQL)MySQL Service

PodDocker

(WildFly)

WildFly Service

Page 93: Package Java EE applications using Docker

Kubernetes: Pros and Cons• PROS

• Manage related Docker containers as a unit

• Container communication across hosts

• Availability and scalability through automated deployment and monitoring of pods and their replicas, across hosts

Page 94: Package Java EE applications using Docker

Kubernetes: Pros and Cons• CONS

• Lifecycle of applications - build, deploy, manage, promote

• Port existing source code to run in Kubernetes

• DevOps: Dev -> Test -> Production

• No multi-tenancy

• On-premise (available on GCE)

• Assumes inter-pod networking as part of infrastructure

• Requires explicit load balancer

Page 95: Package Java EE applications using Docker

Pod 7

ActiveMQ

Pod 8

ActiveMQ

“mq”

port 8161 port 8161

Pod 1

Apache

Pod 2

Apache

“web”

port 80 port 80

Pod 5

MySQL

Pod 6

MySQL

“db”

port 3306 port 3306

Pod 3

JBoss

Pod 4

JBoss

“javaee”

port 8080 port 8080

Page 96: Package Java EE applications using Docker

Pod 7

ActiveMQ

Pod 8

ActiveMQ

“mq”

port 8161 port 8161

Pod 1

Apache

Pod 2

Apache

“web”

port 80 port 80

Pod 5

MySQL

Pod 6

MySQL

“db”

port 3306 port 3306

Pod 3

JBoss

Pod 4

JBoss

“javaee”

port 8080 port 8080

Page 97: Package Java EE applications using Docker

Container Host

Container

Cluster Management

User Experience

Page 98: Package Java EE applications using Docker

OpenShift 3 Features

Page 99: Package Java EE applications using Docker

OpenShift 3 Features• Push to production - full DevOps

Page 100: Package Java EE applications using Docker

OpenShift 3 Features• Push to production - full DevOps

• Client tools for building web applications

Page 101: Package Java EE applications using Docker

OpenShift 3 Features• Push to production - full DevOps

• Client tools for building web applications

• Centralized administration and management of application component libraries

Page 102: Package Java EE applications using Docker

OpenShift 3 Features• Push to production - full DevOps

• Client tools for building web applications

• Centralized administration and management of application component libraries

• Team and user isolation of containers, builds, and network communication in an easy multi-tenancy system

Page 103: Package Java EE applications using Docker

Recipe #3.1

• Start OpenShift as Docker container

• Or run natively

• Use osc (OpenShift Client) instead of kubectl with Kubernetes configuration file

Page 104: Package Java EE applications using Docker

Recipe #3.2• (Alpha) tools generate project JSON configuration

file that provide build/deployment

Page 105: Package Java EE applications using Docker

40

Page 106: Package Java EE applications using Docker

Recipe #3.3• Integration with JBoss Developer Studio (cooking)

Page 107: Package Java EE applications using Docker

Summary• Container runtime and image distribution

• Roll your own solutions for everything

• Runtime and operational management of containers

• Lifecycle of applications - build, deploy, manage, promote

• Manage tens of thousands of applications with teams

Page 108: Package Java EE applications using Docker

References

• blog.arungupta.me/topics/containers/

• github.com/openshift/origin