650 likes | 817 Views
Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud. Johan Janssen, Info Support. Content. Continuous delivery Docker Jenkins Questions. Continuous Delivery. Automate everything Software quality Continuous improvement Regular deployments
E N D
Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud Johan Janssen, Info Support
Content • Continuous delivery • Docker • Jenkins • Questions
Continuous Delivery • Automate everything • Software quality • Continuous improvement • Regular deployments • Anyone can deploy
Deployment pipeline Setup environment Quality checks Version control Compile Testing Deployments Etcetera DevOps End users
Focus of this presentation • Automate environment provisioning • Automate application deployment
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
Docker activity • Since March 2013 • 8741 commits in 15 months • More than 460 570 contributors • Downloaded 2.75 13 million times • More than 14000 30000 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
My first Docker container • Docker on Ubuntu 14.04 apt-get install docker.io docker.io run -i -t ubuntu:saucy /bin/bash
Dockerfiles directory structure • Main directory • BuildAndRunScript.sh • GeneralBase • Dockerfile • Sonar • Dockerfile
DockerfileGeneralBase 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
Dockerfile Sonar FROM GeneralBase RUN apt-get install -y wget unzip RUN wget http://dist.sonar.codehaus.org/sonarqube-4.2.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"]
Build • Create the Dockerfiles • Build the containers: <optional>cd GeneralBase docker.io build -t GeneralBase . cd .. </optional> cd Sonar docker.io build -t Sonar .
Run • Start the container docker.io run -p 9000:9000 –p 9092:9092 -d Sonar
List all in(active) containers # docker.io ps –a CONTAINER ID: ecbecf77461b CREATED: 32 minutes ago STATUS: Up 32 minutes PORTS: 0.0.0.0:9000->9000/tcp, 0.0.0.0:9092->9092/tcp
Controlling containers • Start / stop / restart docker [start/stop/restart] containerid • Follow SystemOut and SystemErr docker logs -f containerid
Controlling containers • Show (running) containers dockerps –a • Show processes running in container docker top containerid • Show changes in the container docker diff containerid
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)
Data volumes • Dockerfile ENV JENKINS_HOME /var/JenkinsData • Docker commands docker.io run -v /var/JenkinsData –name JenkinsDataContainerubuntu: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.729s user 0m3.329s sys 0m10.054s
Docker registry • Creating the Docker registry docker run -p 5000:5000 registry
Docker client 1 (push) • Modify container • Commit docker.io commit 064f 192.168.56.31:5000/test-version-0.2 • New containerid -> ff7e • Push docker.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 • Run docker.io run -i -t ff7e /bin/bash • View the changed container
Pull update only docker images -tree └─153b 194.2 MB test-version-0.1:latest docker pull 192.168.56.31:5000/test-version-0.2 ff7e: Download complete 153b: Download complete docker images -tree └─153b 194.2 MB test-version-0.1:latest └─ff7e 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 developers already use it
Example build pipeline 1 2 5 D 6 7 T 8 4 A 3 9 P