Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan...

65
Johan Janssen, Info Support

description

Docker is een extreem populair en relatief nieuw open source project waarmee containers gemaakt kunnen worden van (bijna alle) applicaties. Een container gebaseerd op Ubuntu met Glassfish en je favoriete applicatie is een van de vele mogelijkheden. Het grootste voordeel is dat Docker containers draaien op (alle) Linux distributies. Dit betekend dat dezelfde container lokaal gebruikt kan worden voor ontwikkeling en in de cloud gebruikt kan worden voor klanten. Docker wordt al gebruikt door grote bedrijven als Ebay en Spotify en ook Google ondersteund het actief. Deze presentatie zal de voordelen van Docker en de best practices behandelen. Tevens zal ik demonstreren hoe Docker werkt zodat je na deze sessie zelf met Docker aan de slag kan.

Transcript of Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan...

Page 1: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

Johan Janssen, Info Support

Page 2: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

Continuous delivery

Docker

Jenkins

Questions

Page 3: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

Automate everything

Software quality

Continuous improvement

Regular deployments

Anyone can deploy

Page 4: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

DevOps End users

Page 5: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 6: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

Automate environment provisioning

Automate application deployment

Page 7: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 8: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 9: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 10: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 11: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 12: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 13: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 14: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 15: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

To enable continuous delivery

Quickly provision environments

Run the same software local and in the

cloud

Easy to move software

Better performance

Higher availability

Cheaper

Page 16: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

Disk space efficiency

Memory efficiency

Speed

Compatibility (run anywhere)

Isolation

Versioning

Internet of Things (Raspberry Pi etc.)

Page 17: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

Simple general commands

No Domain Specific Language (DSL)

Configuration with operating system

commands

Page 18: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

Since March 2013

8741 commits in 15 months

More than 460 570 contributors

Downloaded 2.75 13 million times

More than 14000 30000 Dockerized apps

>6500 Docker related projects on GitHub

More than 90 user groups

DockerCon (Europe)

Support from Google, VMWare, RackSpace,

Red Hat, IBM, Microsoft etcetera

Page 19: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 20: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 21: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

Docker on Ubuntu 14.04

apt-get install docker.io

docker.io run -i -t ubuntu:saucy/bin/bash

Page 22: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 23: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

Main directory

BuildAndRunScript.sh

GeneralBase

Dockerfile

Sonar

Dockerfile

Page 24: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

FROM ubuntu:saucy

RUN apt-get -y install software-properties-common

RUN add-apt-repository ppa:webupd8team/java

RUN apt-get update && apt-get -y upgrade

RUN echo "oracle-java7-installer shared/accepted-oracle-license-v1-1 boolean true" | debconf-set-selections

RUN apt-get -y install oracle-java7-installer

ENV JAVA_HOME /usr/lib/jvm/java-7-oracle

Page 25: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

FROM GeneralBase

RUN apt-get install -y wget unzip

RUN wget http://dist.sonar.codehaus.org/sonarqube-4.2.zip

RUN unzip sonarqube-4.2.zip -d /opt

RUN rm sonarqube-4.2.zip

EXPOSE 9000

EXPOSE 9092

CMD ["/opt/sonarqube-4.2/bin/linux-x86-64/sonar.sh", "console", "/bin/bash"]

Page 26: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

Create the Dockerfiles

Build the containers:

<optional>cd GeneralBase

docker.io build -t GeneralBase .

cd .. </optional>

cd Sonar

docker.io build -t Sonar .

Page 27: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

Start the container

docker.io run -p 9000:9000

–p 9092:9092 -d Sonar

Page 28: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

# docker.io ps –a

CONTAINER ID: ecbecf77461b

CREATED: 32 minutes ago

STATUS: Up 32 minutes

PORTS: 0.0.0.0:9000->9000/tcp, 0.0.0.0:9092->9092/tcp

Page 29: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

Start / stop / restart

docker [start/stop/restart] containerid

Follow SystemOut and SystemErr

docker logs -f containerid

Page 30: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

Show (running) containers

docker ps –a

Show processes running in container

docker top containerid

Show changes in the container

docker diff containerid

Page 31: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

Stop all containers

docker.io stop $(docker.io ps -a -q)

Remove all containers

docker.io rm $(docker.io ps -a -q)

Remove all images

docker.io rmi $(docker.io images -q)

Page 32: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

GeneralBase

AppServerBase

Environment D

Environment T

Environment A

Environment P

Jenkins

JenkinsDataContainer

Sonar Gitblit Nexus

Page 33: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

Dockerfile

ENV JENKINS_HOME /var/JenkinsData

Docker commands

docker.io run -v /var/JenkinsData –name

JenkinsDataContainer ubuntu:saucy true

docker.io run -p 8080:8080 --volumes-from

JenkinsDataContainer -d Jenkins

Page 34: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

# docker.io images --tree

└─ 179.9 MB Tags: ubuntu:saucy

└─253.6 MB

└─741.8 MB Tags: GeneralBase:latest

└─763.6 MB Tags: AppServerBase:latest

├─763.6 MB Tags: EnvironmentP:latest

└─865.6 MB Tags: Nexus:latest

└─808.3 MB Tags: Gitblit:latest

└─901.5 MB Tags: Sonar:latest

└─805.4 MB Tags: Jenkins:latest

Page 35: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

real 4m11.729s

user 0m3.329s

sys 0m10.054s

Page 36: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 37: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 38: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

Creating the Docker registry

docker run -p 5000:5000 registry

Page 39: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

Modify container

Commit

docker.io commit 064f

192.168.56.31:5000/test-version-0.2

New containerid -> ff7e

Push

docker.io push

192.168.56.31:5000/test-version-0.2

Page 40: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

Pull

docker.io pull 192.168.56.31:5000/

test-version-0.2

Run

docker.io run -i -t ff7e /bin/bash

View the changed container

Page 41: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 42: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

docker images -tree└─153b 194.2 MB test-version-0.1:latest

docker pull 192.168.56.31:5000/test-version-0.2 ff7e: Download complete153b: Download complete

docker images -tree└─153b 194.2 MB test-version-0.1:latest

└─ff7e 194.2 MB test-version-0.2:latest

Page 43: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 44: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 45: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 46: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

Simple to use

Really popular

Used in many organizations

Regular updates

Big community creating plugins etc.

Most developers already use it

Page 47: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

1

2

34

6

7

8

9

5

Page 48: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 49: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 50: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 51: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 52: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

Continuous delivery

Continuous deployment

Page 53: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 54: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 55: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 56: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 57: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

“Life is really simple, but we insist on

making it complicated.”

- Confucius

Page 58: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 59: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen

Use a (private) Docker registry

Use images from the registry instead of export

Keep environmental settings separate

Use Jenkins to manage everything

Do not add extra functionality like OpenSSH

Think about topics such as security, monitoring and logging

Separate concerns in separate containers

Inherit containers

Page 60: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 61: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 62: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 63: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen
Page 64: Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan Janssen