Johan Janssen, Info Support
Continuous delivery Docker Jenkins Questions
Automate everything Software quality Continuous improvement Regular deployments Anyone can deploy
Version control Compile Quality checks Testing Deployments DevOpsEnd users Etcetera Setup environment
Automate environment provisioning Automate application deployment
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
Disk space efficiency Memory efficiency Speed Compatibility (run anywhere) Isolation Versioning Internet of Things (Raspberry Pi etc.)
Simple general commands No Domain Specific Language (DSL) Configuration with operating system commands
Since March commits in 15 months More than contributors Downloaded million times More than 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
Docker on Ubuntu apt-get install docker.io docker.io run -i -t ubuntu:saucy /bin/bash
Main directory BuildAndRunScript.sh GeneralBase Dockerfile Sonar Dockerfile
FROM ubuntu:saucy RUN apt-get -y install software-properties- common RUN add-apt-repository ppa:webupd8team/java RUN apt-get update && apt-get -y upgrade RUN echo "oracle-java7-installer shared/accepted-oracle-license-v1-1 boolean true" | debconf-set-selections RUN apt-get -y install oracle-java7-installer ENV JAVA_HOME /usr/lib/jvm/java-7-oracle
FROM GeneralBase RUN apt-get install -y wget unzip RUN wget zip RUN unzip sonarqube-4.2.zip -d /opt RUN rm sonarqube-4.2.zip EXPOSE 9000 EXPOSE 9092 CMD ["/opt/sonarqube-4.2/bin/linux-x86-64/sonar.sh", "console", "/bin/bash"]
Create the Dockerfiles Build the containers: cd GeneralBase docker.io build -t GeneralBase. cd.. cd Sonar docker.io build -t Sonar.
Start the container docker.io run -p 9000:9000 –p 9092:9092 -d Sonar
# docker.io ps –a CONTAINER ID: ecbecf77461b CREATED: 32 minutes ago STATUS: Up 32 minutes PORTS: :9000->9000/tcp, :9092->9092/tcp
Start / stop / restart docker [start/stop/restart] containerid Follow SystemOut and SystemErr docker logs -f containerid
Show (running) containers docker ps –a Show processes running in container docker top containerid Show changes in the container docker diff containerid
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)
GeneralBase AppServerBase Environment D Environment T Environment A Environment P Jenkins JenkinsDataContainer SonarGitblitNexus
Dockerfile ENV JENKINS_HOME /var/JenkinsData Docker commands docker.io run -v /var/JenkinsData –name JenkinsDataContainer ubuntu:saucy true docker.io run -p 8080: volumes-from JenkinsDataContainer -d Jenkins
# docker.io images --tree └─ 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
real4m11.729s user0m3.329s sys0m10.054s
Creating the Docker registry docker run -p 5000:5000 registry
Modify container Commit docker.io commit 064f :5000/test-version-0.2 New containerid -> ff7e Push docker.io push :5000/test-version-0.2
Pull docker.io pull :5000/ test-version-0.2 Run docker.io run -i -t ff7e /bin/bash View the changed container
docker images -tree └─153b MB test-version-0.1:latest docker pull :5000/test- version-0.2 ff7e: Download complete 153b: Download complete docker images -tree └─153b MB test-version-0.1:latest └─ff7e MB test-version-0.2:latest
Simple to use Really popular Used in many organizations Regular updates Big community creating plugins etc. Most developers already use it
Continuous delivery Continuous deployment
“Life is really simple, but we insist on making it complicated.” - Confucius
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