Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions.

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

Transcript of Johan Janssen, Info Support. Continuous delivery Docker Jenkins Questions.

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