Date post: | 31-Dec-2015 |
Category: |
Documents |
Upload: | lucius-williamson |
View: | 83 times |
Download: | 0 times |
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