This document discusses best practices for running Java applications in Docker containers in production environments. It covers common problems like out of memory errors and slow performance due to the JVM not being aware of Linux cgroups. Specific issues addressed include setting appropriate JVM memory and CPU limits based on the container restrictions, using named volumes for disk I/O, and configuring garbage collection and thread pools. It also provides an overview of tooling like Maven/Gradle plugins for building Docker images and schedulers like Docker Swarm and Kubernetes for container orchestration.