
1. Java baseline
1.1. use deterministic image
1.2. handle events
1.2.1. dumb-init
1.2.2. tini
1.2.3. docker run --init
1.2.4. https://www.gnu.org/software/libc/manual/html_node/Termination-Signals.html
1.3. multi-stage build
1.4. shutdown hook
1.5. container-aware Java version
1.5.1. Java 10+
1.5.2. Java 8 update 191+
1.6. .dockerignore
1.7. base-images
1.7.1. Fabric8 JBoss OpenJDK
1.7.2. Open JDK
1.7.3. Red Hat OpenShift
1.7.4. use your enterprise standard
2. look for
2.1. small image size
2.1.1. multi stage build
2.1.2. cleanup in the same step (immutable layers)
2.1.3. apt-get install with **no-install-recommends**
2.2. fast startup time
2.2.1. CDS (class data sharing)
3. Monitoring and observability
3.1. **Jolokia**: export JMS over HTTP
3.2. **Hawtio**
3.2.1. as Spring Boot actuator
3.3. Prometheus
4. frameworks
4.1. Spring Boot
4.2. Quarkus
4.3. Micronaut
5. usages
5.1. ngix
5.1.1. /usr/share/ngix/html
6. history
6.1. 1979 chroot
6.1.1. directory structure isolation
6.2. 2000 jail (FreeBSD 4.0)
6.2.1. process isolation
6.3. 2004 Solaris Zones (Solaris 10)
6.3.1. first real containerization
6.4. 2008 LXC: Linux Containers
6.4.1. kernel 2.6.24
6.4.2. very complicated to run
6.5. 2013 Docker
7. orchestration
7.1. swarm
7.1.1. automatic security
7.2. services
7.2.1. modes
7.2.1.1. replicated
7.2.1.2. global
8. build tools
8.1. Spring Boot **./gradlew :buildBootImage**
8.2. Jib
8.3. Eclipse JKube
9. app configuration
9.1. volume with config files
9.2. environment properties
9.3. configuration registry
9.4. change entry point
10. build
10.1. commands trivia
10.1.1. #syntax=docker/dockerfile:1.4
10.1.2. RUN << EOF
10.1.2.1. multiple lines without '\'
10.1.3. COPY << EOF
10.1.3.1. provide file content in place
10.2. commands
10.2.1. runtime
10.2.2. build
10.2.3. metadata
10.3. avoid using root
10.3.1. group add -r app && useradd -r -g app appuser