gebruik dezelfde docker container voor java applicaties tijdens ontwikkelen en in de cloud

65
Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud Johan Janssen, Info Support

Upload: nissim-gallagher

Post on 31-Dec-2015

24 views

Category:

Documents


0 download

DESCRIPTION

Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud. Johan Janssen, Info Support. Content. Continuous delivery Docker Jenkins Questions. Continuous Delivery. Automate everything Software quality Continuous improvement Regular deployments - PowerPoint PPT Presentation

TRANSCRIPT

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

Gebruik dezelfde Docker container voor Java applicaties tijdens

ontwikkelen en in de cloud

Johan Janssen, Info Support

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

Content

Continuous delivery

Docker

Jenkins

Questions

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

Continuous Delivery

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

Deployment pipeline

Version control

Compile

Quality checks

Testing

Deployments

DevOps End users

Etcetera

Setup environment

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

Deployment pipeline

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

Focus of this presentation

Automate environment provisioning

Automate application deployment

Page 7: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

What to deliver?

Page 8: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Docker

Page 9: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Transportation issue

Page 10: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Transportation solution

Page 11: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Software issue

Page 12: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Software solution

Page 13: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Docker compatibility

Page 14: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Demo

Page 15: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Why Docker

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

Docker vs Virtual Machines

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

Docker vs provisioning tools

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

Docker activity

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

Docker on CIO TODAY

Page 20: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Windows will get Docker support

Page 21: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

My first Docker container

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

Docker technology

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

Dockerfiles directory structure

Main directory BuildAndRunScript.sh GeneralBase

Dockerfile Sonar

Dockerfile

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

Dockerfile GeneralBase

FROM ubuntu:saucy

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

RUN 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 25: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

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 26: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Build

Create the Dockerfiles Build the containers:

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

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

Run

Start the containerdocker.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

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 29: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Controlling containers

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

Follow SystemOut and SystemErrdocker logs -f containerid

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

Controlling containers

Show (running) containersdocker ps –a

Show processes running in container

docker top containerid

Show changes in the containerdocker diff containerid

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

Controlling containers

Stop all containersdocker.io stop $(docker.io ps -a -q)

Remove all containersdocker.io rm $(docker.io ps -a -q)

Remove all imagesdocker.io rmi $(docker.io images -q)

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

We need lots of Docker containers

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

Data volumes

DockerfileENV 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 34: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

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 35: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Execution time

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

Page 36: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Docker overview

Page 37: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

One ring to rule them all

Page 38: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Docker registry

Creating the Docker registrydocker run -p 5000:5000 registry

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

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: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Docker client 2 (pull)

Pulldocker.io pull 192.168.56.31:5000/

test-version-0.2

Rundocker.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

Updating containers

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

Pull update only

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

Docker vs Virtual Machines

Page 44: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Jenkins

Page 45: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Demo

Page 46: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Why Jenkins

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

Example build pipeline

TAP

D

1

2

34

6

7

8

9

5

Page 48: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Jenkins

Page 49: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Backend pipeline

Page 50: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Frontend pipeline

Page 51: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Combined pipeline

Page 52: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Automatic versus manual deployment

Continuous delivery

Continuous deployment

Page 53: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Automatic versus manual

Page 54: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Build pipeline plugin

Page 55: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Publish over SSH plugin

Page 56: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Publish over SSH plugin

Page 57: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Keep it simple

“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

Build pipeline demo

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

Tips 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

Isolation

Page 61: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Isolation

Page 62: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Isolation

Page 63: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Isolation

Page 64: Gebruik dezelfde  Docker  container voor Java applicaties tijdens ontwikkelen en in de  cloud

Summary