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

Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Embed Size (px)

Citation preview

Page 1: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Gebruik dezelfde Docker container voor Java applicaties tijdens

ontwikkelen en in de cloud

Johan Janssen, Info Support

Page 2: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Content

Continuous delivery

Docker

Jenkins

Questions

Page 3: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Continuous Delivery

Automate everything

Software quality

Continuous improvement

Regular deployments

Anyone can deploy

Page 4: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Deployment pipeline

Version control

Compile

Quality checks

Testing

Deployments

DevOps End users

Etcetera

Setup environment

Page 5: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Deployment pipeline

Page 6: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Focus of this presentation

Automate environment provisioning

Automate application deployment

Page 7: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

What to deliver?

Page 8: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Docker

Page 9: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Transportation issue

Page 10: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Transportation solution

Page 11: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Software issue

Page 12: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Software solution

Page 13: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Docker compatibility

Page 14: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Demo

Page 15: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

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: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Docker vs Virtual Machines

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

etc.)

Page 17: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Docker vs provisioning tools

Simple general commands No Domain Specific Language

(DSL) Configuration with operating

system commands

Page 18: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

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: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Docker on CIO TODAY

Page 20: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Windows will get Docker support

Page 21: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

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: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Docker technology

Page 23: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Dockerfiles directory structure

Main directory BuildAndRunScript.sh GeneralBase

Dockerfile Sonar

Dockerfile

Page 24: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

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: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

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: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Build

Create the Dockerfiles Build the containers:

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

Page 27: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Run

Start the containerdocker.io run -p 9000:9000

–p 9092:9092 -d Sonar

Page 28: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

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: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Controlling containers

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

Follow SystemOut and SystemErrdocker logs -f containerid

Page 30: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Controlling containers

Show (running) containersdocker ps –a

Show processes running in container

docker top containerid

Show changes in the containerdocker diff containerid

Page 31: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

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: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

We need lots of Docker containers

GeneralBase

AppServerBase

Environment D

Environment T

Environment A

Environment P

Jenkins

JenkinsDataContainer

Sonar Gitblit Nexus

Page 33: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

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: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

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: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Execution time

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

Page 36: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Docker overview

Page 37: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

One ring to rule them all

Page 38: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Docker registry

Creating the Docker registrydocker run -p 5000:5000 registry

Page 39: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

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: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

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: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Updating containers

Page 42: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

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: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Docker vs Virtual Machines

Page 44: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Jenkins

Page 45: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Demo

Page 46: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

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: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Example build pipeline

TAP

D

1

2

34

6

7

8

9

5

Page 48: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Jenkins

Page 49: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Backend pipeline

Page 50: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Frontend pipeline

Page 51: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Combined pipeline

Page 52: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Automatic versus manual deployment

Continuous delivery

Continuous deployment

Page 53: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Automatic versus manual

Page 54: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Build pipeline plugin

Page 55: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Publish over SSH plugin

Page 56: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Publish over SSH plugin

Page 57: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Keep it simple

“Life is really simple, but we insist on making it complicated.”

- Confucius

Page 58: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Build pipeline demo

Page 59: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

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: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Isolation

Page 61: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Isolation

Page 62: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Isolation

Page 63: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Isolation

Page 64: Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions

Summary