docker for java developers at javaland

68
Continuous delivery with Docker Run everything in Docker containers Johan Janssen, Info Support, @johanjanssen42

Upload: johan-janssen

Post on 11-Apr-2017

121 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Docker for Java developers at JavaLand

Continuous delivery with Docker

Run everything in Docker containersJohan Janssen, Info Support, @johanjanssen42

Page 2: Docker for Java developers at JavaLand
Page 3: Docker for Java developers at JavaLand

Docker

Page 4: Docker for Java developers at JavaLand

Transportation issue

Page 5: Docker for Java developers at JavaLand

Transportation solution

Page 6: Docker for Java developers at JavaLand

Software issue

Page 7: Docker for Java developers at JavaLand

Software solution

Page 8: Docker for Java developers at JavaLand

Docker compatibility

Page 9: Docker for Java developers at JavaLand

Why Docker To enable continuous delivery Quickly provision environments Run the same software local and in

the cloud

Page 10: Docker for Java developers at JavaLand

Docker vs Virtual Machines

Page 11: Docker for Java developers at JavaLand

Docker vs Virtual Machines Disk space efficiency Memory efficiency Speed Compatibility (run anywhere) Isolation Versioning Internet of Things (Raspberry Pi

etc.)

Page 12: Docker for Java developers at JavaLand

My first Docker container

docker run -i -t ubuntu:yakkety /bin/bash

Page 13: Docker for Java developers at JavaLand

Docker usecases

DTAP environment

Build environment

Mainly running non-GUI applications

Continuous delivery, testing etc.

Development !

Page 14: Docker for Java developers at JavaLand

Application and CD pipeline in Docker

Page 15: Docker for Java developers at JavaLand

Deployment pipeline

Version control

CompileQuality checks

TestingDeployments

DevOps End users

EtceteraSetup environment

Page 16: Docker for Java developers at JavaLand

Automatic versus manual deployment

Continuous delivery

Continuous deployment

Page 17: Docker for Java developers at JavaLand

Deployment pipeline

Page 18: Docker for Java developers at JavaLand

Example build pipeline

TAP

D

1

2

3 4

678

9

5

Page 19: Docker for Java developers at JavaLand

What to deliver?

Page 20: Docker for Java developers at JavaLand

Dockerfiles directory structure Main directory

BuildAndRunScript.sh GeneralBase

Dockerfile SonarQube

Dockerfile

Page 21: Docker for Java developers at JavaLand

Dockerfile GeneralBaseFROM ubuntu:saucy

RUN apt-get -y install software-properties- commonRUN add-apt-repository ppa:webupd8team/javaRUN apt-get update && apt-get -y upgradeRUN echo "oracle-java7-installer shared/accepted-oracle-license-v1-1 boolean true" | debconf-set-selectionsRUN apt-get -y install oracle-java7-installerENV JAVA_HOME /usr/lib/jvm/java-7-oracle

Page 22: Docker for Java developers at JavaLand

Build Create the Dockerfile Build the containers:

<optional>cd GeneralBasedocker.io build -t GeneralBase . cd .. </optional>

Page 23: Docker for Java developers at JavaLand
Page 24: Docker for Java developers at JavaLand

Dockerfile SonarFROM GeneralBase

RUN apt-get install -y wget unzipRUN wget http://dist.sonar.codehaus.org/sonarqube-4.2.zipRUN unzip sonarqube-4.2.zip -d /optRUN rm sonarqube-4.2.zip

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

Page 25: Docker for Java developers at JavaLand

Build Create the Dockerfile Build the containers:

cd SonarQubedocker.io build -t SonarQube .

Page 26: Docker for Java developers at JavaLand

Run

Start the containerdocker.io run -p 9000:9000

–p 9092:9092 -d SonarQube

Page 27: Docker for Java developers at JavaLand

List all in(active) containers# docker.io ps –aCONTAINER 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 28: Docker for Java developers at JavaLand

Controlling containers

Start / stop / restartdocker [start/stop/restart] containerid

Follow SystemOut and SystemErrdocker logs -f containerid

Page 29: Docker for Java developers at JavaLand

We need lots of Docker containersGeneralBa

se

AppServerBase

Environment D

Environment T

Environment A

Environment P

Jenkins

JenkinsDataContainer

Sonar Gitblit Nexus

Page 30: Docker for Java developers at JavaLand
Page 31: Docker for Java developers at JavaLand

Data storage In the same container as the application In a data container / data volume On the host

Page 32: Docker for Java developers at JavaLand

Data volumes Dockerfile

ENV JENKINS_HOME /var/JenkinsData

Docker commandsdocker.io run -v /var/JenkinsData –name JenkinsDataContainer ubuntu:saucy true

docker.io run -p 8080:8080 --volumes-from JenkinsDataContainer -d Jenkins

Page 33: Docker for Java developers at JavaLand

Diskspace# 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 34: Docker for Java developers at JavaLand

Execution time

real 4m11.729suser 0m3.329s sys 0m10.054s

Page 35: Docker for Java developers at JavaLand

Docker overview

Page 36: Docker for Java developers at JavaLand

One ring to rule them all

Page 37: Docker for Java developers at JavaLand

Docker registry

Creating the Docker registrydocker run -p 5000:5000 registry

Page 38: Docker for Java developers at JavaLand

Updating containers

Page 39: Docker for Java developers at JavaLand

Docker client 1 (push) Modify container Commit

docker.io commit 064f192.168.56.31:5000/test-version-0.2

New containerid -> ff7e

Pushdocker.io push

192.168.56.31:5000/test-version-0.2

Page 40: Docker for Java developers at JavaLand

Docker client 2 (pull) Pull

docker.io pull 192.168.56.31:5000/

test-version-0.2

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

Page 41: Docker for Java developers at JavaLand

Pull update onlydocker 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 42: Docker for Java developers at JavaLand

Development environment

Page 43: Docker for Java developers at JavaLand
Page 44: Docker for Java developers at JavaLand
Page 45: Docker for Java developers at JavaLand
Page 46: Docker for Java developers at JavaLand
Page 47: Docker for Java developers at JavaLand
Page 48: Docker for Java developers at JavaLand

Dockerfile

FROM java:8-jdk

RUN wget …/netbeans-8.0.2-linux.shRUN chmod +x netbeans*.shRUN sh netbeans*.sh --silent

CMD /usr/local/netbeans-8.0.2/bin/netbeans

Page 49: Docker for Java developers at JavaLand

Persisting data on host

Docker run command: -v $PWD/workspace:/workspace

Page 50: Docker for Java developers at JavaLand

What to persist?

Workspace Plugins Application in application server Maven repo Configuration Entire home folder??

Page 51: Docker for Java developers at JavaLand

Different options

Page 52: Docker for Java developers at JavaLand

Eclipse Che“Eclipse Che is an IDE and developer workspace server that allows anyone to contribute to a project without having to install software.”

Page 53: Docker for Java developers at JavaLand

Used by multiple teams

Team Frodo image

Base image

Team Bilbo image

Page 54: Docker for Java developers at JavaLand

Used by multiple teams

• App Gimli• App Elrond

Team Frodo

• App ElrondTeam Bilbo

• App RadagastTeam

Galadriel

App means

application server

etc.

Page 55: Docker for Java developers at JavaLand

Used by multiple teams

Where do we place

the Elrond App?

• App Gimli• App Elrond

Team Frodo

• App ElrondTeam Bilbo

• App RadagastTeam

Galadriel

Page 56: Docker for Java developers at JavaLand

Splitting the container

TomcatImage

Gimli Elrond Radagast

Page 57: Docker for Java developers at JavaLand

Splitting the container

FedoraImage

Development

environment

Page 58: Docker for Java developers at JavaLand

Docker Compose

Page 59: Docker for Java developers at JavaLand

Docker Compose

Define and run multi container Docker applications Using a Compose file Link containers ‘docker-compose up’ to start the

containers

Page 60: Docker for Java developers at JavaLand

Directory structure TomcatGimli

DockerFile TomcatElrond

DockerFile TomcatRadagast

Dockerfile DevEnv

Dockerfile docker-compose.yml

Page 61: Docker for Java developers at JavaLand

tomcatgimli: build: TomcatGimli

tomcatelrond: build: TomcatElrond

tomcatradagast: build: TomcatRadagast

developmentenvironment: build: DevEnv ports: - "3389:3389" links: - tomcatgimli:gimli # Makes gimli available on # http://gimli:8080 - tomcatelrond:elrond - tomcatradagast:radagast

Page 62: Docker for Java developers at JavaLand

Environment specific configuration

Use docker-compose.override.yml Put all the configuration in one container Create small containers with configuration

per environment that inherit the application container Commandline arguments

Page 63: Docker for Java developers at JavaLand

Conclusion Use a (private) Docker registry 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 Inherit and/or compose containers Separate concerns in separate

containers

Page 64: Docker for Java developers at JavaLand

Isolation

Page 65: Docker for Java developers at JavaLand

Isolation

Page 66: Docker for Java developers at JavaLand

Isolation

Page 67: Docker for Java developers at JavaLand

Isolation

Page 68: Docker for Java developers at JavaLand

Questions

[email protected]@johanjanssen42

https://bitbucket.org/johanjanssen/dockeride