+ All Categories
Home > Documents > Demystifying Docker - JUG Saxony Day · PDF fileDemystifying Docker JUG Saxony Day 2015 Bernd...

Demystifying Docker - JUG Saxony Day · PDF fileDemystifying Docker JUG Saxony Day 2015 Bernd...

Date post: 09-Mar-2018
Category:
Upload: phungkhanh
View: 220 times
Download: 1 times
Share this document with a friend
41
Demystifying Docker JUG Saxony Day 2015 Bernd Fischer
Transcript

Demystifying DockerJUG Saxony Day 2015Bernd Fischer

Who’s that guy?

Passionate Java Developer (especially Spring)Agile and Devops infected

Docker [email protected]

@berndfischer63

JUG Saxony, Docker Meetup Dresden

CTO MindApproach GmbH, [email protected]

Who’s that guy?

You build it you run itWerner Vogels, CTO Amazon, 2006 [Gra01]

Who’s that guy?

Automate almost everything

Continuous Delivery, 2010 [HuFa01]

AgendaDemystifying Docker ...What is Docker?Dockerize a Java Web Application in five stepsLeassons learned

What is Docker

What is Docker? Container vs VM

Virtual Machine

Hypervisor / Host OS

Physical Server Physical Server

Host OS

App A App B

Libs Libs

Guest OS

Virtual Hardware / BIOSDocker Engine

Container(Process)

App A

Libs

Container

App A

Libs

What is Docker?Used Technologies

Docker

Libcontainer

NamespacesControl GroupsStorage BackendsLayered/CoW Filesystems

Linux Kernel

Software Defined Networking

What is Docker?Images & Container

read only

writableempty after creation

many containers can be created based on one image

What is Docker?DockerhubMaven Central for Docker ...

What is Docker?System Architecture

Docker Host (Linux)

Docker Client Docker Daemon

Container ImagesContainer

ContainerImages

Images

Socket

RESTFul API

Docker Client

Windows

Docker Client

Mac OS V

Docker Client

What is Docker?Docker Project Family● Docker-Engine (CLI + Daemon)● Docker-Machine● Docker-Compose● (Docker-Swarm)● (Docker-Distribution)● (Docker-Toolbox)● (Docker Notary based on TUF)● (Docker-Bench-Security)

What is Docker?Development Environment

Virtual Machine (Linux)

ImagesContainer

Mac OS XWindows

/Users /Users

DockerClient

DockerDaemon

Dockerize a Java Web Application

Dockerize a Java Web AppStarting Point

Linux (Ubuntu 14.04.3-LTS)

java -jar ...

urlusernamepassword

JVM

Demo-ApplicationSpring Boot Webembedded Tomcat Database

Dockerize a Java Web AppStarting Point

DEMO

Dockerize a Java Web AppMySql - local Installation

Dockerize a Java Web AppMySql - local Installation

Dockerize a Java Web AppMySql - local Installation

Dockerize a Java Web AppMySql - Container

Dockerize a Java Web AppMySql - Container

Docker Machine

docker-machine \

create \

--driver=virtualbox \

jsd2015

Dockerize a Java Web AppMySql - Container

DEMO

Dockerize a Java Web AppMySql - Container

Docker Compose

# s01-docker-compose.yaml

mysql:

image: mysql:5.6.26

expose:

- "3306"

ports:

- "3306:3306"

environment:

- MYSQL_ROOT_PASSWORD=9876

- MYSQL_USER=test

- MYSQL_PASSWORD=1234

- MYSQL_DATABASE=test

Dockerize a Java Web AppMySql - Container

DEMO

Dockerize a Java Web AppJava - Container# s02-docker-compose.yaml (snippet)

app:

image: java:8

ports:

- "8080:8080"

environment:

- SPRING_PROFILES_ACTIVE=initdb

working_dir: /opt/demo-helloworld-web

links:

- mysql:mysql

entrypoint: [ "java",

"-Djava.security.egd=file:/dev/./urandom", "-jar",

"/opt/demo-helloworld-web/demo-helloworld-web-1.0-Local.jar"

]

volumes:

- ../../../target:/opt/demo-helloworld-web:ro

Dockerize a Java Web AppJava - Container

DEMO

Dockerize a Java Web AppUnpacked Fat-Jar# maven -PunzipFatJar

# unzip target/demo-helloworld-web-1.0-Local.jar \

-d target/app

# s03-docker-compose.yaml (snippet)

app:

# ...

volumes:

- ../../../target/app/META-INF:/opt/.../META-INF:ro

- ../../../target/classes/de:/opt/.../de:ro

- ../../../target/app/lib:/opt/.../lib:ro

- ../../../target/app/org:/opt/.../org:ro

- ../../../target/classes/static:/opt/.../static:ro

- ../../../target/classes/templates:/opt/.../templates:ro

- ../../../target/classes/application.yml:/opt/.../application.yml:ro

- ../../../target/classes/logback.xml:/opt/.../logback.xml:ro

Dockerize a Java Web AppUnpacked Fat-Jar

DEMO

Dockerize a Java Web AppDocker Image by Foot# Dockerfile

FROM java:8

MAINTAINER Bernd Fischer "[email protected]"

ENV MODIFIED_AT 2015-09-26_1845

COPY demo-helloworld-web.jar /opt/demo-helloworld-web/

# mvn -PbuildDockerWorkDir

# copy Dockerfile and “Fat-Jar” in separate dir

# should be called from project root dir

docker build -t mapp/demo-helloworld-web04:latest \

-f $(pwd)/target/workdir-docker/Dockerfile \

$(pwd)/target/workdir-docker

Dockerize a Java Web AppDocker Image by Foot# s04-docker-compose.yaml (snippet)

app:

image: mapp/demo-helloworld-web04:latest

ports:

- "8080:8080"

environment:

- SPRING_PROFILES_ACTIVE=initdb

working_dir: /opt/demo-helloworld-web/

links:

- mysql:mysql

entrypoint: [ "java",

"-Djava.security.egd=file:/dev/./urandom",

"-jar","/opt/demo-helloworld-web/demo-helloworld-web.jar"

]

_________

Dockerize a Java Web AppDocker Image by Foot

DEMO

Dockerize a Java Web AppDocker Image by Maven# Maven (snippet)

<plugin>

<groupId>org.jolokia</groupId>

<artifactId>docker-maven-plugin</artifactId>

<version>0.13.4</version>

<configuration>

<dockerHost>${env.DOCKER_HOST}</dockerHost>

<certPath>${env.DOCKER_CERT_PATH}</certPath>

<images>

<image>

<name>mapp/demo-helloworld-web05</name>

...

</image>

</images>

</configuration>

...

</plugin>

Dockerize a Java Web AppDocker Image by Maven# s05-docker-compose.yaml (snippet)

app:

image: mapp/demo-helloworld-web05:latest

ports:

- "8080:8080"

environment:

- SPRING_PROFILES_ACTIVE=initdb

working_dir: /opt/demo-helloworld-web/

links:

- mysql:mysql

entrypoint: [ "java",

"-Djava.security.egd=file:/dev/./urandom",

"-jar","/opt/demo-helloworld-web/demo-helloworld-web.jar"

]

Dockerize a Java Web AppDocker Image by Maven

DEMO

Lessons learned

Lessons Learned

Bereitstellung von Tools und Komponenten

Verpacken und Deployen von Anwendungen

Einfache Definition und Ausführung von (komplexen) Anwendungslandschaften (“Compositions”)

Unit-/Modultests ...

One more thing ...

One more thing ….

Private Docker RegistriesJFrog Artifactory (Docker support commercial only)

Sonatype Nexus V3.0.0

CI-/CD-PipelinesJenkins-Docker-ImageJenkins Workflow Engine, Docker Plugins, …

Questions … ?

Thanks for attention ...

Links ...

● [Gra01] J. Gray, A Conversation with Werner Vogels: Learning form the Amazon technology platform, 2006, siehe: https://queue.acm.org/detail.cfm?id=1142065

● [HuFa01] Jez Humble, David Farley, Continuous Delivery: Reliable Software Releases Through Build, Test and Deployment Automation, 2010, Addison-Wesley

●● [Do01] Docker Homepage https://www.docker.com/ ● [Do02] Docker Hub https://hub.docker.com/ ● [Do03] Docker Engine https://github.com/docker/docker ● [Do04] Docker Machine https://github.com/docker/machine ● [Do05] Docker Compose https://github.com/docker/compose ● [Do06] Docker Toolbox https://github.com/docker/toolbox ●● [Http01] Httpie Homepage http://httpie.org/ ●● [RHu01] Docker-Maven-Plugin https://github.com/rhuss/docker-maven-plugin ● [RHus02] Docker Maven Plugin Shootout: https://github.com/rhuss/shootout-docker-maven ●● [Ma01] https://bitbucket.org/mindapproach/demo-helloworld-web


Recommended