docker for java developers at javaland
TRANSCRIPT
![Page 1: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/1.jpg)
Continuous delivery with Docker
Run everything in Docker containersJohan Janssen, Info Support, @johanjanssen42
![Page 2: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/2.jpg)
![Page 3: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/3.jpg)
Docker
![Page 4: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/4.jpg)
Transportation issue
![Page 5: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/5.jpg)
Transportation solution
![Page 6: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/6.jpg)
Software issue
![Page 7: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/7.jpg)
Software solution
![Page 8: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/8.jpg)
Docker compatibility
![Page 9: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/9.jpg)
Why Docker To enable continuous delivery Quickly provision environments Run the same software local and in
the cloud
![Page 10: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/10.jpg)
Docker vs Virtual Machines
![Page 11: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/11.jpg)
Docker vs Virtual Machines Disk space efficiency Memory efficiency Speed Compatibility (run anywhere) Isolation Versioning Internet of Things (Raspberry Pi
etc.)
![Page 12: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/12.jpg)
My first Docker container
docker run -i -t ubuntu:yakkety /bin/bash
![Page 13: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/13.jpg)
Docker usecases
DTAP environment
Build environment
Mainly running non-GUI applications
Continuous delivery, testing etc.
Development !
![Page 14: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/14.jpg)
Application and CD pipeline in Docker
![Page 15: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/15.jpg)
Deployment pipeline
Version control
CompileQuality checks
TestingDeployments
DevOps End users
EtceteraSetup environment
![Page 16: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/16.jpg)
Automatic versus manual deployment
Continuous delivery
Continuous deployment
![Page 17: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/17.jpg)
Deployment pipeline
![Page 18: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/18.jpg)
Example build pipeline
TAP
D
1
2
3 4
678
9
5
![Page 19: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/19.jpg)
What to deliver?
![Page 20: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/20.jpg)
Dockerfiles directory structure Main directory
BuildAndRunScript.sh GeneralBase
Dockerfile SonarQube
Dockerfile
![Page 21: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/21.jpg)
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
![Page 22: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/22.jpg)
Build Create the Dockerfile Build the containers:
<optional>cd GeneralBasedocker.io build -t GeneralBase . cd .. </optional>
![Page 23: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/23.jpg)
![Page 24: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/24.jpg)
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"]
![Page 25: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/25.jpg)
Build Create the Dockerfile Build the containers:
cd SonarQubedocker.io build -t SonarQube .
![Page 26: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/26.jpg)
Run
Start the containerdocker.io run -p 9000:9000
–p 9092:9092 -d SonarQube
![Page 27: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/27.jpg)
List all in(active) containers# docker.io ps –aCONTAINER 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
![Page 28: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/28.jpg)
Controlling containers
Start / stop / restartdocker [start/stop/restart] containerid
Follow SystemOut and SystemErrdocker logs -f containerid
![Page 29: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/29.jpg)
We need lots of Docker containersGeneralBa
se
AppServerBase
Environment D
Environment T
Environment A
Environment P
Jenkins
JenkinsDataContainer
Sonar Gitblit Nexus
![Page 30: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/30.jpg)
![Page 31: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/31.jpg)
Data storage In the same container as the application In a data container / data volume On the host
![Page 32: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/32.jpg)
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
![Page 33: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/33.jpg)
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
![Page 34: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/34.jpg)
Execution time
real 4m11.729suser 0m3.329s sys 0m10.054s
![Page 35: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/35.jpg)
Docker overview
![Page 36: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/36.jpg)
One ring to rule them all
![Page 37: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/37.jpg)
Docker registry
Creating the Docker registrydocker run -p 5000:5000 registry
![Page 38: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/38.jpg)
Updating containers
![Page 39: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/39.jpg)
Docker client 1 (push) Modify container 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
![Page 40: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/40.jpg)
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
![Page 41: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/41.jpg)
Pull update onlydocker 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
![Page 42: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/42.jpg)
Development environment
![Page 43: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/43.jpg)
![Page 44: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/44.jpg)
![Page 45: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/45.jpg)
![Page 46: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/46.jpg)
![Page 47: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/47.jpg)
![Page 48: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/48.jpg)
Dockerfile
FROM java:8-jdk
RUN wget …/netbeans-8.0.2-linux.shRUN chmod +x netbeans*.shRUN sh netbeans*.sh --silent
CMD /usr/local/netbeans-8.0.2/bin/netbeans
![Page 49: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/49.jpg)
Persisting data on host
Docker run command: -v $PWD/workspace:/workspace
![Page 50: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/50.jpg)
What to persist?
Workspace Plugins Application in application server Maven repo Configuration Entire home folder??
![Page 51: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/51.jpg)
Different options
![Page 52: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/52.jpg)
Eclipse Che“Eclipse Che is an IDE and developer workspace server that allows anyone to contribute to a project without having to install software.”
![Page 53: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/53.jpg)
Used by multiple teams
Team Frodo image
Base image
Team Bilbo image
![Page 54: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/54.jpg)
Used by multiple teams
• App Gimli• App Elrond
Team Frodo
• App ElrondTeam Bilbo
• App RadagastTeam
Galadriel
App means
application server
etc.
![Page 55: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/55.jpg)
Used by multiple teams
Where do we place
the Elrond App?
• App Gimli• App Elrond
Team Frodo
• App ElrondTeam Bilbo
• App RadagastTeam
Galadriel
![Page 56: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/56.jpg)
Splitting the container
TomcatImage
Gimli Elrond Radagast
![Page 57: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/57.jpg)
Splitting the container
FedoraImage
Development
environment
![Page 58: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/58.jpg)
Docker Compose
![Page 59: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/59.jpg)
Docker Compose
Define and run multi container Docker applications Using a Compose file Link containers ‘docker-compose up’ to start the
containers
![Page 60: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/60.jpg)
Directory structure TomcatGimli
DockerFile TomcatElrond
DockerFile TomcatRadagast
Dockerfile DevEnv
Dockerfile docker-compose.yml
![Page 61: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/61.jpg)
tomcatgimli: build: TomcatGimli
tomcatelrond: build: TomcatElrond
tomcatradagast: build: TomcatRadagast
developmentenvironment: build: DevEnv ports: - "3389:3389" links: - tomcatgimli:gimli # Makes gimli available on # http://gimli:8080 - tomcatelrond:elrond - tomcatradagast:radagast
![Page 62: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/62.jpg)
Environment specific configuration
Use docker-compose.override.yml Put all the configuration in one container Create small containers with configuration
per environment that inherit the application container Commandline arguments
![Page 63: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/63.jpg)
Conclusion Use a (private) Docker registry 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 Inherit and/or compose containers Separate concerns in separate
containers
![Page 64: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/64.jpg)
Isolation
![Page 65: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/65.jpg)
Isolation
![Page 66: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/66.jpg)
Isolation
![Page 67: Docker for Java developers at JavaLand](https://reader035.vdocuments.site/reader035/viewer/2022062900/58ecd5411a28ab52448b4701/html5/thumbnails/67.jpg)
Isolation