johan janssen, @johanjanssen42, info support. internet of things continuous delivery docker jenkins...

52
Using Docker and Jenkins to deploy and run applications on the Raspberry Pi and in the cloud. Johan Janssen, @johanjanssen42, Info Support

Upload: august-gordon

Post on 25-Dec-2015

219 views

Category:

Documents


2 download

TRANSCRIPT

Using Docker and Jenkins to deploy and run applications

on the Raspberry Pi and in the cloud.

Johan Janssen, @johanjanssen42, Info Support

Content

Internet of things

Continuous delivery

Docker

Jenkins

Questions

Internet of Things

Developments outside the IoT

Continuous Delivery Virtual machines Provisioning (Chef, Puppet, Vagrant …) Version control / infrastructure as code Isolation

Updating and synchronizing environments

IoT limitations

Hyper Text Coffee Pot Control Protocol

April Fools prank

It might become real

Docker

Demo

Continuous Delivery Automate everything Software quality Continuous improvement Regular deployments Anyone can deploy

Deployment pipeline

Version control

Compile

Quality checks

Testing

Deployments

DevOps End users

Etcetera

Setup environment

Deployment pipeline

Focus of this presentation

Automate environment provisioning

Automate application deployment

What to deliver?

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

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

Docker vs provisioning tools

Simple general commands No Domain Specific Language (DSL) Configuration with operating system

commands

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

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"]

We need lots of Docker containers

GeneralBase

AppServerBase

Environment D

Environment T

Environment A

Environment P

Jenkins

JenkinsDataContainer

Sonar Gitblit Nexus

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

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

Execution time

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

Docker overview

One ring to rule them all

Docker registry

Creating the Docker registrydocker run -p 5000:5000 registry

Docker client 1 (push) Modify container (for instance with touch) 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

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

View the changed container

Updating containers

Pull update onlydocker images -tree└─153bf43b408a 194.2 MB test-version-0.1:latest

docker pull 192.168.56.31:5000/test-version-0.2 ff7e110ebadd: Download complete153bf43b408a: Download complete

docker images -tree└─153bf43b408a 194.2 MB test-version-0.1:latest └─ff7e110ebadd 194.2 MB test-version-0.2:latest

Jenkins

Demo

Why Jenkins Simple to use Really popular

Used in many organizations Regular updates Big community creating plugins etc.

Most Java developers already use it

Jenkins

Backend pipeline

Frontend pipeline

Combined pipeline

Automatic versus manual deployment

Continuous delivery

Continuous deployment

Automatic versus manual

Build pipeline plugin

Example build pipeline

TAP

D

1

2

34

7

8

9

10

56?

6?

Publish over SSH plugin

Publish over SSH plugin

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

- Confucius

Build pipeline demo

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

Isolation

Isolation

Isolation

Isolation

Summary

Questions

[email protected] @johanjanssen42http://blogs.infosupport.com/author/johanj/