Unlock the full potential of your Java applications in Docker and Kubernetes environments with our comprehensive course.Master the skills necessary to effectively run, optimize, and maintain JVM applications in production-ready settings. Although examples are based on Java, all concepts are applicable to any JVM language like Scala, Groovy, and Kotlin.
Introduction to Docker and Kubernetes
Before diving into advanced topics, we begin with an in-depth introduction to Docker and Kubernetes. You will gain foundational knowledge that is critical for understanding and effectively working within these environments.
Core Concepts Covered
In-depth understanding of what a container is under the covers
Exploration of Linux cgroups
Insights into Linux namespaces
JVM Behavior in Kubernetes
Explore how the JVM and your Java applications behave differently within Kubernetes, especially when utilizing cgroups and namespaces.
Key Topics Include
JVM ergonomics and adjustments
Understanding how CPU Shares and Quota function
The mechanics of Kubernetes' CPU and Memory management
Building Production-Ready Images
Learn the essential techniques to build images that are robust for a production environment.
Topics in Image Creation
Choosing a suitable base image
Differences between JDK and JRE based images
Utilizing multi-stage Docker builds
Implementing GraalVM
Incorporating class data sharing
Leveraging ahead-of-time compilation
We will also conduct experiments with various JVM versions and configurations to understand their impact.
Course Outcomes
By the conclusion of this course, you will possess the skills to:
Create a production-ready container image
Make informed choices about CPU limits, quotas, or utilizing both in Kubernetes
Define memory limits and optimize the JVM for Kubernetes
Comprehend and analyze CPU usage in Kubernetes compared to VMs and physical machines