@saturnism @googlecloud #kubernetes #devnexus
Old Way: Shared machines
kernel
libs
app
app app
No isolation
No namespacing
Common libs
Highly coupled apps and OS
app
Slide 13
Slide 13 text
@saturnism @googlecloud #kubernetes #devnexus
Old Way: Virtual machines
Some isolation
Expensive and inefficient
Still highly coupled to the guest OS
Hard to manage
app
libs
kernel
libs
app app
kernel
app
libs
libs
kernel
kernel
@saturnism @googlecloud #kubernetes #devnexus
Which port?
Internal port vs machine port
Slide 25
Slide 25 text
@saturnism @googlecloud #kubernetes #devnexus
Versioning container image
docker tag spring-boot-demo spring-boot-demo:1.0
docker tag spring-boot-demo spring-boot-demo:1.0-k39fa
Slide 26
Slide 26 text
@saturnism @googlecloud #kubernetes #devnexus
Build Number Plugin
http://www.mojohaus.org/buildnumber-maven-plugin/
https://github.com/ktoso/maven-git-commit-id-plugin
Append build number, or SCM commit hash to image tag
Slide 27
Slide 27 text
@saturnism @googlecloud #kubernetes #devnexus
Space Saving Tips
@saturnism @googlecloud #kubernetes #devnexus
Don’t Log to Container Filesystem!
Log to a volume… docker -v /tmp/log:/log
Or, better yet,
Send it elsewhere! I prefer STDOUT
Slide 30
Slide 30 text
@saturnism @googlecloud #kubernetes #devnexus
Clean up disk spaces
Every image, layer, and, even containers litters
docker rm $(docker ps -a -q)
docker rmi $(docker images -q --filter dangling=true)
Slide 31
Slide 31 text
@saturnism @googlecloud #kubernetes #devnexus
Clean up disk spaces
Docker 1.13 makes it easier
docker system prune
@saturnism @googlecloud #kubernetes #devnexus
Pin your versions
Consistent rebuild
Repeatability
Slide 40
Slide 40 text
@saturnism @googlecloud #kubernetes #devnexus
Java Specific
Slide 41
Slide 41 text
@saturnism @googlecloud #kubernetes #devnexus
SecureRandom - slow =(
For development and testing
-Djava.security.egd=file:/dev/urandom
Slide 42
Slide 42 text
@saturnism @googlecloud #kubernetes #devnexus
How many CPUs?
Red Hat has it right - check their scripts!
Don't trust Runtime.availableProcessors()
https://github.com/fabric8io-images/run-java-sh
@saturnism @googlecloud #kubernetes #devnexus
Let’s run the container!
docker run -ti -p 8080:8080 helloworld-service
Slide 48
Slide 48 text
@saturnism @googlecloud #kubernetes #devnexus
MySQL
docker run -d --name mysql -p 3306:3306 -e
MYSQL_ROOT_PASSWORD=yourpassword -e MYSQL_DATABASE=app mysql
Slide 49
Slide 49 text
@saturnism @googlecloud #kubernetes #devnexus
Guestbook Service
docker run -ti --name guestbookservice --link mysql:mysql
saturnism/guestbook-service
@saturnism @googlecloud #kubernetes #devnexus
Hello World Service
docker run -ti --name helloworldservice \
saturnism/spring-boot-helloworld-service:1.0
@saturnism @googlecloud #kubernetes #devnexus
Test locally!
Deployment during development could be painful
Set environmental variables
Use Docker Compose
Slide 54
Slide 54 text
@saturnism @googlecloud #kubernetes #devnexus
Docker Compose
docker-compose up
@saturnism @googlecloud #kubernetes #devnexus
Use an Orchestrator!
Don't deploy containers to individual machines yourself…
Let an orchestrator do it for you!
Slide 72
Slide 72 text
@saturnism @googlecloud #kubernetes #devnexus
Try out Google Container Engine
https://cloud.google.com/container-engine/