Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

70
ons with Docker on the Raspberry Pi and other platforms Johan Janssen, Info Support

Transcript of Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Page 1: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Run Java applications with Docker on

the Raspberry Pi and other platforms

Johan Janssen, Info Support

Page 2: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Content

Internet of Things

Docker and Java on a Raspberry Pi

Jenkins

Questions

Page 3: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Internet of Things

Page 4: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Potential market

Huge and still growing

Not stable yet, lots of innovation

Cool new technologies

Suitable for Java!

Page 5: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Weather station

Page 6: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Drone

Page 7: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Wave Glider

Page 8: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Wearables

Page 9: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Robots

Page 10: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Raspberry Pi

Page 11: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Raspberry Pi

Page 12: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Developments outside the IoT

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

Updating and synchronizing environments

Page 13: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

IoT limitations

Page 14: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.
Page 15: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

What to deliver?

Page 16: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Docker

Page 17: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Transportation issue

Page 18: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Transportation solution

Page 19: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Software issue

Page 20: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Software solution

Page 21: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Docker compatibility

Page 22: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Why Docker To enable continuous delivery Quickly provision environments Easy to roll forward Security

For instance to run ‘untrusted’ applications like a Dropbox client

Alternative for virtual machines On top of virtual machines

Page 23: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

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

Page 24: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Docker vs provisioning tools

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

commands

Page 25: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Docker activity Since March 2013 More than 460 570 contributors Downloaded 2.75 13 million times More than 14000 30000 Dockerized apps More than 90 user groups, DockerCon

(Europe) Support from Google, VMWare,

RackSpace, Red Hat, IBM, Microsoft etcetera

Page 26: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Docker on CIO TODAY

Page 27: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Docker ecosystem

Page 28: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi 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 29: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

My first Pi Docker container

Docker on the Raspberry Pi

docker run -i –tresin/rpi-raspbian

/bin/bash

Page 30: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Docker technology

Page 31: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Raspberry installation Download Arch Linux http://downloads.raspberrypi.org/arch_latest unzip ArchLinuxARM-2014.06-rpi.img.zip Find SD card: sudo fdisk -l sudo dd bs=1M if=ArchLinuxARM-2014.06-rpi.img of=/dev/sdX Change partitions (optional) Put the SD card in the Raspberry Pi and boot username and password are both ‘root’

Page 32: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Raspberry installation Update repositoriespacman –Syy

Optional update al packages: pacman -Syu

Install Dockerpacman -S docker

Page 33: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Raspberry installation Start Docker servicesystemctl start docker

Auto start Docker service on bootsystemctl enable docker

Reboot

Page 34: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Configure static IP address cp /etc/netctl/examples/ethernet-static /etc/netctl/static Edit /etc/netctl/static

Description='A basic static ethernet connection'Interface=eth0Connection=ethernetAutoWired=yesIP=staticAddress=('192.168.1.3/24')Gateway='192.168.1.1'DNS=('192.168.1.1')

Page 35: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Static IP address Enable static ip

netctl enable static

Disable static ip mv /etc/netctl/static /etc/netctl/examples/

Page 36: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Tomcat DockerfileFROM resin/rpi-raspbianRUN apt-get update

RUN apt-get install -y openjdk-7-jre-headless wgetRUN wget -O /tmp/tomcat8.tar.gz http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.9/bin/apache-tomcat-8.0.9.tar.gzRUN (cd /opt && tar zxf /tmp/tomcat8.tar.gz)RUN (mv /opt/apache-tomcat* /opt/tomcat)ENV JAVA_HOME /usr/lib/jvm/java-1.7.0-openjdk-armhf

RUN rm -rf /opt/tomcat/webapps/docs /opt/tomcat/webapps/examples /opt/tomcat/webapps/host-manager /opt/tomcat/webapps/manager

EXPOSE 8080CMD ["/opt/tomcat/bin/catalina.sh", "run"]

Page 37: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Tomcat Dockerfile explainedFROM resin/rpi-raspbian

RUN apt-get install -y openjdk-7-jre-headless wget

ENV JAVA_HOME /usr/lib/jvm/java-1.7.0-openjdk-armhf

EXPOSE 8080CMD ["/opt/tomcat/bin/catalina.sh", "run"]

Page 38: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

TomcatExtra DockerfileFROM tomcat

ADD DockerPiExample.war /opt/tomcat/webapps/

Page 39: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Directory structure Main directory

BuildAndRunScript.sh Tomcat

Dockerfile TomcatExtra

Dockerfile DockerPiExample.war

Page 40: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Build Create the Dockerfiles Build the containers

cd Tomcat (optional)docker build -t tomcat . (optional)cd .. (optional)cd TomcatExtradocker build -t tomcatextra .

Page 41: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Run Start the container

docker run -p 8080:8080 -d tomcatextra

Page 42: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Hyper Text Coffee Pot Control Protocol

April Fools prank

It might become real

Page 43: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Hyper Text Coffee Pot Control Protocol

Page 44: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Controlling containers

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

Follow SystemOut and SystemErrdocker logs -f containerid

Page 45: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Controlling containers Show (running) containers

docker ps –a

Show processes running in containerdocker diff containerid

Show changes in the containerdocker top containerid

Page 46: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Controlling containers Stop all containers

docker.io stop $(docker.io ps -a -q) Remove all containers

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

docker.io rmi $(docker.io images -q)

Page 47: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Demo

Page 48: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Docker overview

Page 49: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

One ring to rule them all

Page 50: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Docker registry

Creating the Docker registrydocker run -p 5000:5000 registry

Page 51: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Docker client 1 (push) Change container (using touch for instance) Commit

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

New containerid -> ff7e Push

docker.io push 192.168.56.31:5000/test-version-0.2

Page 52: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

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 53: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Updating containers

Page 54: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Pull update only on Docker client 2

docker 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

Page 55: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Use registry instead exports

Commands are easier

Faster and easier migration

Page 56: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Use registry instead of multiple builds

Requires less extra resources

Containers are the same, for instance when using apt-get update

Not the latest security patches

Page 57: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Docker vs Virtual Machines

Page 58: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

We need lots of Docker containers

GeneralBase

AppServerBase

Environment D

Environment T

Environment A

Environment P

Jenkins

JenkinsDataContainer

Sonar Gitblit Nexus

Page 59: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi 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 60: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Execution time on laptop

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

Page 61: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Jenkins

Page 62: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi 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 63: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Jenkins demo

Page 64: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Tips

Deploy the first container when the hardware is nearby this saves network traffic Use a (private) Docker registry Keep environmental settings separate

Start playing with Docker!

Page 65: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Summary

Big potential market for Docker and Java

Easy to use

Highly flexible and customizable

Page 66: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Isolation

Page 67: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Isolation

Page 68: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Isolation

Page 69: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Isolation

Page 70: Johan Janssen, Info Support. Internet of Things Docker and Java on a Raspberry Pi Jenkins Questions.

Questions

[email protected]