Many Java developers are now expected to understand containerization and orchestration tools like Docker and Kubernetes. Whether you’re preparing for a backend engineering role or a DevOps-integrated team, this guide covers the most important Kubernetes and Docker interview questions for Java developers, explained in clear, practical terms just like you’d use them at work.
Docker Interview Questions for Java Developers
1. How would you containerize a Spring Boot application?
Start with a Dockerfile using a JDK base image. Use a multi-stage build to keep the image lightweight:
FROM eclipse-temurin:17-jdk AS builder WORKDIR /app COPY . . RUN ./mvnw clean package -DskipTests FROM eclipse-temurin:17-jre COPY --from=builder /app/target/app.jar app.jar ENTRYPOINT ["java", "-jar", "app.jar"]
Use Alpine-based images only if your dependencies are fully compatible.
2. What are the key differences between Docker containers and virtual machines?
- Docker uses the host OS kernel, so containers start faster and use fewer resources.
- VMs have their own OS and are heavier.
- Containers are better for microservices and portable builds.
3. How can Java developers secure Docker containers?
- Avoid running containers as root.
- Use minimal images (e.g.,
eclipse-temurin:17-jre-slim). - Run vulnerability scans using tools like Trivy.
- Limit container networking permissions.
4. How do you debug a Dockerized Java application?
- Use
docker logs <container-id>to read app output. - Attach to a running container using
docker exec -it <container-id> /bin/bash. - Enable JVM debugging using remote ports (e.g.,
-agentlib:jdwp). - Monitor memory and CPU with
docker stats.
5. How would you run multiple Java services locally using Docker Compose?
Define services in a docker-compose.yml:
version: '3.8'
services:
app:
build: .
ports:
- "8080:8080"
db:
image: postgres
environment:
POSTGRES_PASSWORD: example
This allows your app to communicate with databases or other services easily during local development.
Kubernetes Interview Questions for Java Developers
6. What is Kubernetes and why is it useful for Java applications?
Kubernetes manages containers across many servers. It helps you:
- Auto-restart failed pods
- Scale applications up/down automatically
- Perform rolling deployments with zero downtime
- Manage network and storage for containers
7. What’s the difference between a Pod, Deployment, and Service in Kubernetes?
- Pod: Smallest unit that runs a container.
- Deployment: Ensures the right number of Pods are running.
- Service: Exposes Pods and keeps network access consistent, even if Pods change.
8. How do Java apps handle configuration in Kubernetes?
Use ConfigMaps and Secrets:
envFrom:
- configMapRef:
name: my-config
- secretRef:
name: my-secret
Also mount application.properties or YAML files directly into containers if needed.
9. How do you set resource limits for a Java pod?
Define resources in your pod spec to avoid overuse:
resources:
requests:
memory: "512Mi"
cpu: "250m"
limits:
memory: "1Gi"
cpu: "500m"
Use Java flags like -XX:MaxRAMPercentage=75.0 to respect container limits.
10. What is a readiness probe and why is it important?
A readiness probe checks if the app is ready to receive traffic:
readinessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
If the app isn’t ready, Kubernetes keeps it out of the load balancer.
11. How would you troubleshoot a Java pod stuck in CrashLoopBackOff?
- Run
kubectl logsto view exceptions. - Check memory limits and JVM settings.
- Use
kubectl describe podfor container state. - Use init containers for debugging or adding delays.
12. What is Horizontal Pod Autoscaler (HPA) and how does it work?
HPA scales Pods based on metrics like CPU usage:
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
For Java apps, you can also use custom metrics like request latency or queue depth.
Advanced Interview Questions
13. How would you deploy a Spring Boot app with Helm?
Package the app as a Helm chart. Customize values like image tag, replicas, and ports in values.yaml.
helm install my-app ./my-chart
Use Helm for version control, rollbacks, and environment-specific overrides.
14. How do you manage secrets securely in Kubernetes?
- Store secrets as Kubernetes
Secretresources (base64 encoded). - Mount them as environment variables or files.
- Use tools like HashiCorp Vault or AWS Secrets Manager for rotation.
15. What are init containers and how are they used in Java deployments?
Init containers run before the main container starts. They’re useful for:
- Checking DB readiness
- Pulling external config
- Running one-time scripts like migrations
16. What are the best practices for monitoring Java apps in Kubernetes?
- Use Prometheus to scrape metrics.
- Expose metrics using Micrometer.
- Visualize with Grafana.
- Enable distributed tracing with OpenTelemetry or Zipkin.
17. How do you handle rolling updates for Java applications?
Use Deployments with strategy.type: RollingUpdate. Ensure readiness probes are defined so Kubernetes waits for each pod to be ready before replacing the next.
18. What CI/CD approach would you use to deploy Java apps to Kubernetes?
- Use GitHub Actions or Jenkins to build Docker images.
- Scan images for vulnerabilities.
- Push to a registry (e.g., Docker Hub, ECR).
- Use
kubectl, Helm, or ArgoCD for automated rollout.
FAQs
What’s the benefit of using Kubernetes over plain Docker Compose?
Kubernetes offers automatic scaling, recovery, and advanced networking that Docker Compose lacks in production.
How do Java apps get external configuration in containers?
Use environment variables, ConfigMaps, or mount configuration files from volumes.
Can Spring Boot apps run in Alpine Linux containers?
Yes, but ensure all dependencies are compatible. Alpine uses musl libc which may not work with some Java tools.
How do I reduce startup time of my containerized Java app?
Use class data sharing (-Xshare:off/on), GraalVM native image, or lighter JDKs like Temurin JRE.
What is the difference between args and command in a Pod spec?command overrides the ENTRYPOINT, and args overrides CMD from Dockerfile.






