Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan...

Post on 02-Jul-2015

249 views 0 download

description

Docker is een extreem populair en relatief nieuw open source project waarmee containers gemaakt kunnen worden van (bijna alle) applicaties. Een container gebaseerd op Ubuntu met Glassfish en je favoriete applicatie is een van de vele mogelijkheden. Het grootste voordeel is dat Docker containers draaien op (alle) Linux distributies. Dit betekend dat dezelfde container lokaal gebruikt kan worden voor ontwikkeling en in de cloud gebruikt kan worden voor klanten. Docker wordt al gebruikt door grote bedrijven als Ebay en Spotify en ook Google ondersteund het actief. Deze presentatie zal de voordelen van Docker en de best practices behandelen. Tevens zal ik demonstreren hoe Docker werkt zodat je na deze sessie zelf met Docker aan de slag kan.

Transcript of Gebruik dezelfde Docker container voor Java applicaties tijdens ontwikkelen en in de cloud - Johan...

Johan Janssen, Info Support

Continuous delivery

Docker

Jenkins

Questions

Automate everything

Software quality

Continuous improvement

Regular deployments

Anyone can deploy

DevOps End users

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 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

Docker on Ubuntu 14.04

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 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"]

Create the Dockerfiles

Build the containers:

<optional>cd GeneralBase

docker.io build -t GeneralBase .

cd .. </optional>

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: 0.0.0.0:9000->9000/tcp, 0.0.0.0: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

Sonar Gitblit Nexus

Dockerfile

ENV JENKINS_HOME /var/JenkinsData

Docker commands

docker.io run -v /var/JenkinsData –name

JenkinsDataContainer ubuntu:saucy true

docker.io run -p 8080:8080 --volumes-from

JenkinsDataContainer -d Jenkins

# 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

real 4m11.729s

user 0m3.329s

sys 0m10.054s

Creating the Docker registry

docker run -p 5000:5000 registry

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

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

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 complete153b: Download complete

docker images -tree└─153b 194.2 MB test-version-0.1:latest

└─ff7e 194.2 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

1

2

34

6

7

8

9

5

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

johan.janssen@infosupport.com

http://blogs.infosupport.com/author/johanj/