Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

Package your Java EE Application using Docker and Kubernetes

Package your Java EE Application using Docker and Kubernetes

  • Identifiez-vous pour voir les commentaires

Package your Java EE Application using Docker and Kubernetes

  1. 1. Package your
 Java EE applications
 using
 Docker and Kubernetes
 Arun Gupta, @arungupta Red Hat
  2. 2. Arun Gupta Director, Developer Advocacy @arungupta blog.arungupta.me arungupta@redhat.com
  3. 3. What is Docker?
  4. 4. What is Docker? • Open source project and company
 
 
 
 
 

  5. 5. What is Docker? • Open source project and company
 
 
 
 
 
 • Used to create containers for software applications
  6. 6. What is Docker? • Open source project and company
 
 
 
 
 
 • Used to create containers for software applications • Package Once Deploy Anywhere (PODA)
  7. 7. Advantages
  8. 8. Advantages • Faster deployments
  9. 9. Advantages • Faster deployments • Isolation
  10. 10. Advantages • Faster deployments • Isolation • Portability - “it works on my machine”
  11. 11. Advantages • Faster deployments • Isolation • Portability - “it works on my machine” • Snapshotting
  12. 12. Advantages • Faster deployments • Isolation • Portability - “it works on my machine” • Snapshotting • Security sandbox
  13. 13. Advantages • Faster deployments • Isolation • Portability - “it works on my machine” • Snapshotting • Security sandbox • Limit resource usage
  14. 14. Advantages • Faster deployments • Isolation • Portability - “it works on my machine” • Snapshotting • Security sandbox • Limit resource usage • Simplified dependency
  15. 15. Advantages • Faster deployments • Isolation • Portability - “it works on my machine” • Snapshotting • Security sandbox • Limit resource usage • Simplified dependency • Sharing
  16. 16. Underlying Technology
  17. 17. Underlying Technology • Written in Go

  18. 18. Underlying Technology • Written in Go
 • Uses several Linux features
  19. 19. Underlying Technology • Written in Go
 • Uses several Linux features • Namespaces to provide isolation
  20. 20. Underlying Technology • Written in Go
 • Uses several Linux features • Namespaces to provide isolation • Control groups to share/limit hardware resources
  21. 21. 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
  22. 22. 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
  23. 23. Is it only Linux?
  24. 24. Is it only Linux? • Natively supported in Linux
  25. 25. Is it only Linux? • Natively supported in Linux • Can be installed on Mac or Windows using boot2docker
  26. 26. Is it only Linux? • Natively supported in Linux • Can be installed on Mac or Windows using boot2docker • Tiny Core Linux VM
  27. 27. • Image defined in text-based Dockerfile
  28. 28. • Image defined in text-based Dockerfile • List of commands to build the image
 
 
 
 FROM fedora:latest
 
 CMD echo “Hello world”
  29. 29. • Image defined in text-based Dockerfile • List of commands to build the image
 
 
 
 • docker build or pull FROM fedora:latest
 
 CMD echo “Hello world”
  30. 30. • Images shared using registry
  31. 31. • Images shared using registry • Docker Hub is public SaaS
 
 
 
 
 
 

  32. 32. • Images shared using registry • Docker Hub is public SaaS
 
 
 
 
 
 
 • Private registries can be setup inside firewall
  33. 33. • Images shared using registry • Docker Hub is public SaaS
 
 
 
 
 
 
 • Private registries can be setup inside firewall • docker push or pull <IMAGE_ID>
  34. 34. • Container built from the image
 
 
 
 
 
 

  35. 35. • Container built from the image
 
 
 
 
 
 
 • Runtime representation of the image
  36. 36. • Container built from the image
 
 
 
 
 
 
 • Runtime representation of the image • Self contained execution environment
  37. 37. • Container built from the image
 
 
 
 
 
 
 • Runtime representation of the image • Self contained execution environment • docker run <IMAGE_ID>
  38. 38. 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/
  39. 39. Docker
 Hub
 Docker
 Host
 DaemonDocker
 Client Docker Workflow
  40. 40. Docker
 Hub
 Docker
 Host
 DaemonDocker
 Client docker run <image> docker … Docker Workflow
  41. 41. Docker
 Hub
 Docker
 Host
 DaemonDocker
 Client docker run <image> docker … Docker Workflow
  42. 42. Docker
 Hub
 Image 1 Image 2 Image 3 Image M Docker
 Host
 DaemonDocker
 Client docker run <image> docker … Docker Workflow
  43. 43. 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
  44. 44. 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
  45. 45. 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
  46. 46. Recipe #1.2 Host
 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
  47. 47. Recipe #1.3 Host
 Application Server Database http://blog.arungupta.me/docker-orchestration-fig-techtip67/
  48. 48. Recipe #1.4 Host
 Application Server http://blog.arungupta.me/docker-container-linking-across-multiple-hosts-techtip69/ Host
 Database
  49. 49. Recipe #1.4 Host
 Application Server http://blog.arungupta.me/docker-container-linking-across-multiple-hosts-techtip69/ Host
 Database
  50. 50. Recipe #1.4 Host
 Application Server http://blog.arungupta.me/docker-container-linking-across-multiple-hosts-techtip69/ Host
 Database
  51. 51. Recipe #1.4 Host
 Application Server http://blog.arungupta.me/docker-container-linking-across-multiple-hosts-techtip69/ Host
 Database
  52. 52. 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/
  53. 53. Docker: Pros and Cons
  54. 54. Docker: Pros and Cons • PROS • Extreme application portability • Very easy to create and work with derivative • Fast boot on containers
  55. 55. 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
  56. 56. Application Operating Environment
  57. 57. Kubernetes
  58. 58. Kubernetes • Open source orchestration system for Docker containers
  59. 59. Kubernetes • Open source orchestration system for Docker containers • Provide declarative primitives for the “desired state” • Self-healing • Auto-restarting • Schedule across hosts • Replicating
  60. 60. Concepts
  61. 61. Concepts • Pods: collocated group of Docker containers that share an IP and storage volume Docker Pod 1 Pod 2 C1 C2 C3
  62. 62. 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 Docker Pod 1 Pod 2 C1 C2 C3 Pod 1 JBoss Pod 2 JBoss Service “web” port 8080 port 8080
  63. 63. 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 Docker Pod 1 Pod 2 C1 C2 C3 Pod 1 JBoss Pod 2 JBoss Service “web” port 8080 port 8080
  64. 64. 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 Docker Pod 1 Pod 2 C1 C2 C3 Pod 1 JBoss Pod 2 JBoss Service “web” port 8080 port 8080
  65. 65. kubectl
  66. 66. kubectl • Controls the Kubernetes cluster manager
  67. 67. kubectl • Controls the Kubernetes cluster manager • kubectl get pods or minions
  68. 68. kubectl • Controls the Kubernetes cluster manager • kubectl get pods or minions • kubectl create -f <filename>
  69. 69. kubectl • Controls the Kubernetes cluster manager • kubectl get pods or minions • kubectl create -f <filename> • kubectl update or delete
  70. 70. 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>
  71. 71. export KUBERNETES_PROVIDER=vagrant ./cluster/kube-up.sh Mac OS X Kubernetes (Vagrant) Master Minion
  72. 72. Recipe #2.1 Mac OS X Kubernetes (Vagrant) Master Minion Pod Docker
 (WildFly) http://blog.arungupta.me/javaee7-wildfly-kubernetes-mac-vagrant/
  73. 73. 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
  74. 74. Recipe #2.2 Minion Pod Docker
 (WildFly) Pod Docker
 (MySQL) MySQL Service http://blog.arungupta.me/mysql-kubernetes-service-access-wildfly-pod-techtip72/
  75. 75. Minion 2 Recipe #2.3 Minion 1 Pod Docker
 (WildFly) Pod Docker
 (MySQL) MySQL Service
  76. 76. Replication Controller
  77. 77. Replication Controller • Ensures specified number of pod “replicas” are running
  78. 78. Replication Controller • Ensures specified number of pod “replicas” are running • Pod templates are cookie cutters
  79. 79. Replication Controller • Ensures specified number of pod “replicas” are running • Pod templates are cookie cutters • Rescheduling
  80. 80. Replication Controller • Ensures specified number of pod “replicas” are running • Pod templates are cookie cutters • Rescheduling • Manual or auto-scale replicas
  81. 81. Replication Controller • Ensures specified number of pod “replicas” are running • Pod templates are cookie cutters • Rescheduling • Manual or auto-scale replicas • Rolling updates
  82. 82. Recipe #2.4
  83. 83. Recipe #2.4
  84. 84. Recipe #2.4 Minion 2 Minion 1 Pod Docker
 (WildFly) Pod Docker
 (MySQL) MySQL Service Pod Docker
 (WildFly) WildFly Service
  85. 85. Recipe #2.4 Minion 2 Minion 1 Pod Docker
 (WildFly) Pod Docker
 (MySQL) MySQL Service Pod Docker
 (WildFly) WildFly Service
  86. 86. 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
  87. 87. 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
  88. 88. 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
  89. 89. 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
  90. 90. Container Host Container Cluster Management User Experience
  91. 91. OpenShift 3 Features
  92. 92. OpenShift 3 Features • Push to production - full DevOps
  93. 93. OpenShift 3 Features • Push to production - full DevOps • Client tools for building web applications
  94. 94. OpenShift 3 Features • Push to production - full DevOps • Client tools for building web applications • Centralized administration and management of application component libraries
  95. 95. 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
  96. 96. Recipe #3.1 • Start OpenShift as Docker container
 
 
 • Or run natively • Use osc (OpenShift Client) instead of kubectl with Kubernetes configuration file
  97. 97. Recipe #3.2 • (Alpha) tools generate project JSON configuration file that provide build/deployment
  98. 98. 40
  99. 99. Recipe #3.3 • Integration with JBoss Developer Studio (cooking)
  100. 100. 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
  101. 101. References • blog.arungupta.me/topics/containers/ • github.com/openshift/origin

×