johan janssen, @johanjanssen42, info support. internet of things continuous delivery docker jenkins...
TRANSCRIPT
Using Docker and Jenkins to deploy and run applications
on the Raspberry Pi and in the cloud.
Johan Janssen, @johanjanssen42, Info Support
Developments outside the IoT
Continuous Delivery Virtual machines Provisioning (Chef, Puppet, Vagrant …) Version control / infrastructure as code Isolation
Updating and synchronizing environments
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
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
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
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
Why Jenkins Simple to use Really popular
Used in many organizations Regular updates Big community creating plugins etc.
Most Java developers already use it
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