├── .gitignore
├── Basics
└── Docker-Basic-Commands
├── Usecase-1
├── Dockerfile
├── httpd.conf
├── pictolearn-sample
│ ├── apple-touch-icon.png
│ ├── browserconfig.xml
│ ├── css
│ │ ├── bootstrap-theme.css
│ │ ├── bootstrap-theme.css.map
│ │ ├── bootstrap-theme.min.css
│ │ ├── bootstrap.css
│ │ ├── bootstrap.css.map
│ │ ├── bootstrap.min.css
│ │ └── main.css
│ ├── favicon.ico
│ ├── fonts
│ │ ├── glyphicons-halflings-regular.eot
│ │ ├── glyphicons-halflings-regular.svg
│ │ ├── glyphicons-halflings-regular.ttf
│ │ └── glyphicons-halflings-regular.woff
│ ├── index.html
│ ├── js
│ │ ├── main.js
│ │ └── vendor
│ │ │ ├── bootstrap.js
│ │ │ ├── bootstrap.min.js
│ │ │ ├── jquery-1.11.2.min.js
│ │ │ ├── modernizr-2.8.3-respond-1.4.2.min.js
│ │ │ └── npm.js
│ ├── tile-wide.png
│ └── tile.png
└── scripts.txt
├── Usecase-10
└── docker-compose-spring-boot
│ ├── build.sh
│ ├── docker-compose.yml
│ ├── pictolearn-dispatcher
│ ├── .classpath
│ ├── .project
│ ├── .settings
│ │ ├── .jsdtscope
│ │ ├── org.eclipse.jdt.core.prefs
│ │ ├── org.eclipse.m2e.core.prefs
│ │ ├── org.eclipse.wst.common.component
│ │ ├── org.eclipse.wst.common.project.facet.core.xml
│ │ ├── org.eclipse.wst.jsdt.ui.superType.container
│ │ ├── org.eclipse.wst.jsdt.ui.superType.name
│ │ └── org.eclipse.wst.validation.prefs
│ ├── Dockerfile
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ ├── java
│ │ └── org
│ │ │ └── pictolearn
│ │ │ └── docker
│ │ │ ├── filter
│ │ │ └── ProxyFilter.java
│ │ │ └── servlet
│ │ │ └── ProxyServlet.java
│ │ ├── main.iml
│ │ ├── resources
│ │ └── log4j.properties
│ │ └── webapp
│ │ └── WEB-INF
│ │ └── web.xml
│ ├── pictolearn-web
│ ├── .classpath
│ ├── .project
│ ├── .settings
│ │ ├── org.eclipse.core.resources.prefs
│ │ ├── org.eclipse.jdt.core.prefs
│ │ └── org.eclipse.m2e.core.prefs
│ ├── Dockerfile
│ ├── pom.xml
│ ├── scripts
│ │ ├── post.json
│ │ ├── test.txt
│ │ └── util.sql
│ └── src
│ │ └── main
│ │ ├── java
│ │ └── org
│ │ │ └── pictolearn
│ │ │ └── docker
│ │ │ ├── Application.java
│ │ │ ├── controller
│ │ │ └── UserController.java
│ │ │ ├── dao
│ │ │ ├── DatabaseConfig.java
│ │ │ └── UserDao.java
│ │ │ └── model
│ │ │ └── User.java
│ │ ├── main3.iml
│ │ └── resources
│ │ ├── application.properties
│ │ └── log4j2.xml
│ ├── scripts.txt
│ └── testscripts
│ ├── addUser.json
│ ├── addUser.sh
│ ├── findUserById.sh
│ ├── updateUser.json
│ └── updateUserByEmail.sh
├── Usecase-2
├── Dockerfile
├── default.conf
├── pictolearn-sample
│ ├── apple-touch-icon.png
│ ├── browserconfig.xml
│ ├── css
│ │ ├── bootstrap-theme.css
│ │ ├── bootstrap-theme.css.map
│ │ ├── bootstrap-theme.min.css
│ │ ├── bootstrap.css
│ │ ├── bootstrap.css.map
│ │ ├── bootstrap.min.css
│ │ └── main.css
│ ├── favicon.ico
│ ├── fonts
│ │ ├── glyphicons-halflings-regular.eot
│ │ ├── glyphicons-halflings-regular.svg
│ │ ├── glyphicons-halflings-regular.ttf
│ │ └── glyphicons-halflings-regular.woff
│ ├── index.html
│ ├── js
│ │ ├── main.js
│ │ └── vendor
│ │ │ ├── bootstrap.js
│ │ │ ├── bootstrap.min.js
│ │ │ ├── jquery-1.11.2.min.js
│ │ │ ├── modernizr-2.8.3-respond-1.4.2.min.js
│ │ │ └── npm.js
│ ├── tile-wide.png
│ └── tile.png
├── readme
└── scripts.txt
├── Usecase-3
├── docker-git-hello-world
│ ├── .classpath
│ ├── .gitignore
│ ├── .project
│ ├── .settings
│ │ ├── org.eclipse.core.resources.prefs
│ │ ├── org.eclipse.jdt.core.prefs
│ │ └── org.eclipse.m2e.core.prefs
│ ├── Dockerfile
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ ├── java
│ │ └── org
│ │ │ └── pictolearn
│ │ │ └── docker
│ │ │ └── HelloWorldPing.java
│ │ └── main4.iml
├── readme
└── scripts.txt
├── Usecase-4
├── Dockerfile
├── docker-spring-mvc.war
├── docker-spring-mvc
│ ├── .classpath
│ ├── .project
│ ├── .settings
│ │ ├── .jsdtscope
│ │ ├── org.eclipse.jdt.apt.core.prefs
│ │ ├── org.eclipse.jdt.core.prefs
│ │ ├── org.eclipse.ltk.core.refactoring.prefs
│ │ ├── org.eclipse.m2e.core.prefs
│ │ ├── org.eclipse.wst.common.component
│ │ ├── org.eclipse.wst.common.project.facet.core.xml
│ │ ├── org.eclipse.wst.jsdt.ui.superType.container
│ │ ├── org.eclipse.wst.jsdt.ui.superType.name
│ │ ├── org.eclipse.wst.validation.prefs
│ │ └── org.springframework.ide.eclipse.core.prefs
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ ├── java
│ │ └── org
│ │ │ └── pictolearn
│ │ │ └── springmvc
│ │ │ └── DockerController.java
│ │ ├── main2.iml
│ │ └── webapp
│ │ ├── WEB-INF
│ │ ├── spring-servlet.xml
│ │ ├── views
│ │ │ └── welcome.jsp
│ │ └── web.xml
│ │ ├── index.jsp
│ │ └── resources
│ │ ├── apple-touch-icon.png
│ │ ├── browserconfig.xml
│ │ ├── css
│ │ ├── bootstrap-theme.css
│ │ ├── bootstrap-theme.css.map
│ │ ├── bootstrap-theme.min.css
│ │ ├── bootstrap.css
│ │ ├── bootstrap.css.map
│ │ ├── bootstrap.min.css
│ │ └── main.css
│ │ ├── favicon.ico
│ │ ├── fonts
│ │ ├── glyphicons-halflings-regular.eot
│ │ ├── glyphicons-halflings-regular.svg
│ │ ├── glyphicons-halflings-regular.ttf
│ │ └── glyphicons-halflings-regular.woff
│ │ ├── js
│ │ ├── main.js
│ │ └── vendor
│ │ │ ├── bootstrap.js
│ │ │ ├── bootstrap.min.js
│ │ │ ├── jquery-1.11.2.min.js
│ │ │ ├── modernizr-2.8.3-respond-1.4.2.min.js
│ │ │ └── npm.js
│ │ ├── tile-wide.png
│ │ └── tile.png
├── readme
└── scripts.txt
├── Usecase-5
├── readme
├── tomcat7-jdk7
│ ├── Dockerfile
│ └── scripts.txt
└── tomcat8-jdk8
│ ├── Dockerfile
│ └── scripts.txt
├── Usecase-6
├── Dockerfile
├── docker-spring-mvc.war
├── readme
├── scripts.txt
└── supervisord.conf
├── Usecase-7
├── Dockerfile
├── docker-spring-mvc.war
├── readme
└── scripts.txt
├── Usecase-8
├── docker-compose-mysql
│ ├── docker-compose.yml
│ ├── docker-mysql-connector
│ │ ├── .classpath
│ │ ├── .project
│ │ ├── .settings
│ │ │ ├── org.eclipse.core.resources.prefs
│ │ │ ├── org.eclipse.jdt.apt.core.prefs
│ │ │ ├── org.eclipse.jdt.core.prefs
│ │ │ └── org.eclipse.m2e.core.prefs
│ │ ├── Dockerfile
│ │ ├── pom.xml
│ │ └── src
│ │ │ └── main
│ │ │ ├── java
│ │ │ └── org
│ │ │ │ └── pictolearn
│ │ │ │ └── docker
│ │ │ │ └── mysql
│ │ │ │ └── MySQLConnection.java
│ │ │ └── main1.iml
│ └── ubuntu-jdk8
│ │ └── Dockerfile
├── readme
└── scripts.txt
├── Usecase-9
├── docker-compose-spring-boot
│ ├── docker-compose.yml
│ └── pictolearn-docker
│ │ ├── .classpath
│ │ ├── .project
│ │ ├── .settings
│ │ ├── org.eclipse.core.resources.prefs
│ │ ├── org.eclipse.jdt.core.prefs
│ │ └── org.eclipse.m2e.core.prefs
│ │ ├── Dockerfile
│ │ ├── pom.xml
│ │ ├── scripts
│ │ ├── post.json
│ │ ├── test.txt
│ │ └── util.sql
│ │ └── src
│ │ └── main
│ │ ├── java
│ │ └── org
│ │ │ └── pictolearn
│ │ │ └── docker
│ │ │ ├── Application.java
│ │ │ ├── controller
│ │ │ └── UserController.java
│ │ │ ├── dao
│ │ │ ├── DatabaseConfig.java
│ │ │ └── UserDao.java
│ │ │ └── model
│ │ │ └── User.java
│ │ ├── main5.iml
│ │ └── resources
│ │ ├── application.properties
│ │ └── log4j2.xml
├── readme
└── scripts.txt
├── readme
└── resources
├── install-scripts
├── MAC
│ └── uninstallDocker.sh
└── ubuntu
│ ├── installDocker.sh
│ ├── postInstallDocker.sh
│ ├── preInstallDocker.sh
│ ├── uninstallDocker.sh
│ └── upgradeDocker.sh
└── scripts.txt
/.gitignore:
--------------------------------------------------------------------------------
1 | target/
2 | *.log
3 | logs/
4 | .idea/
5 | .classpath
6 | .class
7 | .settings/
8 |
--------------------------------------------------------------------------------
/Basics/Docker-Basic-Commands:
--------------------------------------------------------------------------------
1 | # Once you install docker, try the following command
2 | # This should output the version of docker
3 | $ docker version
4 |
5 |
6 | $docker info
--------------------------------------------------------------------------------
/Usecase-1/Dockerfile:
--------------------------------------------------------------------------------
1 | # Updated as of Aug 16, 2017
2 | # FROM specified which image i want to download
3 | # Needs to be provided before any other section of code.
4 | FROM httpd:latest
5 |
6 | #Author of the Docker File
7 | # MAINTAINER Pictolearn Note: MAINTAINER has been deprecated for LABEL,
8 | # LABEL is a key value pair
9 | LABEL "Maintainer"="Pictolearn"
10 |
11 | # Copy the following directory
12 | COPY pictolearn-sample/ /usr/local/apache2/htdocs/pictolearn
13 |
14 | # Copy httpd.conf with changes to the root directory
15 | COPY httpd.conf /usr/local/apache2/conf
--------------------------------------------------------------------------------
/Usecase-1/pictolearn-sample/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pictolearn/docker-tutorial/875ddd62c7c4e8739962efb41dba88ea2e9d9591/Usecase-1/pictolearn-sample/apple-touch-icon.png
--------------------------------------------------------------------------------
/Usecase-1/pictolearn-sample/browserconfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/Usecase-1/pictolearn-sample/css/bootstrap-theme.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v3.3.1 (http://getbootstrap.com)
3 | * Copyright 2011-2014 Twitter, Inc.
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 | */.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-default .badge,.btn-primary .badge,.btn-success .badge,.btn-info .badge,.btn-warning .badge,.btn-danger .badge{text-shadow:none}.btn:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default:disabled,.btn-default[disabled]{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:hover,.btn-primary:focus{background-color:#265a88;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#265a88;border-color:#245580}.btn-primary:disabled,.btn-primary[disabled]{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-success:disabled,.btn-success[disabled]{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-info:disabled,.btn-info[disabled]{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-warning:disabled,.btn-warning[disabled]{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-danger:disabled,.btn-danger[disabled]{background-color:#c12e2a;background-image:none}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:hover .badge,.list-group-item.active:focus .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}
--------------------------------------------------------------------------------
/Usecase-1/pictolearn-sample/css/main.css:
--------------------------------------------------------------------------------
1 |
2 |
3 | /* ==========================================================================
4 | Author's custom styles
5 | ========================================================================== */
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/Usecase-1/pictolearn-sample/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pictolearn/docker-tutorial/875ddd62c7c4e8739962efb41dba88ea2e9d9591/Usecase-1/pictolearn-sample/favicon.ico
--------------------------------------------------------------------------------
/Usecase-1/pictolearn-sample/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pictolearn/docker-tutorial/875ddd62c7c4e8739962efb41dba88ea2e9d9591/Usecase-1/pictolearn-sample/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/Usecase-1/pictolearn-sample/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pictolearn/docker-tutorial/875ddd62c7c4e8739962efb41dba88ea2e9d9591/Usecase-1/pictolearn-sample/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/Usecase-1/pictolearn-sample/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pictolearn/docker-tutorial/875ddd62c7c4e8739962efb41dba88ea2e9d9591/Usecase-1/pictolearn-sample/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/Usecase-1/pictolearn-sample/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
30 |
43 |
44 |
45 |
46 |
47 |
Hello, Docker!
48 |
This is running on Apache Http Server Docker image.
49 |
Learn more »
50 |
51 |
52 |
53 |
54 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
73 |
74 |
75 |
--------------------------------------------------------------------------------
/Usecase-1/pictolearn-sample/js/main.js:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Usecase-1/pictolearn-sample/js/vendor/npm.js:
--------------------------------------------------------------------------------
1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
2 | require('../../js/transition.js')
3 | require('../../js/alert.js')
4 | require('../../js/button.js')
5 | require('../../js/carousel.js')
6 | require('../../js/collapse.js')
7 | require('../../js/dropdown.js')
8 | require('../../js/modal.js')
9 | require('../../js/tooltip.js')
10 | require('../../js/popover.js')
11 | require('../../js/scrollspy.js')
12 | require('../../js/tab.js')
13 | require('../../js/affix.js')
--------------------------------------------------------------------------------
/Usecase-1/pictolearn-sample/tile-wide.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pictolearn/docker-tutorial/875ddd62c7c4e8739962efb41dba88ea2e9d9591/Usecase-1/pictolearn-sample/tile-wide.png
--------------------------------------------------------------------------------
/Usecase-1/pictolearn-sample/tile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pictolearn/docker-tutorial/875ddd62c7c4e8739962efb41dba88ea2e9d9591/Usecase-1/pictolearn-sample/tile.png
--------------------------------------------------------------------------------
/Usecase-1/scripts.txt:
--------------------------------------------------------------------------------
1 |
2 | #Step 1: Building an image
3 | #Syntax: docker build -t
4 | -------------------------------------------------------------------
5 | docker build -t my-httpd .
6 |
7 | #Step 2: List all the images
8 | #Syntax: docker images
9 | -------------------------------------------------------------------
10 | docker images
11 |
12 | #Step 3: Inspect the Image
13 | ------------------------------------------------------------------
14 | docker inspect
15 |
16 | #Step 4: Running a container from the image
17 | #Syntax: docker run -itd --name -p : image-name:tag
18 | # note in the above syntax:
19 | # -d : represents (detached mode), note that if you dont run this in detached mode, the life of the container will be the life of the terminal in which you are executing it.
20 | # -p : represents the host-port to container-port mapping, if you substitute it with -P you will get a random port allocated by docker
21 | # --name : represents the name of the container
22 | -------------------------------------------------------------------
23 | docker run -itd --name my-http-container-1 -p 5555:80 my-httpd:latest
24 | docker run -itd --name my-http-container-2 -p 5556:80 my-httpd:latest
25 | docker run -itd --name my-http-container-with-random-port -P my-httpd:latest
26 |
27 | #note if you run this it will NOT run in detached mode.
28 | docker run -it --name my-http-container-not-detached-mode -p 5557:80 my-httpd:latest
29 |
30 | Step 5: View all the containers
31 | -------------------------------------------------------------------
32 | # Shows all the containers which are running
33 | docker ps
34 |
35 | #Shows all the containers stopped and running
36 | docker ps -a
37 |
38 | Step 6: Inspect the container and image
39 | -------------------------------------------------------------------
40 | docker inspect
41 |
42 | Step 7: View Container logs
43 | -------------------------------------------------------------------
44 |
45 | # View the logs of the container
46 | docker logs
47 |
48 | # Tail the logs of the container
49 | docker logs -ft
50 |
51 | Step 8: Stop the container
52 | -------------------------------------------------------------------
53 | docker stop
54 |
55 | Step 9: Stop the container
56 | -------------------------------------------------------------------
57 | docker start
58 |
59 | Step 10: Logging into the container
60 | -------------------------------------------------------------------
61 | #Note: The container must be started before we can do this.
62 | docker exec -it /bin/bash
63 |
64 | Step 11: Remove all the containers and images
65 | -------------------------------------------------------------------
66 | #Note: To remove an image the corresponding container built from that image will need to be removed.
67 |
68 | #Remove a specific container
69 | docker rm
70 |
71 | #Remove all containers
72 | docker rm $(docker ps -a -q)
73 |
74 | # remove image (note: no containers for this image should be running)
75 | docker rmi
76 |
77 | # remove all images
78 | docker rmi $(docker images -q)
79 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/build.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # Run mvn clean package
3 |
4 | cd pictolearn-web
5 | mvn clean package
6 | cd ../pictolearn-dispatcher
7 | mvn clean package
8 | cd ..
9 |
10 | # stops and removes all the containers
11 | docker-compose down
12 |
13 | # stops and removes the images created
14 | docker rmi pictolearn-dispatcher
15 | docker rmi pictolearn-web
16 |
17 | #Builds a new image
18 | docker-compose build
19 |
20 | #Deploys the container.
21 | docker-compose up -d
22 | #docker rmi $(docker images | grep "^" | awk "{print $3}")
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '3.1'
2 | services:
3 | mysql:
4 | image: mysql:5.7.22
5 | ports: ["8888:3306"]
6 | hostname: mysql
7 | environment:
8 | - MYSQL_ROOT_PASSWORD=root
9 | - MYSQL_DATABASE=Users
10 | web:
11 | build: pictolearn-web
12 | image: pictolearn-web
13 | # ports: ["5555:8080"]
14 | hostname: web
15 | tty: true
16 | depends_on:
17 | - mysql
18 | links:
19 | - mysql
20 | environment:
21 | - DB_PORT=tcp://mysql:3306
22 | dispatcher:
23 | build: pictolearn-dispatcher
24 | image: pictolearn-dispatcher
25 | ports: ["1111:8080"]
26 | hostname: dispatcher
27 | tty: true
28 | environment:
29 | - CATALINE_BASE=/opt/tomcat
30 | - CATALINE_HOME=/opt/tomcat
31 | depends_on:
32 | - web
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-dispatcher/.classpath:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-dispatcher/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | pictolearn-dispatcher
4 |
5 |
6 |
7 |
8 |
9 | org.eclipse.wst.jsdt.core.javascriptValidator
10 |
11 |
12 |
13 |
14 | org.eclipse.jdt.core.javabuilder
15 |
16 |
17 |
18 |
19 | org.eclipse.wst.common.project.facet.core.builder
20 |
21 |
22 |
23 |
24 | org.eclipse.wst.validation.validationbuilder
25 |
26 |
27 |
28 |
29 | org.eclipse.m2e.core.maven2Builder
30 |
31 |
32 |
33 |
34 |
35 | org.eclipse.jem.workbench.JavaEMFNature
36 | org.eclipse.wst.common.modulecore.ModuleCoreNature
37 | org.eclipse.jdt.core.javanature
38 | org.eclipse.m2e.core.maven2Nature
39 | org.eclipse.wst.common.project.facet.core.nature
40 | org.eclipse.wst.jsdt.core.jsNature
41 |
42 |
43 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-dispatcher/.settings/.jsdtscope:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-dispatcher/.settings/org.eclipse.jdt.core.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
4 | org.eclipse.jdt.core.compiler.compliance=1.7
5 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
6 | org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
7 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
8 | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
9 | org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
10 | org.eclipse.jdt.core.compiler.release=disabled
11 | org.eclipse.jdt.core.compiler.source=1.7
12 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-dispatcher/.settings/org.eclipse.m2e.core.prefs:
--------------------------------------------------------------------------------
1 | activeProfiles=
2 | eclipse.preferences.version=1
3 | resolveWorkspaceProjects=true
4 | version=1
5 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-dispatcher/.settings/org.eclipse.wst.common.component:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-dispatcher/.settings/org.eclipse.wst.common.project.facet.core.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-dispatcher/.settings/org.eclipse.wst.jsdt.ui.superType.container:
--------------------------------------------------------------------------------
1 | org.eclipse.wst.jsdt.launching.baseBrowserLibrary
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-dispatcher/.settings/org.eclipse.wst.jsdt.ui.superType.name:
--------------------------------------------------------------------------------
1 | Window
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-dispatcher/.settings/org.eclipse.wst.validation.prefs:
--------------------------------------------------------------------------------
1 | disabled=06target
2 | eclipse.preferences.version=1
3 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-dispatcher/Dockerfile:
--------------------------------------------------------------------------------
1 | # This file is used to create a docker image.
2 | FROM pictolearn/tomcat8-jdk8
3 |
4 | #Author of the file
5 | MAINTAINER pictolearn
6 |
7 | #install maven for debugging
8 | RUN apt-get -y install maven lsof
9 |
10 | #Set Catalina HOME and JAVA_OPTS
11 | ENV CATALINA_BASE /opt/tomcat
12 | ENV CATALINA_HOME /opt/tomcat
13 | ENV PATH $PATH:$CATALINA_HOME/bin
14 | ENV JAVA_OPTS="-Xms1024m -Xmx1024m -Xss8192k -XX:PermSize=500m -XX:CMSInitiatingOccupancyFraction=50 -XX:+ExplicitGCInvokesConcurrent -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:NewRatio=1 -XX:SurvivorRatio=1 -Dorg.apache.cxf.JDKBugHacks.imageIO=false"
15 |
16 | #Expose this a port to the host machine.
17 | EXPOSE 8080
18 | EXPOSE 8009
19 |
20 | #The WORKDIR instruction sets the working directory for any RUN, CMD, ENTRYPOINT, COPY and ADD instructions that follow it in the Dockerfile.
21 | WORKDIR /opt/tomcat
22 |
23 |
24 | # add the directory to the path
25 | ADD . /usr/local/pictolearn
26 |
27 | RUN mkdir -p /usr/local/pictolearn/logs
28 |
29 | # Run maven
30 | RUN cd /usr/local/pictolearn && mvn clean package
31 |
32 | # Move the war file to the tomcat folder once it is done.
33 | RUN cp /usr/local/pictolearn/target/pictolearn-dispatcher.war /opt/tomcat/webapps/pictolearn-dispatcher.war
34 |
35 |
36 |
37 | # Launch Tomcat
38 | CMD ["/opt/tomcat/bin/catalina.sh","run"]
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-dispatcher/pom.xml:
--------------------------------------------------------------------------------
1 |
3 | 4.0.0
4 | pictolearn-dispatcher
5 | pictolearn-dispatcher
6 | war
7 | 0.0.1-SNAPSHOT
8 | docker-compose-dispatcher Maven Webapp
9 | http://maven.apache.org
10 |
11 |
12 |
13 | org.apache.commons
14 | commons-lang3
15 | 3.5
16 |
17 |
18 |
19 |
20 | org.apache.commons
21 | commons-collections4
22 | 4.1
23 |
24 |
25 |
26 |
27 |
28 | org.slf4j
29 | slf4j-api
30 | 1.7.21
31 |
32 |
33 |
34 |
35 | org.slf4j
36 | jul-to-slf4j
37 | 1.7.21
38 |
39 |
40 |
41 | org.slf4j
42 | slf4j-log4j12
43 | 1.7.21
44 |
45 |
46 |
47 | javax.servlet
48 | javax.servlet-api
49 | 3.0.1
50 | provided
51 |
52 |
53 |
54 | pictolearn-dispatcher
55 | src
56 |
57 |
58 | maven-compiler-plugin
59 | 3.1
60 |
61 | 1.7
62 | 1.7
63 |
64 |
65 |
66 | maven-war-plugin
67 | 2.4
68 |
69 | WebContent
70 | false
71 |
72 |
73 |
74 |
75 |
76 |
77 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-dispatcher/src/main/java/org/pictolearn/docker/filter/ProxyFilter.java:
--------------------------------------------------------------------------------
1 | package org.pictolearn.docker.filter;
2 |
3 | import java.io.IOException;
4 |
5 | import javax.servlet.Filter;
6 | import javax.servlet.FilterChain;
7 | import javax.servlet.FilterConfig;
8 | import javax.servlet.ServletException;
9 | import javax.servlet.ServletRequest;
10 | import javax.servlet.ServletResponse;
11 | import javax.servlet.annotation.WebFilter;
12 | import javax.servlet.http.HttpServletRequest;
13 |
14 | import org.slf4j.Logger;
15 | import org.slf4j.LoggerFactory;
16 |
17 | @WebFilter(filterName="proxyFilter")
18 | /**
19 | * This proxy filter forwards the request to a Proxy Servlet
20 | * with the URI
21 | * @author agane
22 | *
23 | */
24 | public class ProxyFilter implements Filter {
25 |
26 | private static final Logger logger = LoggerFactory.getLogger(ProxyFilter.class);
27 |
28 |
29 | public void destroy() {
30 | }
31 |
32 | public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
33 | throws IOException, ServletException {
34 | logger.debug("Proxy filter");
35 | HttpServletRequest req = (HttpServletRequest) request;
36 | request.setAttribute("uri", req.getRequestURI().substring(req.getContextPath().length()));
37 | request.getRequestDispatcher("/ProxyServlet").forward(request, response);
38 | }
39 |
40 | public void init(FilterConfig arg0) throws ServletException {
41 | }
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-dispatcher/src/main/java/org/pictolearn/docker/servlet/ProxyServlet.java:
--------------------------------------------------------------------------------
1 | package org.pictolearn.docker.servlet;
2 |
3 | import java.io.BufferedReader;
4 | import java.io.IOException;
5 | import java.io.InputStream;
6 | import java.io.InputStreamReader;
7 | import java.io.OutputStream;
8 | import java.io.PrintWriter;
9 | import java.net.HttpURLConnection;
10 | import java.net.InetAddress;
11 | import java.net.ProtocolException;
12 | import java.net.URL;
13 | import java.net.UnknownHostException;
14 | import java.util.ArrayList;
15 | import java.util.Enumeration;
16 | import java.util.HashSet;
17 | import java.util.List;
18 | import java.util.Map;
19 | import java.util.Set;
20 | import java.util.concurrent.ThreadLocalRandom;
21 |
22 | import javax.servlet.ServletException;
23 | import javax.servlet.annotation.WebServlet;
24 | import javax.servlet.http.HttpServlet;
25 | import javax.servlet.http.HttpServletRequest;
26 | import javax.servlet.http.HttpServletResponse;
27 |
28 | import org.apache.commons.collections4.CollectionUtils;
29 | import org.apache.commons.lang3.StringUtils;
30 | import org.slf4j.Logger;
31 | import org.slf4j.LoggerFactory;
32 |
33 | @WebServlet(urlPatterns = "/proxyServlet/*", loadOnStartup = 1)
34 | /**
35 | * Servlet which queries the list of hostnames
36 | * and reverse proxies the request to web layer
37 | *
38 | * @author pictolearn
39 | *
40 | */
41 | public class ProxyServlet extends HttpServlet {
42 |
43 | private static final long serialVersionUID = 2787920473586060865L;
44 |
45 | private static final Logger logger = LoggerFactory.getLogger(ProxyServlet.class);
46 |
47 | /**
48 | * Applies only to GET REQUESTS. The following method picks up a random host with name as "web" as specified
49 | * in the docker-compose file with the service name as "web" when the web container scales up
50 | */
51 | @Override
52 | protected void doGet(HttpServletRequest request, HttpServletResponse response)
53 | throws ServletException, IOException {
54 |
55 | String path = request.getRequestURI().substring(request.getContextPath().length());
56 | path = path.substring(path.indexOf("/proxyServlet/") + "/proxyServlet/".length(), path.length());
57 | logger.debug("Path to query for GET Request: {} ", path);
58 | if (StringUtils.isEmpty(path)) {
59 | response.setContentType("text/html");
60 | PrintWriter out = response.getWriter();
61 | out.println("Invalid GET CALL");
62 | out.close();
63 | return;
64 | }
65 | String ipAddress = getRandomIpAddress(response);
66 |
67 | if(ipAddress == null) {
68 | response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
69 | response.getWriter().println("No Hosts Found");
70 | return;
71 | }
72 |
73 | String url = "http://" + ipAddress + ":8080/" + path;
74 | logger.debug("GET url :{} ", url);
75 |
76 | URL obj = new URL(url);
77 | HttpURLConnection con = (HttpURLConnection) obj.openConnection();
78 | con.setRequestMethod("GET");
79 | response.addHeader("WEB-HOST", ipAddress);
80 | sendResponse(response, con);
81 | }
82 |
83 | /**
84 | * Applies only to POST REQUEST
85 | */
86 | @Override
87 | protected void doPost(HttpServletRequest request, HttpServletResponse response)
88 | throws ServletException, IOException {
89 |
90 | String path = request.getRequestURI().substring(request.getContextPath().length());
91 | path = path.substring(path.indexOf("/proxyServlet/") + "/proxyServlet/".length(), path.length());
92 | logger.debug("Path to query for POST Request: {} ", path);
93 | if (StringUtils.isEmpty(path)) {
94 | response.setContentType("text/html");
95 | PrintWriter out = response.getWriter();
96 | out.println("Invalid POST CALL empty URI");
97 | out.close();
98 | return;
99 | }
100 | String ipAddress = getRandomIpAddress(response);
101 |
102 | if(ipAddress == null) {
103 | response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
104 | response.getWriter().println("No Hosts Found");
105 | return;
106 | }
107 |
108 | response.addHeader("WEB-HOST", ipAddress);
109 | String url = "http://" + ipAddress + ":8080/" + path;
110 |
111 | URL obj = new URL(url);
112 | HttpURLConnection con = (HttpURLConnection) obj.openConnection();
113 | con.setRequestMethod("POST");
114 | logger.debug("POST url :{} ", url);
115 |
116 | Enumeration headerNames = request.getHeaderNames();
117 | Set headers = new HashSet<>();
118 | while (headerNames.hasMoreElements()) {
119 | headers.add(headerNames.nextElement());
120 | }
121 |
122 | if (!CollectionUtils.isEmpty(headers)) {
123 | for (String header : headers) {
124 | String value = request.getHeader(header);
125 | logger.debug("Adding header to the request {} with value {} ", new Object[] { header, value });
126 | con.setRequestProperty(header, value);
127 | }
128 | }
129 |
130 | con.setDoOutput(true);
131 | String body = getBody(request);
132 | logger.debug("Body : {} ", body);
133 | OutputStream wr = con.getOutputStream();
134 | wr.write(body.getBytes("UTF-8"));
135 | wr.flush();
136 | wr.close();
137 | sendResponse(response, con);
138 |
139 | }
140 |
141 | public String getBody(HttpServletRequest request) throws IOException {
142 |
143 | String body = null;
144 | StringBuilder stringBuilder = new StringBuilder();
145 | BufferedReader bufferedReader = null;
146 |
147 | try {
148 | InputStream inputStream = request.getInputStream();
149 | if (inputStream != null) {
150 | bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
151 | char[] charBuffer = new char[128];
152 | int bytesRead = -1;
153 | while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
154 | stringBuilder.append(charBuffer, 0, bytesRead);
155 | }
156 | } else {
157 | stringBuilder.append("");
158 | }
159 | } catch (IOException ex) {
160 | throw ex;
161 | } finally {
162 | if (bufferedReader != null) {
163 | try {
164 | bufferedReader.close();
165 | } catch (IOException ex) {
166 | throw ex;
167 | }
168 | }
169 | }
170 |
171 | body = stringBuilder.toString();
172 | return body;
173 | }
174 |
175 | /**
176 | * return random IP Address. Note the host nane "web" which queries
177 | * all the hosts in the given docker-machine with the name web
178 | *
179 | * @param response
180 | * @return
181 | * @throws UnknownHostException
182 | * @throws IOException
183 | */
184 | private String getRandomIpAddress(HttpServletResponse response) throws UnknownHostException, IOException {
185 | List ipAddr = new ArrayList<>();
186 | for (InetAddress addr : InetAddress.getAllByName("web")) {
187 | logger.debug("Hostnames {}", addr.getHostAddress());
188 | ipAddr.add(addr.getHostAddress());
189 | }
190 | int size = ipAddr.size();
191 | if (size == 0) {
192 | logger.error("Size less than 1");
193 | return null;
194 | }
195 |
196 | logger.debug("Total hosts : {} ", size);
197 |
198 | int random = 0;
199 | if (size == 1) {
200 | random = 0;
201 | }else if (size > 1){
202 | random = ThreadLocalRandom.current().nextInt(0, ipAddr.size() - 1);
203 | }
204 |
205 | logger.debug("Random : {} " , random );
206 | String ipAddrStr = ipAddr.get(random);
207 | logger.debug("Returned IP addr : {} ", ipAddrStr);
208 | return ipAddrStr;
209 | }
210 |
211 | /**
212 | * send response to client include all the headers and the response body
213 | *
214 | * @param response
215 | * @param con
216 | * @throws ProtocolException
217 | * @throws IOException
218 | */
219 | private void sendResponse(HttpServletResponse response, HttpURLConnection con)
220 | throws ProtocolException, IOException {
221 |
222 | int responseCode = con.getResponseCode();
223 |
224 | if (responseCode == 200) {
225 | BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
226 |
227 | Map> headerFields = con.getHeaderFields();
228 | if (!headerFields.isEmpty()) {
229 | for (String headerField : headerFields.keySet()) {
230 | Object value = headerFields.get(headerField);
231 | logger.debug("Adding header field : {} , header value : {} ", new Object[] { headerField, value });
232 | response.addHeader(headerField, value.toString());
233 | }
234 | }
235 |
236 | String inputLine;
237 | StringBuffer stringOutput = new StringBuffer();
238 |
239 | while ((inputLine = in.readLine()) != null) {
240 | stringOutput.append(inputLine);
241 | }
242 | logger.debug("Received response : {} ", stringOutput);
243 | PrintWriter out = response.getWriter();
244 | out.println(stringOutput.toString());
245 | } else {
246 | response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
247 | response.getWriter().println("Internal Server Error");
248 | }
249 |
250 | }
251 | }
252 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-dispatcher/src/main/main.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-dispatcher/src/main/resources/log4j.properties:
--------------------------------------------------------------------------------
1 | # Root logger option
2 | log4j.rootLogger=WARN, console, file
3 |
4 | #enable JSF logging
5 | log4j.logger.org.pictolearn=DEBUG, console, file
6 | log4j.additivity.org.pictolearn=false
7 |
8 | # Redirect log messages to console
9 | log4j.appender.console=org.apache.log4j.ConsoleAppender
10 | log4j.appender.console.Target=System.out
11 | log4j.appender.console.layout=org.apache.log4j.PatternLayout
12 | log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
13 |
14 | # Redirect log messages to a log file
15 | log4j.appender.file=org.apache.log4j.RollingFileAppender
16 | log4j.appender.file.File=/usr/local/pictolearn/logs/pictolearn-dispatcher.log
17 | log4j.appender.file.MaxFileSize=5MB
18 | log4j.appender.file.MaxBackupIndex=5
19 | log4j.appender.file.layout=org.apache.log4j.PatternLayout
20 | log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-dispatcher/src/main/webapp/WEB-INF/web.xml:
--------------------------------------------------------------------------------
1 |
5 | Dispatcher Application
6 |
7 | ProxyFilter
8 | ProxyFilter
9 | org.pictolearn.docker.filter.ProxyFilter
10 |
11 |
12 | proxyFilter
13 | *.*
14 |
15 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-web/.classpath:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-web/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | pictolearn-web
4 |
5 |
6 |
7 |
8 |
9 | org.eclipse.jdt.core.javabuilder
10 |
11 |
12 |
13 |
14 | org.springframework.ide.eclipse.core.springbuilder
15 |
16 |
17 |
18 |
19 | org.eclipse.m2e.core.maven2Builder
20 |
21 |
22 |
23 |
24 |
25 | org.springframework.ide.eclipse.core.springnature
26 | org.eclipse.jdt.core.javanature
27 | org.eclipse.m2e.core.maven2Nature
28 |
29 |
30 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-web/.settings/org.eclipse.core.resources.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | encoding//src/main/java=UTF-8
3 | encoding//src/main/resources=UTF-8
4 | encoding/=UTF-8
5 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-web/.settings/org.eclipse.jdt.core.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
4 | org.eclipse.jdt.core.compiler.compliance=1.8
5 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
6 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
7 | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
8 | org.eclipse.jdt.core.compiler.source=1.8
9 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-web/.settings/org.eclipse.m2e.core.prefs:
--------------------------------------------------------------------------------
1 | activeProfiles=
2 | eclipse.preferences.version=1
3 | resolveWorkspaceProjects=true
4 | version=1
5 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-web/Dockerfile:
--------------------------------------------------------------------------------
1 | #Install from the same image built i usecase - 8
2 | FROM pictolearn/ubuntu-jdk8
3 |
4 | ENV PICTOLEARN_HOME /usr/local/pictolearn
5 |
6 | # add the directory to the path
7 | ADD . /usr/local/pictolearn
8 |
9 | #Add a directory for logs
10 | RUN mkdir -p /usr/local/pictolearn/logs
11 |
12 | # Run maven
13 | RUN cd /usr/local/pictolearn && mvn clean package
14 |
15 | CMD ["java","-jar","-DlogPath=/usr/local/pictolearn/logs","/usr/local/pictolearn/target/pictolearn-web-1.0.0-SNAPSHOT.jar"]
16 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-web/pom.xml:
--------------------------------------------------------------------------------
1 |
3 | 4.0.0
4 |
5 | pictolearn-web
6 | pictolearn-web
7 | 1.0.0-SNAPSHOT
8 |
9 | org.pictolearn.redis
10 | http://maven.apache.org
11 |
12 |
13 | UTF-8
14 | 1.8
15 |
16 |
17 |
18 | org.springframework.boot
19 | spring-boot-starter-parent
20 | 1.4.1.RELEASE
21 |
22 |
23 |
24 |
25 | org.springframework.boot
26 | spring-boot-starter-web
27 |
28 |
29 | org.springframework.boot
30 | spring-boot-starter-actuator
31 |
32 |
33 |
34 | org.springframework.boot
35 | spring-boot-starter
36 |
37 |
38 | org.springframework.boot
39 | spring-boot-starter-logging
40 |
41 |
42 |
43 |
44 | org.springframework.boot
45 | spring-boot-starter-data-jpa
46 |
47 |
48 | org.springframework.boot
49 | spring-boot-starter-log4j2
50 |
51 |
52 | org.springframework.boot
53 | spring-boot-starter-test
54 |
55 |
56 |
57 | mysql
58 | mysql-connector-java
59 | 6.0.4
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 | org.apache.maven.plugins
68 | maven-surefire-plugin
69 |
70 | true
71 |
72 |
73 |
74 | org.springframework.boot
75 | spring-boot-maven-plugin
76 |
77 |
78 | maven-failsafe-plugin
79 |
80 |
81 |
82 | integration-test
83 | verify
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-web/scripts/post.json:
--------------------------------------------------------------------------------
1 | {
2 | "name":"test",
3 | "email" : "test@pictolearn.com"
4 | }
5 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-web/scripts/test.txt:
--------------------------------------------------------------------------------
1 | curl -X POST -H "Content-Type: application/json" --data "@./post.json" http://localhost:8080/add
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-web/scripts/util.sql:
--------------------------------------------------------------------------------
1 | create database Users;
2 |
3 | use Users;
4 |
5 | CREATE TABLE users (
6 | id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
7 | name VARCHAR(80) NOT NULL,
8 | email VARCHAR(50) NOT NULL
9 | );
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-web/src/main/java/org/pictolearn/docker/Application.java:
--------------------------------------------------------------------------------
1 | package org.pictolearn.docker;
2 |
3 | import java.util.Arrays;
4 |
5 | import org.apache.logging.log4j.LogManager;
6 | import org.apache.logging.log4j.Logger;
7 | import org.springframework.boot.CommandLineRunner;
8 | import org.springframework.boot.SpringApplication;
9 | import org.springframework.boot.autoconfigure.SpringBootApplication;
10 | import org.springframework.context.ApplicationContext;
11 | import org.springframework.context.annotation.Bean;
12 |
13 | @SpringBootApplication(scanBasePackages= {"org.pictolearn"})
14 | public class Application {
15 |
16 | private static final Logger logger = LogManager.getLogger(Application.class);
17 |
18 | public static void main(String[] args) {
19 | SpringApplication.run(Application.class, args);
20 | }
21 |
22 | @Bean
23 | public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
24 | return args -> {
25 |
26 | logger.debug("Let's inspect the beans provided by Spring Boot:");
27 |
28 | String[] beanNames = ctx.getBeanDefinitionNames();
29 | Arrays.sort(beanNames);
30 | for (String beanName : beanNames) {
31 | logger.debug(beanName);
32 | }
33 |
34 | };
35 | }
36 | }
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-web/src/main/java/org/pictolearn/docker/controller/UserController.java:
--------------------------------------------------------------------------------
1 | package org.pictolearn.docker.controller;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | import org.apache.logging.log4j.LogManager;
7 | import org.apache.logging.log4j.Logger;
8 | import org.pictolearn.docker.dao.UserDao;
9 | import org.pictolearn.docker.model.User;
10 | import org.springframework.beans.factory.annotation.Autowired;
11 | import org.springframework.web.bind.annotation.PathVariable;
12 | import org.springframework.web.bind.annotation.RequestBody;
13 | import org.springframework.web.bind.annotation.RequestMapping;
14 | import org.springframework.web.bind.annotation.ResponseBody;
15 | import org.springframework.web.bind.annotation.RestController;
16 |
17 | @RestController
18 | public class UserController {
19 |
20 | private static final Logger logger = LogManager.getLogger(UserController.class);
21 |
22 | private static final String SUCCESS = "success";
23 |
24 | @Autowired
25 | private UserDao userDao;
26 |
27 | @RequestMapping(value = "/delete/{id}")
28 | @ResponseBody
29 | public String delete(@PathVariable("id") long id) {
30 | try {
31 | User user = new User(id);
32 | userDao.delete(user);
33 | } catch (Exception ex) {
34 | logger.error("Error deleting the user : {} ", id);
35 | }
36 | return SUCCESS;
37 | }
38 |
39 | @RequestMapping(value = "/list")
40 | @ResponseBody
41 | public List getAll() {
42 | try {
43 | return userDao.getAll();
44 | } catch (Exception ex) {
45 | logger.error("List users", ex);
46 | }
47 | return new ArrayList();
48 | }
49 |
50 | @RequestMapping(value = "/add")
51 | @ResponseBody
52 | public String add(@RequestBody User user) {
53 | try {
54 | long id = userDao.save(user);
55 | logger.debug("User has been saved successfully with id:{}", id);
56 | } catch (Exception ex) {
57 | logger.error("Error find the user by email", ex);
58 | }
59 | return SUCCESS;
60 | }
61 |
62 | }
63 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-web/src/main/java/org/pictolearn/docker/dao/DatabaseConfig.java:
--------------------------------------------------------------------------------
1 | package org.pictolearn.docker.dao;
2 |
3 | import java.util.Properties;
4 |
5 | import javax.sql.DataSource;
6 |
7 | import org.apache.logging.log4j.LogManager;
8 | import org.apache.logging.log4j.Logger;
9 | import org.pictolearn.docker.controller.UserController;
10 | import org.springframework.beans.factory.annotation.Value;
11 | import org.springframework.context.annotation.Bean;
12 | import org.springframework.context.annotation.Configuration;
13 | import org.springframework.jdbc.datasource.DriverManagerDataSource;
14 | import org.springframework.orm.hibernate5.HibernateTransactionManager;
15 | import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
16 | import org.springframework.transaction.annotation.EnableTransactionManagement;
17 |
18 | @Configuration
19 | @EnableTransactionManagement
20 | public class DatabaseConfig {
21 |
22 | private static final Logger logger = LogManager.getLogger(DatabaseConfig.class);
23 |
24 | @Value("${db.driver}")
25 | private String DB_DRIVER;
26 |
27 | @Value("${db.password}")
28 | private String DB_PASSWORD;
29 |
30 | @Value("${db.url}")
31 | private String DB_URL;
32 |
33 | @Value("${db.username}")
34 | private String DB_USERNAME;
35 |
36 | @Value("${hibernate.dialect}")
37 | private String HIBERNATE_DIALECT;
38 |
39 | @Value("${hibernate.show_sql}")
40 | private String HIBERNATE_SHOW_SQL;
41 |
42 | @Value("${hibernate.hbm2ddl.auto}")
43 | private String HIBERNATE_HBM2DDL_AUTO;
44 |
45 | @Value("${entitymanager.packagesToScan}")
46 | private String ENTITYMANAGER_PACKAGES_TO_SCAN;
47 |
48 | @Bean
49 | public DataSource dataSource() {
50 | DriverManagerDataSource dataSource = new DriverManagerDataSource();
51 | dataSource.setDriverClassName(DB_DRIVER);
52 | dataSource.setUrl(DB_URL);
53 | dataSource.setUsername(DB_USERNAME);
54 | dataSource.setPassword(DB_PASSWORD);
55 | logger.debug("DB_URL " + DB_URL);
56 | return dataSource;
57 | }
58 |
59 | @Bean
60 | public LocalSessionFactoryBean sessionFactory() {
61 | LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
62 | logger.debug("DB_URL " + DB_URL);
63 | sessionFactoryBean.setDataSource(dataSource());
64 | sessionFactoryBean.setPackagesToScan(ENTITYMANAGER_PACKAGES_TO_SCAN);
65 | Properties hibernateProperties = new Properties();
66 | hibernateProperties.put("hibernate.dialect", HIBERNATE_DIALECT);
67 | hibernateProperties.put("hibernate.show_sql", HIBERNATE_SHOW_SQL);
68 | hibernateProperties.put("hibernate.hbm2ddl.auto", HIBERNATE_HBM2DDL_AUTO);
69 | sessionFactoryBean.setHibernateProperties(hibernateProperties);
70 |
71 | return sessionFactoryBean;
72 | }
73 |
74 | @Bean
75 | public HibernateTransactionManager transactionManager() {
76 | HibernateTransactionManager transactionManager =
77 | new HibernateTransactionManager();
78 | transactionManager.setSessionFactory(sessionFactory().getObject());
79 | return transactionManager;
80 | }
81 |
82 | }
83 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-web/src/main/java/org/pictolearn/docker/dao/UserDao.java:
--------------------------------------------------------------------------------
1 | package org.pictolearn.docker.dao;
2 |
3 | import java.util.List;
4 |
5 | import javax.transaction.Transactional;
6 |
7 | import org.hibernate.Session;
8 | import org.hibernate.SessionFactory;
9 | import org.pictolearn.docker.model.User;
10 | import org.springframework.beans.factory.annotation.Autowired;
11 | import org.springframework.stereotype.Repository;
12 |
13 | @Repository
14 | @Transactional
15 | public class UserDao {
16 |
17 | @Autowired
18 | private SessionFactory _sessionFactory;
19 |
20 | private Session getSession() {
21 | return _sessionFactory.getCurrentSession();
22 | }
23 |
24 | public Long save(User user) {
25 | return (Long) getSession().save(user);
26 | }
27 |
28 | public void delete(User user) {
29 | getSession().delete(user);
30 | return;
31 | }
32 |
33 | @SuppressWarnings("unchecked")
34 | public List getAll() {
35 | return getSession().createQuery("from User").list();
36 | }
37 |
38 | public User getByEmail(String email) {
39 | return (User) getSession().createQuery(
40 | "from User where email = :email")
41 | .setParameter("email", email)
42 | .uniqueResult();
43 | }
44 |
45 | public User getById(long id) {
46 | return (User) getSession().get(User.class, id);
47 | }
48 |
49 | public void update(User user) {
50 | getSession().update(user);
51 | return;
52 | }
53 |
54 | }
55 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-web/src/main/java/org/pictolearn/docker/model/User.java:
--------------------------------------------------------------------------------
1 | package org.pictolearn.docker.model;
2 |
3 | import java.io.Serializable;
4 |
5 | import javax.persistence.Entity;
6 | import javax.persistence.GeneratedValue;
7 | import javax.persistence.GenerationType;
8 | import javax.persistence.Id;
9 | import javax.persistence.Table;
10 | import javax.validation.constraints.NotNull;
11 | import javax.validation.constraints.Size;
12 |
13 |
14 | @Entity
15 | @Table(name="users")
16 | public class User implements Serializable{
17 |
18 | /**
19 | *
20 | */
21 | private static final long serialVersionUID = 1694243216355681366L;
22 |
23 | @Id
24 | @GeneratedValue(strategy = GenerationType.AUTO)
25 | private long id;
26 |
27 | @NotNull
28 | @Size(min = 3, max = 80)
29 | private String email;
30 |
31 | @NotNull
32 | @Size(min = 2, max = 80)
33 | private String name;
34 |
35 | public User() { }
36 |
37 | public User(long id) {
38 | this.id = id;
39 | }
40 |
41 | public User(String email, String name) {
42 | this.email = email;
43 | this.name = name;
44 | }
45 |
46 | public long getId() {
47 | return id;
48 | }
49 |
50 | public void setId(long value) {
51 | this.id = value;
52 | }
53 |
54 | public String getEmail() {
55 | return email;
56 | }
57 |
58 | public void setEmail(String value) {
59 | this.email = value;
60 | }
61 |
62 | public String getName() {
63 | return name;
64 | }
65 |
66 | public void setName(String value) {
67 | this.name = value;
68 | }
69 |
70 | @Override
71 | public String toString() {
72 | StringBuilder builder = new StringBuilder();
73 | builder.append("User [id=");
74 | builder.append(id);
75 | builder.append(", email=");
76 | builder.append(email);
77 | builder.append(", name=");
78 | builder.append(name);
79 | builder.append("]");
80 | return builder.toString();
81 | }
82 |
83 | } // class User
84 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-web/src/main/main3.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-web/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | app.name=Pictolearn-Docker-Java
2 | app.description=${app.name} is a Spring Boot application
3 | logging.path=logs
4 |
5 | # Database
6 | db.driver=com.mysql.cj.jdbc.Driver
7 | db.url=jdbc:mysql://mysql:3306/Users?autoReconnect=true&useSSL=false
8 | db.username=root
9 | db.password=root
10 |
11 | # Hibernate
12 | hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
13 | hibernate.show_sql=true
14 | hibernate.hbm2ddl.auto=update
15 | entitymanager.packagesToScan=org.pictolearn
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/pictolearn-web/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | logs
5 |
6 |
7 |
8 |
10 |
11 | %d{dd/MMM/yyyy HH:mm:ss,SSS}- %p %c [%t] %m%n
12 |
13 |
14 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/scripts.txt:
--------------------------------------------------------------------------------
1 | *****************************************************************
2 | Step-1 # Run Powershell as administrator on WINDOWS or terminal on MAC
3 | -------------------------------------------------------------------
4 | docker-machine ps -a
5 |
6 | *****************************************************************
7 | Step-2 # Docker machine activation
8 | -------------------------------------------------------------------
9 | docker-machine env hyperv-vm-1
10 | WINDOWS (Copy and execute the last line): # & "C:\Program Files\Docker\Docker\Resources\bin\docker-machine.exe" env hyperv-vm-1 | Invoke-Expression
11 |
12 | Step-3 # Run the image in detached/non-detached mode (use -d)
13 | -------------------------------------------------------------------
14 | docker-compose up -d
15 | docker-compose up
16 | docker-compose up -d
17 |
18 | docker-compose scale =
19 | Ex: docker-compose scale web=2
20 |
21 | Step-4 # View logs and Tail logs
22 | -------------------------------------------------------------------
23 | # View logs
24 | docker-compose logs
25 |
26 | # Tail logs
27 | docker-compose logs -ft
28 |
29 | Step-5 # Login to the container
30 | -------------------------------------------------------------------
31 | docker-compose run /bin/bash
32 |
33 | Step-6 # Stops all containers related to the compose file
34 | --------------------------------------------------
35 | docker-compose stop
36 |
37 | #Stop and start specific container
38 | docker-compose stop
39 |
40 | #Stop and remove containers
41 | docker-compose down
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/testscripts/addUser.json:
--------------------------------------------------------------------------------
1 | {"id":0,"email":"arunganesan@xyz.com","name":"Arun Ganesan"}
2 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/testscripts/addUser.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | curl -X POST -H "Content-Type: application/json" --data "@./addUser.json" http://192.168.99.100:1111/pictolearn-dispatcher/proxyServlet/add -v
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/testscripts/findUserById.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | curl http://192.168.99.100:1111/pictolearn-dispatcher/proxyServlet/findById/1 -v
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/testscripts/updateUser.json:
--------------------------------------------------------------------------------
1 | {"id":0,"email":"arunganesan@xyz.com","name":"Arun"}
2 |
--------------------------------------------------------------------------------
/Usecase-10/docker-compose-spring-boot/testscripts/updateUserByEmail.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | curl http://192.168.99.100:1111/pictolearn-dispatcher/proxyServlet/findByEmail/arunganesan@xyz\.com -v
--------------------------------------------------------------------------------
/Usecase-2/Dockerfile:
--------------------------------------------------------------------------------
1 | # Updated as of Aug 16, 2017
2 | # FROM specified which image i want to download
3 | # Needs to be provided before any other section of code.
4 | FROM nginx:1.14
5 |
6 | #Author of the Docker File
7 | # MAINTAINER Pictolearn Note: MAINTAINER has been deprecated for LABEL,
8 | # LABEL is a key value pair
9 | LABEL "Maintainer"="Pictolearn"
10 |
11 | # Copy httpd.conf with changes to the root directory
12 | COPY default.conf /etc/nginx/conf.d/
13 |
14 | # Copy the following directory
15 | COPY pictolearn-sample/ /usr/share/nginx/html/pictolearn
--------------------------------------------------------------------------------
/Usecase-2/default.conf:
--------------------------------------------------------------------------------
1 | server {
2 | listen 80;
3 | server_name localhost;
4 |
5 | #charset koi8-r;
6 | #access_log /var/log/nginx/log/host.access.log main;
7 |
8 | location / {
9 | root /usr/share/nginx/html/pictolearn;
10 | index index.html index.htm;
11 | }
12 |
13 | #error_page 404 /404.html;
14 |
15 | # redirect server error pages to the static page /50x.html
16 | #
17 | error_page 500 502 503 504 /50x.html;
18 | location = /50x.html {
19 | root /usr/share/nginx/html;
20 | }
21 |
22 | # proxy the PHP scripts to Apache listening on 127.0.0.1:80
23 | #
24 | #location ~ \.php$ {
25 | # proxy_pass http://127.0.0.1;
26 | #}
27 |
28 | # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
29 | #
30 | #location ~ \.php$ {
31 | # root html;
32 | # fastcgi_pass 127.0.0.1:9000;
33 | # fastcgi_index index.php;
34 | # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
35 | # include fastcgi_params;
36 | #}
37 |
38 | # deny access to .htaccess files, if Apache's document root
39 | # concurs with nginx's one
40 | #
41 | #location ~ /\.ht {
42 | # deny all;
43 | #}
44 | }
45 |
--------------------------------------------------------------------------------
/Usecase-2/pictolearn-sample/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pictolearn/docker-tutorial/875ddd62c7c4e8739962efb41dba88ea2e9d9591/Usecase-2/pictolearn-sample/apple-touch-icon.png
--------------------------------------------------------------------------------
/Usecase-2/pictolearn-sample/browserconfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/Usecase-2/pictolearn-sample/css/bootstrap-theme.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v3.3.1 (http://getbootstrap.com)
3 | * Copyright 2011-2014 Twitter, Inc.
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 | */.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-default .badge,.btn-primary .badge,.btn-success .badge,.btn-info .badge,.btn-warning .badge,.btn-danger .badge{text-shadow:none}.btn:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default:disabled,.btn-default[disabled]{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:hover,.btn-primary:focus{background-color:#265a88;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#265a88;border-color:#245580}.btn-primary:disabled,.btn-primary[disabled]{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-success:disabled,.btn-success[disabled]{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-info:disabled,.btn-info[disabled]{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-warning:disabled,.btn-warning[disabled]{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-danger:disabled,.btn-danger[disabled]{background-color:#c12e2a;background-image:none}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:hover .badge,.list-group-item.active:focus .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}
--------------------------------------------------------------------------------
/Usecase-2/pictolearn-sample/css/main.css:
--------------------------------------------------------------------------------
1 |
2 |
3 | /* ==========================================================================
4 | Author's custom styles
5 | ========================================================================== */
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/Usecase-2/pictolearn-sample/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pictolearn/docker-tutorial/875ddd62c7c4e8739962efb41dba88ea2e9d9591/Usecase-2/pictolearn-sample/favicon.ico
--------------------------------------------------------------------------------
/Usecase-2/pictolearn-sample/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pictolearn/docker-tutorial/875ddd62c7c4e8739962efb41dba88ea2e9d9591/Usecase-2/pictolearn-sample/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/Usecase-2/pictolearn-sample/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pictolearn/docker-tutorial/875ddd62c7c4e8739962efb41dba88ea2e9d9591/Usecase-2/pictolearn-sample/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/Usecase-2/pictolearn-sample/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pictolearn/docker-tutorial/875ddd62c7c4e8739962efb41dba88ea2e9d9591/Usecase-2/pictolearn-sample/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/Usecase-2/pictolearn-sample/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
30 |
43 |
44 |
45 |
46 |
47 |
Hello, Docker!
48 |
This is running on NGINX Docker image.
49 |
Learn more »
50 |
51 |
52 |
53 |
54 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
73 |
74 |
75 |
--------------------------------------------------------------------------------
/Usecase-2/pictolearn-sample/js/main.js:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Usecase-2/pictolearn-sample/js/vendor/npm.js:
--------------------------------------------------------------------------------
1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
2 | require('../../js/transition.js')
3 | require('../../js/alert.js')
4 | require('../../js/button.js')
5 | require('../../js/carousel.js')
6 | require('../../js/collapse.js')
7 | require('../../js/dropdown.js')
8 | require('../../js/modal.js')
9 | require('../../js/tooltip.js')
10 | require('../../js/popover.js')
11 | require('../../js/scrollspy.js')
12 | require('../../js/tab.js')
13 | require('../../js/affix.js')
--------------------------------------------------------------------------------
/Usecase-2/pictolearn-sample/tile-wide.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pictolearn/docker-tutorial/875ddd62c7c4e8739962efb41dba88ea2e9d9591/Usecase-2/pictolearn-sample/tile-wide.png
--------------------------------------------------------------------------------
/Usecase-2/pictolearn-sample/tile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pictolearn/docker-tutorial/875ddd62c7c4e8739962efb41dba88ea2e9d9591/Usecase-2/pictolearn-sample/tile.png
--------------------------------------------------------------------------------
/Usecase-2/readme:
--------------------------------------------------------------------------------
1 | Use case 2 :
2 |
3 | Deploy a nginx http server
4 | Override the configuration in it.
5 | copy my static html pages written in html 5 bootstrap
6 |
7 | Real world use case:
8 |
9 | Developer has to download nginx http server, make the changes and bank the configuration changes in to the http server and the biggest disadvantage
10 | of this approach is that there is a possibility that the httpd server may not work or a particular OS when it is promoted to higher environments
11 | such as QA and files may be missed out or the configuration may have to be changed which is error prone.
12 |
13 | So learn how to create an image, run a container and then push the image to the repository
14 |
--------------------------------------------------------------------------------
/Usecase-2/scripts.txt:
--------------------------------------------------------------------------------
1 |
2 | #Step 1: Building an image
3 | #Syntax: docker build -t
4 | -------------------------------------------------------------------
5 | docker build -t my-nginx .
6 |
7 | #Step 2: List all the images
8 | #Syntax: docker images
9 | -------------------------------------------------------------------
10 | docker images
11 |
12 | #Step 3: Running a container from the image
13 | #Syntax: docker run -itd --name -p : image-name:tag
14 | # note in the above syntax:
15 | # -d : represents (detached mode), note that if you dont run this in detached mode, the life of the container will be the life of the terminal in which you are executing it.
16 | # -p : represents the host-port to container-port mapping, if you substitute it with -P you will get a random port allocated by docker
17 | # --name : represents the name of the container
18 | -------------------------------------------------------------------
19 | docker run -itd --name my-nginx-container-1 -p 7777:80 my-nginx:latest
20 | docker run -itd --name my-nginx-container-2 -p 7778:80 my-nginx:latest
21 |
22 | Step 4: View all the containers
23 | -------------------------------------------------------------------
24 | # Shows all the containers which are running
25 | docker ps
26 |
27 | #Shows all the containers stopped and running
28 | docker ps -a
29 |
30 | Step 5: Logging into the container
31 | -------------------------------------------------------------------
32 | #Note: The container must be started before we can do this.
33 | docker exec -it /bin/bash
34 |
35 | Step 6: Logging into Dockerhub account on the terminal
36 | -------------------------------------------------------------------
37 | docker login
38 | docker tag : /:
39 | docker push /:
40 | docker commit /:
41 |
42 | docker pull /:
43 |
44 |
45 |
46 |
47 | Step 11: Remove all the containers and images
48 | -------------------------------------------------------------------
49 | #Note: To remove an image the corresponding container built from that image will need to be removed.
50 |
51 | #Remove a specific container
52 | docker rm
53 |
54 | #Remove all containers
55 | docker rm $(docker ps -a -q)
56 |
57 | # remove image (note: no containers for this image should be running)
58 | docker rmi
59 |
60 | # remove all images
61 | docker rmi $(docker images -q)
62 |
--------------------------------------------------------------------------------
/Usecase-3/docker-git-hello-world/.classpath:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Usecase-3/docker-git-hello-world/.gitignore:
--------------------------------------------------------------------------------
1 | /target/
2 |
--------------------------------------------------------------------------------
/Usecase-3/docker-git-hello-world/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | docker-git-hello-world
4 |
5 |
6 |
7 |
8 |
9 | org.eclipse.jdt.core.javabuilder
10 |
11 |
12 |
13 |
14 | org.eclipse.m2e.core.maven2Builder
15 |
16 |
17 |
18 |
19 |
20 | org.eclipse.jdt.core.javanature
21 | org.eclipse.m2e.core.maven2Nature
22 |
23 |
24 |
--------------------------------------------------------------------------------
/Usecase-3/docker-git-hello-world/.settings/org.eclipse.core.resources.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | encoding//src/main/java=UTF-8
3 | encoding/=UTF-8
4 |
--------------------------------------------------------------------------------
/Usecase-3/docker-git-hello-world/.settings/org.eclipse.jdt.core.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
4 | org.eclipse.jdt.core.compiler.compliance=1.5
5 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
6 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
7 | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
8 | org.eclipse.jdt.core.compiler.source=1.5
9 |
--------------------------------------------------------------------------------
/Usecase-3/docker-git-hello-world/.settings/org.eclipse.m2e.core.prefs:
--------------------------------------------------------------------------------
1 | activeProfiles=
2 | eclipse.preferences.version=1
3 | resolveWorkspaceProjects=true
4 | version=1
5 |
--------------------------------------------------------------------------------
/Usecase-3/docker-git-hello-world/Dockerfile:
--------------------------------------------------------------------------------
1 | # Updated as of Aug 16, 2017
2 | # Install FROM UBUNTU IMAGE
3 | FROM ubuntu:16.04
4 |
5 | #Author of the Docker File
6 | # MAINTAINER Pictolearn Note: MAINTAINER has been deprecated for LABEL,
7 | # LABEL is a key value pair
8 | LABEL "Maintainer"="Pictolearn"
9 |
10 | # RUN COMMAND BASICALLY runs the command in the terminal and creates an image.
11 | # Install all the updates for UBUNTU
12 | RUN apt-get update && apt-get install -y python-software-properties software-properties-common
13 |
14 | # Install all the updates for UBUNTU
15 | RUN apt-get install -y iputils-ping
16 |
17 | # Adds the repository where JDK 8 can be obtained for UBUNTU
18 | RUN add-apt-repository ppa:webupd8team/java
19 |
20 | # INSTALL THE VI EDITOR AND MYSQL-CLIENT
21 | RUN apt-get install -y vim
22 | RUN apt-get install -y mysql-client
23 |
24 | # NOTE and WARNING: ORACLE JDK is no longer licensed. Please install default jdk or OPEN JDK.
25 | # The initial set up was to get this working with JDK 7 but when the licensing terms for oracle changing we will install the default JDK
26 | # INSTALL ORACLE JDK 8 BY ACCEPTING YES
27 | # RUN echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 boolean true" | debconf-set-selections
28 | #INSTALL ALL the updates again and install MAVEN and JDK 8
29 | # RUN apt-get update && apt-get install -y oracle-java8-installer maven
30 | RUN apt-get update && apt-get install -y default-jdk maven
31 |
32 |
33 | # ADD a directory called docker-git-hello-world inside the UBUNTU IMAGE where you will be moving all of these files under this
34 | # DIRECTORY to
35 | ADD . /usr/local/docker-git-hello-world
36 |
37 | # AFTER YOU HAVE MOVED ALL THE FILES GO AHEAD CD into the directory and run mvn assembly.
38 | # Maven assembly will package the project into a JAR FILE which can be executed
39 | RUN cd /usr/local/docker-git-hello-world && mvn assembly:assembly
40 |
41 | #THE CMD COMMAND tells docker the command to run when the container is started up from the image. In this case we are
42 | # executing the java program as is to print Hello World.
43 | CMD ["java", "-cp", "/usr/local/docker-git-hello-world/target/docker-git-hello-world-0.0.1-SNAPSHOT-jar-with-dependencies.jar", "org.pictolearn.docker.HelloWorldPing"]
--------------------------------------------------------------------------------
/Usecase-3/docker-git-hello-world/pom.xml:
--------------------------------------------------------------------------------
1 |
3 | 4.0.0
4 |
5 | docker-git-hello-world
6 | docker-git-hello-world
7 | 0.0.1-SNAPSHOT
8 | jar
9 |
10 | docker-git-hello-world
11 | http://maven.apache.org
12 |
13 |
14 | UTF-8
15 |
16 |
17 |
18 |
19 |
20 | maven-assembly-plugin
21 | 2.6
22 |
23 |
24 | jar-with-dependencies
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/Usecase-3/docker-git-hello-world/src/main/java/org/pictolearn/docker/HelloWorldPing.java:
--------------------------------------------------------------------------------
1 | package org.pictolearn.docker;
2 |
3 | public class HelloWorldPing {
4 |
5 | public static void main(String args[]) throws Exception{
6 | for(int i = 0 ; i < 100; i++){
7 | System.out.println("Hello World Ping " + i );
8 | Thread.sleep(1000);
9 | }
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Usecase-3/docker-git-hello-world/src/main/main4.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Usecase-3/readme:
--------------------------------------------------------------------------------
1 | Use case 3 :
2 |
3 | Create a custom image of ubuntu with JDK 8 installed, ping, VI editor, Mysql-client and MAVEN installed.
4 | Deploy a java application in a docker container. Automatic integration of git with the docker hub repository.
5 |
6 | 1. Copy Docker file as is to the Eclipse Project
7 | 2. Commands to Execute
8 |
9 |
--------------------------------------------------------------------------------
/Usecase-3/scripts.txt:
--------------------------------------------------------------------------------
1 | #Build the image.
2 | docker build -t my-java-docker .
3 |
4 |
5 | #Run the image
6 | docker run -itd --name my-java-docker-container my-java-docker:latest
7 |
8 | # Review the logs to see how the container is running. You can get it by executing $docker ps -a
9 | docker logs -ft
--------------------------------------------------------------------------------
/Usecase-4/Dockerfile:
--------------------------------------------------------------------------------
1 | # Updated as of Aug 16, 2017
2 | #FROM specified which image i want to download
3 | # Needs to be provided before any other section of code.
4 | FROM tomcat:8.5
5 |
6 | #Author of the Docker File
7 | # MAINTAINER Pictolearn Note: MAINTAINER has been deprecated for LABEL,
8 | # LABEL is a key value pair
9 | LABEL "Maintainer"="Pictolearn"
10 |
11 | # Copy the following directory
12 | COPY docker-spring-mvc.war /usr/local/tomcat/webapps/docker-spring-mvc.war
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc.war:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pictolearn/docker-tutorial/875ddd62c7c4e8739962efb41dba88ea2e9d9591/Usecase-4/docker-spring-mvc.war
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/.classpath:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | docker-spring-mvc
4 |
5 |
6 |
7 |
8 |
9 | org.eclipse.wst.jsdt.core.javascriptValidator
10 |
11 |
12 |
13 |
14 | org.eclipse.jdt.core.javabuilder
15 |
16 |
17 |
18 |
19 | org.eclipse.wst.common.project.facet.core.builder
20 |
21 |
22 |
23 |
24 | org.eclipse.wst.validation.validationbuilder
25 |
26 |
27 |
28 |
29 | org.springframework.ide.eclipse.core.springbuilder
30 |
31 |
32 |
33 |
34 | org.eclipse.m2e.core.maven2Builder
35 |
36 |
37 |
38 |
39 |
40 | org.springframework.ide.eclipse.core.springnature
41 | org.eclipse.jem.workbench.JavaEMFNature
42 | org.eclipse.wst.common.modulecore.ModuleCoreNature
43 | org.eclipse.jdt.core.javanature
44 | org.eclipse.m2e.core.maven2Nature
45 | org.eclipse.wst.common.project.facet.core.nature
46 | org.eclipse.wst.jsdt.core.jsNature
47 |
48 |
49 |
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/.settings/.jsdtscope:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/.settings/org.eclipse.jdt.apt.core.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | org.eclipse.jdt.apt.aptEnabled=false
3 |
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/.settings/org.eclipse.jdt.core.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
3 | org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
4 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
5 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
6 | org.eclipse.jdt.core.compiler.compliance=1.7
7 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate
8 | org.eclipse.jdt.core.compiler.debug.localVariable=generate
9 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate
10 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
11 | org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
12 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
13 | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
14 | org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
15 | org.eclipse.jdt.core.compiler.processAnnotations=disabled
16 | org.eclipse.jdt.core.compiler.release=disabled
17 | org.eclipse.jdt.core.compiler.source=1.7
18 |
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/.settings/org.eclipse.ltk.core.refactoring.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
3 |
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/.settings/org.eclipse.m2e.core.prefs:
--------------------------------------------------------------------------------
1 | activeProfiles=
2 | eclipse.preferences.version=1
3 | resolveWorkspaceProjects=true
4 | version=1
5 |
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/.settings/org.eclipse.wst.common.component:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/.settings/org.eclipse.wst.common.project.facet.core.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/.settings/org.eclipse.wst.jsdt.ui.superType.container:
--------------------------------------------------------------------------------
1 | org.eclipse.wst.jsdt.launching.baseBrowserLibrary
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/.settings/org.eclipse.wst.jsdt.ui.superType.name:
--------------------------------------------------------------------------------
1 | Window
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/.settings/org.eclipse.wst.validation.prefs:
--------------------------------------------------------------------------------
1 | DELEGATES_PREFERENCE=delegateValidatorList
2 | USER_BUILD_PREFERENCE=enabledBuildValidatorListorg.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator;org.eclipse.jst.j2ee.internal.web.validation.UIWarValidator;
3 | USER_MANUAL_PREFERENCE=enabledManualValidatorListorg.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator;org.eclipse.jst.j2ee.internal.web.validation.UIWarValidator;
4 | USER_PREFERENCE=overrideGlobalPreferencestruedisableAllValidationtrueversion1.2.700.v201508251749
5 | disabled=06target
6 | eclipse.preferences.version=1
7 | override=true
8 | suspend=true
9 | vf.version=3
10 |
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/.settings/org.springframework.ide.eclipse.core.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | org.springframework.ide.eclipse.core.builders.enable.aopreferencemodelbuilder=true
3 | org.springframework.ide.eclipse.core.builders.enable.beanmetadatabuilder=true
4 | org.springframework.ide.eclipse.core.enable.project.preferences=true
5 | org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.beans.core.beansvalidator=true
6 | org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.bestpractices.beansvalidator=false
7 | org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.boot.bootvalidator=true
8 | org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.core.springvalidator=true
9 | org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.data.core.datavalidator=true
10 | org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.webflow.core.validator=true
11 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.autowire.autowire-org.springframework.ide.eclipse.beans.core.beansvalidator=false
12 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanAlias-org.springframework.ide.eclipse.beans.core.beansvalidator=true
13 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanClass-org.springframework.ide.eclipse.beans.core.beansvalidator=true
14 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanConstructorArgument-org.springframework.ide.eclipse.beans.core.beansvalidator=true
15 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanDefinition-org.springframework.ide.eclipse.beans.core.beansvalidator=true
16 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanDefinitionHolder-org.springframework.ide.eclipse.beans.core.beansvalidator=true
17 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanFactory-org.springframework.ide.eclipse.beans.core.beansvalidator=true
18 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanInitDestroyMethod-org.springframework.ide.eclipse.beans.core.beansvalidator=true
19 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanProperty-org.springframework.ide.eclipse.beans.core.beansvalidator=true
20 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanReference-org.springframework.ide.eclipse.beans.core.beansvalidator=true
21 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.methodOverride-org.springframework.ide.eclipse.beans.core.beansvalidator=true
22 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.parsingProblems-org.springframework.ide.eclipse.beans.core.beansvalidator=true
23 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.requiredProperty-org.springframework.ide.eclipse.beans.core.beansvalidator=false
24 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.toolAnnotation-org.springframework.ide.eclipse.beans.core.beansvalidator=false
25 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.bestpractices.com.springsource.sts.bestpractices.AvoidDriverManagerDataSource-org.springframework.ide.eclipse.bestpractices.beansvalidator=false
26 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.bestpractices.com.springsource.sts.bestpractices.ImportElementsAtTopRulee-org.springframework.ide.eclipse.bestpractices.beansvalidator=false
27 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.bestpractices.com.springsource.sts.bestpractices.ParentBeanSpecifiesAbstractClassRule-org.springframework.ide.eclipse.bestpractices.beansvalidator=false
28 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.bestpractices.com.springsource.sts.bestpractices.RefElementRule-org.springframework.ide.eclipse.bestpractices.beansvalidator=false
29 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.bestpractices.com.springsource.sts.bestpractices.TooManyBeansInFileRule-org.springframework.ide.eclipse.bestpractices.beansvalidator=false
30 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.bestpractices.com.springsource.sts.bestpractices.UnnecessaryValueElementRule-org.springframework.ide.eclipse.bestpractices.beansvalidator=false
31 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.bestpractices.com.springsource.sts.bestpractices.UseBeanInheritance-org.springframework.ide.eclipse.bestpractices.beansvalidator=false
32 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.bestpractices.legacyxmlusage.jndiobjectfactory-org.springframework.ide.eclipse.bestpractices.beansvalidator=false
33 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.boot.missingConfigurationProcessor-org.springframework.ide.eclipse.boot.bootvalidator=true
34 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.core.springClasspath-org.springframework.ide.eclipse.core.springvalidator=true
35 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.data.core.invalidDerivedQuery-org.springframework.ide.eclipse.data.core.datavalidator=true
36 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.data.core.invalidParameterType-org.springframework.ide.eclipse.data.core.datavalidator=true
37 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.action-org.springframework.ide.eclipse.webflow.core.validator=true
38 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.actionstate-org.springframework.ide.eclipse.webflow.core.validator=true
39 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.attribute-org.springframework.ide.eclipse.webflow.core.validator=true
40 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.attributemapper-org.springframework.ide.eclipse.webflow.core.validator=true
41 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.beanaction-org.springframework.ide.eclipse.webflow.core.validator=true
42 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.evaluationaction-org.springframework.ide.eclipse.webflow.core.validator=true
43 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.evaluationresult-org.springframework.ide.eclipse.webflow.core.validator=true
44 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.exceptionhandler-org.springframework.ide.eclipse.webflow.core.validator=true
45 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.import-org.springframework.ide.eclipse.webflow.core.validator=true
46 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.inputattribute-org.springframework.ide.eclipse.webflow.core.validator=true
47 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.mapping-org.springframework.ide.eclipse.webflow.core.validator=true
48 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.outputattribute-org.springframework.ide.eclipse.webflow.core.validator=true
49 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.set-org.springframework.ide.eclipse.webflow.core.validator=true
50 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.state-org.springframework.ide.eclipse.webflow.core.validator=true
51 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.subflowstate-org.springframework.ide.eclipse.webflow.core.validator=true
52 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.transition-org.springframework.ide.eclipse.webflow.core.validator=true
53 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.variable-org.springframework.ide.eclipse.webflow.core.validator=true
54 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.webflowstate-org.springframework.ide.eclipse.webflow.core.validator=true
55 |
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/pom.xml:
--------------------------------------------------------------------------------
1 |
3 | 4.0.0
4 | docker-spring-mvc
5 | docker-spring-mvc
6 | war
7 | 1.0.0-SNAPSHOT
8 | spring-mvc-docker-sample Maven Webapp
9 | http://maven.apache.org
10 |
11 |
12 | 4.3.2.RELEASE
13 |
14 |
15 |
16 |
17 | org.springframework
18 | spring-context
19 | ${springframework.version}
20 |
21 |
22 | org.springframework
23 | spring-aop
24 | ${springframework.version}
25 |
26 |
27 | org.springframework
28 | spring-webmvc
29 | ${springframework.version}
30 |
31 |
32 | org.springframework
33 | spring-web
34 | ${springframework.version}
35 |
36 |
37 | javax.servlet
38 | jstl
39 | 1.2
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 | org.apache.maven.plugins
48 | maven-compiler-plugin
49 | 3.2
50 |
51 | 1.7
52 | 1.7
53 |
54 |
55 |
56 | maven-war-plugin
57 | 3.0.0
58 |
59 | false
60 |
61 |
62 |
63 |
64 | docker-spring-mvc
65 |
66 |
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/src/main/java/org/pictolearn/springmvc/DockerController.java:
--------------------------------------------------------------------------------
1 | package org.pictolearn.springmvc;
2 |
3 | import org.springframework.stereotype.Controller;
4 | import org.springframework.ui.ModelMap;
5 | import org.springframework.web.bind.annotation.RequestMapping;
6 | import org.springframework.web.bind.annotation.RequestMethod;
7 |
8 | @Controller
9 | @RequestMapping("/docker")
10 | public class DockerController {
11 |
12 | @RequestMapping(method=RequestMethod.GET)
13 | public String sayHello(ModelMap model) {
14 | model.addAttribute("greeting", "Spring MVC Container running on docker");
15 | return "welcome";
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/src/main/main2.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/src/main/webapp/WEB-INF/spring-servlet.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
17 |
18 | /WEB-INF/views/
19 |
20 |
21 | .jsp
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/src/main/webapp/WEB-INF/views/welcome.jsp:
--------------------------------------------------------------------------------
1 | <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
31 |
44 |
45 |
46 |
53 |
54 |
55 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
74 |
75 |
76 |
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/src/main/webapp/WEB-INF/web.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 | docker-spring-mvc
9 |
10 |
11 | dispatcher
12 |
13 | org.springframework.web.servlet.DispatcherServlet
14 |
15 |
16 | contextConfigLocation
17 | /WEB-INF/spring-servlet.xml
18 |
19 | 1
20 |
21 |
22 |
23 | dispatcher
24 | /
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/src/main/webapp/index.jsp:
--------------------------------------------------------------------------------
1 | <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
2 |
3 |
4 | Docker image - Welcome page
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/src/main/webapp/resources/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pictolearn/docker-tutorial/875ddd62c7c4e8739962efb41dba88ea2e9d9591/Usecase-4/docker-spring-mvc/src/main/webapp/resources/apple-touch-icon.png
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/src/main/webapp/resources/browserconfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/src/main/webapp/resources/css/main.css:
--------------------------------------------------------------------------------
1 |
2 |
3 | /* ==========================================================================
4 | Author's custom styles
5 | ========================================================================== */
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/src/main/webapp/resources/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pictolearn/docker-tutorial/875ddd62c7c4e8739962efb41dba88ea2e9d9591/Usecase-4/docker-spring-mvc/src/main/webapp/resources/favicon.ico
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/src/main/webapp/resources/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pictolearn/docker-tutorial/875ddd62c7c4e8739962efb41dba88ea2e9d9591/Usecase-4/docker-spring-mvc/src/main/webapp/resources/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/src/main/webapp/resources/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pictolearn/docker-tutorial/875ddd62c7c4e8739962efb41dba88ea2e9d9591/Usecase-4/docker-spring-mvc/src/main/webapp/resources/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/src/main/webapp/resources/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pictolearn/docker-tutorial/875ddd62c7c4e8739962efb41dba88ea2e9d9591/Usecase-4/docker-spring-mvc/src/main/webapp/resources/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/src/main/webapp/resources/js/main.js:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/src/main/webapp/resources/js/vendor/npm.js:
--------------------------------------------------------------------------------
1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
2 | require('../../js/transition.js')
3 | require('../../js/alert.js')
4 | require('../../js/button.js')
5 | require('../../js/carousel.js')
6 | require('../../js/collapse.js')
7 | require('../../js/dropdown.js')
8 | require('../../js/modal.js')
9 | require('../../js/tooltip.js')
10 | require('../../js/popover.js')
11 | require('../../js/scrollspy.js')
12 | require('../../js/tab.js')
13 | require('../../js/affix.js')
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/src/main/webapp/resources/tile-wide.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pictolearn/docker-tutorial/875ddd62c7c4e8739962efb41dba88ea2e9d9591/Usecase-4/docker-spring-mvc/src/main/webapp/resources/tile-wide.png
--------------------------------------------------------------------------------
/Usecase-4/docker-spring-mvc/src/main/webapp/resources/tile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pictolearn/docker-tutorial/875ddd62c7c4e8739962efb41dba88ea2e9d9591/Usecase-4/docker-spring-mvc/src/main/webapp/resources/tile.png
--------------------------------------------------------------------------------
/Usecase-4/readme:
--------------------------------------------------------------------------------
1 | Use case 4 :
2 |
3 | Deploy a java war file into a tomcat container
--------------------------------------------------------------------------------
/Usecase-4/scripts.txt:
--------------------------------------------------------------------------------
1 |
2 | #Step 1: Building an image
3 | #Syntax: docker build -t
4 | -------------------------------------------------------------------
5 | docker build -t spring-mvc-image .
6 |
7 | #Step 2: List all the images
8 | #Syntax: docker images
9 | -------------------------------------------------------------------
10 | docker images
11 |
12 | #Step 3: Running a container from the image
13 | #Syntax: docker run -itd --name -p : image-name:tag
14 | # note in the above syntax:
15 | # -d : represents (detached mode), note that if you dont run this in detached mode, the life of the container will be the life of the terminal in which you are executing it.
16 | # -p : represents the host-port to container-port mapping, if you substitute it with -P you will get a random port allocated by docker
17 | # --name : represents the name of the container
18 | -------------------------------------------------------------------
19 | docker run -itd --name spring-mvc-container-1 -p 5555:8080 spring-mvc-image:latest
20 | docker run -itd --name spring-mvc-container-2 -p 5556:8080 spring-mvc-image:latest
21 |
22 | Step 4: View all the containers
23 | -------------------------------------------------------------------
24 | # Shows all the containers which are running
25 | docker ps
26 |
27 | #Shows all the containers stopped and running
28 | docker ps -a
29 |
30 |
31 | Step 5: Logging into the container
32 | -------------------------------------------------------------------
33 | #Note: The container must be started before we can do this.
34 | docker exec -it /bin/bash
35 |
36 | Step 6: Remove all the containers and images
37 | -------------------------------------------------------------------
38 | #Note: To remove an image the corresponding container built from that image will need to be removed.
39 |
40 | #Remove a specific container
41 | docker rm
42 |
43 | #Remove all containers
44 | docker rm $(docker ps -a -q)
45 |
46 | # remove image (note: no containers for this image should be running)
47 | docker rmi
48 |
49 | # remove all images
50 | docker rmi $(docker images -q)
--------------------------------------------------------------------------------
/Usecase-5/readme:
--------------------------------------------------------------------------------
1 | Use case 6 :
2 |
3 | Create an image consisting of UBUNTU with the necessary version of curl, vim , JDK and tomcat for use by teams around the company.
4 | Tag the image
5 | Push the image to the repository.
--------------------------------------------------------------------------------
/Usecase-5/tomcat7-jdk7/Dockerfile:
--------------------------------------------------------------------------------
1 | # Updated as of Aug 16, 2017
2 | # ----------------------------------------------------------------------------------
3 | # June 1, 2017: Oracle has archived JDK 7 and uses login to download JDK 7 hence
4 | # UBUNTU is unable to download JDK 7, we will hence demonstrate this with OPEN JDK 7
5 | #-----------------------------------------------------------------------------------
6 | # This file is used to create a docker image.
7 | # UBUNTU/CENTOS - > TOMCAT 7.x -> JDK 1.7 with all the updates, curl, vim
8 | FROM ubuntu:16.04
9 |
10 | #Author of the Docker File
11 | # MAINTAINER Pictolearn Note: MAINTAINER has been deprecated for LABEL,
12 | # LABEL is a key value pair
13 | LABEL "Maintainer"="Pictolearn"
14 |
15 | #Download the latest version of 7.x
16 | #Verify the version exists here or else change it: http://apache.rediris.es/tomcat/tomcat-7
17 | ENV TOMCAT_VERSION 7.0.94
18 |
19 | # Run an update to get all the security patches
20 | RUN apt-get -y update && apt-get -y upgrade
21 |
22 | #Install curl/vim incase you want to debug. VIM - vi editor, curl is a utility which acts as http client which can be run from the unix prompt.
23 | RUN apt-get -y install software-properties-common
24 |
25 | # June 1, 2017 : Commented out Oracle JDK installation procedure
26 | # RUN add-apt-repository ppa:webupd8team/java
27 | #The below instruction is very important, failing to add this will not allow you to install JDK
28 | # after the repository has been added.
29 | # RUN apt-get -y update
30 |
31 | # June 1, 2017 : Moved all installation packages to a single line
32 | #Install CURL and VIM editors
33 | RUN apt-get -y install curl wget vim
34 |
35 | # June 1, 2017 : Commented out Oracle JDK installation procedure
36 | # Accept the license
37 | # RUN echo "oracle-java7-installer shared/accepted-oracle-license-v1-1 boolean true" | debconf-set-selections
38 | # RUN apt-get -y install oracle-java7-installer
39 | # Define commonly used JAVA_HOME variable
40 | # ENV JAVA_HOME /usr/lib/jvm/java-7-oracle
41 |
42 | # June 1, 2017: Added OPEN JDK Installation
43 | RUN add-apt-repository ppa:openjdk-r/ppa
44 | RUN apt-get update -y
45 | RUN apt-get install -y openjdk-7-jdk
46 | ENV JAVA_HOME /usr/lib/jvm/java-1.7.0-openjdk-amd64
47 |
48 | # Get Tomcat
49 | # notice that i can add the same RUN command across multiple lines. This is done for Performance optimization
50 | # and does not create too many layers in the image. Use this format if you would like for better maintenance.
51 | RUN wget --quiet --no-cookies http://apache.rediris.es/tomcat/tomcat-7/v${TOMCAT_VERSION}/bin/apache-tomcat-${TOMCAT_VERSION}.tar.gz -O /tmp/tomcat.tgz && \
52 | tar xzvf /tmp/tomcat.tgz -C /opt && \
53 | mv /opt/apache-tomcat-${TOMCAT_VERSION} /opt/tomcat && \
54 | rm /tmp/tomcat.tgz && \
55 | rm -rf /opt/tomcat/webapps/examples && \
56 | rm -rf /opt/tomcat/webapps/docs && \
57 | rm -rf /opt/tomcat/webapps/ROOT
--------------------------------------------------------------------------------
/Usecase-5/tomcat7-jdk7/scripts.txt:
--------------------------------------------------------------------------------
1 |
2 | #Step 1: Building an image
3 | #Syntax: docker build -t
4 | -------------------------------------------------------------------
5 | docker build -t tomcat7-jdk7-image .
6 |
7 | #Step 2: List all the images
8 | #Syntax: docker images
9 | -------------------------------------------------------------------
10 | docker images
11 |
12 | Step 3: Create a repository on github for tomcat-7-jdk7
13 | -------------------------------------------------------------------
14 |
15 | Step 4: Verify image creation and push it into Docker Hub
16 | # In my case i did
17 | # docker login
18 | # docker tag tomcat7-jdk7-image:latest pictolearn/tomcat7-jdk7:latest
19 | # docker push pictolearn/tomcat7-jdk7:latest
20 |
21 | -------------------------------------------------------------------
22 | docker login
23 | docker tag : /:
24 | docker push /:
--------------------------------------------------------------------------------
/Usecase-5/tomcat8-jdk8/Dockerfile:
--------------------------------------------------------------------------------
1 | # Updated as of Aug 16, 2017
2 | # This file is used to create a docker image.
3 | # UBUNTU/CENTOS - > TOMCAT 8.x -> JDK 1.8 with all the updates, curl, vim
4 | FROM ubuntu:16.04
5 |
6 | #Author of the file
7 | MAINTAINER pictolearn
8 |
9 | #Download the latest version of 8.5.x
10 | # Verify the version exists here or else change it: http://apache.mirrors.tds.net/tomcat/tomcat-8/
11 | ENV TOMCAT_VERSION 8.5.42
12 |
13 | # Run an update to get all the security patches
14 | RUN apt-get update && apt-get -y upgrade
15 | RUN apt-get -y install software-properties-common
16 |
17 |
18 | #The below instruction is very important, failing to add this will not allow you to install JDK
19 | # after the repository has been added.
20 | RUN apt-get -y update
21 |
22 | #Install curl/vim incase you want to debug. VIM - vi editor, curl is a utility which acts as http client which can be run from the unix prompt.
23 | RUN apt-get -y install curl vim wget
24 |
25 | # Accept the license
26 | # NOTE and WARNING: ORACLE JDK is no longer licensed. Please install default jdk or OPEN JDK.
27 | # The initial set up was to get this working with JDK 7 but when the licensing terms for oracle changing we will install the default JDK
28 | # RUN echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 boolean true" | debconf-set-selections
29 | # RUN add-apt-repository ppa:webupd8team/java
30 | # RUN apt-get -y install oracle-java8-installer
31 | RUN add-apt-repository ppa:openjdk-r/ppa
32 | RUN apt-get update -y
33 | RUN apt-get install -y openjdk-8-jdk
34 | RUN apt-get -y install maven lsof
35 |
36 | # Define commonly used JAVA_HOME variable
37 | ENV JAVA_HOME /usr/lib/jvm/java-1.8.0-openjdk-amd64
38 |
39 | # Get Tomcat
40 | # notice that i can add the same RUN command across multiple lines
41 | RUN wget --quiet --no-cookies http://apache.mirrors.tds.net/tomcat/tomcat-8/v${TOMCAT_VERSION}/bin/apache-tomcat-${TOMCAT_VERSION}.tar.gz -O /tmp/tomcat.tgz && \
42 | tar xzvf /tmp/tomcat.tgz -C /opt && \
43 | mv /opt/apache-tomcat-${TOMCAT_VERSION} /opt/tomcat && \
44 | rm /tmp/tomcat.tgz && \
45 | rm -rf /opt/tomcat/webapps/examples && \
46 | rm -rf /opt/tomcat/webapps/docs && \
47 | rm -rf /opt/tomcat/webapps/ROOT
--------------------------------------------------------------------------------
/Usecase-5/tomcat8-jdk8/scripts.txt:
--------------------------------------------------------------------------------
1 |
2 | #Step 1: Building an image
3 | #Syntax: docker build -t
4 | -------------------------------------------------------------------
5 | docker build -t tomcat8-jdk8-image .
6 |
7 | #Step 2: List all the images
8 | #Syntax: docker images
9 | -------------------------------------------------------------------
10 | docker images
11 |
12 | Step 3: Create a repository on github for tomcat-8-jdk8
13 | -------------------------------------------------------------------
14 |
15 | Step 4: Verify image creation and push it into Docker Hub
16 | # In my case i did
17 | # docker login
18 | # docker tag tomcat8-jdk8-image:latest pictolearn/tomcat8-jdk8:latest
19 | # docker push pictolearn/tomcat8-jdk8:latest
20 |
21 | -------------------------------------------------------------------
22 | docker login
23 | docker tag : /:
24 | docker push /:
--------------------------------------------------------------------------------
/Usecase-6/Dockerfile:
--------------------------------------------------------------------------------
1 | # This file is used to create a docker image.
2 | # The image name created in the previous use case.
3 | #FROM pictolearn/tomcat7-jdk7
4 | FROM pictolearn/tomcat8-jdk8
5 |
6 |
7 | # Add deployment
8 | COPY docker-spring-mvc.war /opt/tomcat/webapps/ROOT.war
9 |
10 | #Set Catalina HOME and JAVA_OPTS
11 | ENV CATALINA_HOME /opt/tomcat
12 | ENV PATH $PATH:$CATALINA_HOME/bin
13 | ENV JAVA_OPTS="-Xms1024m -Xmx1024m -Xss8192k -XX:PermSize=500m -XX:CMSInitiatingOccupancyFraction=50 -XX:+ExplicitGCInvokesConcurrent -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:NewRatio=1 -XX:SurvivorRatio=1 -Dorg.apache.cxf.JDKBugHacks.imageIO=false"
14 |
15 | #Expose this a port to the host machine.
16 | EXPOSE 8080
17 | EXPOSE 8009
18 |
19 | # install supervisor for debugging in case image is not built correctly.
20 | # supervisor lets you debug information.
21 | #RUN apt-get -y install supervisor
22 | #RUN service supervisor restart
23 |
24 | #The WORKDIR instruction sets the working directory for any RUN, CMD, ENTRYPOINT, COPY and ADD instructions that follow it in the Dockerfile.
25 | WORKDIR /opt/tomcat
26 |
27 | # Launch Tomcat
28 | CMD ["/opt/tomcat/bin/catalina.sh", "run"]
29 |
30 | # Used for debugging in case something does not work and the container fails to start up because of the CMD instruction specified above.
31 | #ENTRYPOINT ["/bin/sh", "-c", "while true; do sleep 1; done"]
32 |
33 |
34 | # Added for debugging in case image does not get built
35 | # Install supervisor by commenting out that piece and make sure
36 | # all works fine.
37 | #ADD supervisord.conf /etc/supervisor/
38 | #CMD ["/usr/bin/supervisord", "-n"]
--------------------------------------------------------------------------------
/Usecase-6/docker-spring-mvc.war:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pictolearn/docker-tutorial/875ddd62c7c4e8739962efb41dba88ea2e9d9591/Usecase-6/docker-spring-mvc.war
--------------------------------------------------------------------------------
/Usecase-6/readme:
--------------------------------------------------------------------------------
1 | Use case 7 :
2 |
3 | Use an image create in use case 6 to deploy a war file.
4 | Demonstrates use of custom images for shipping to teams.
--------------------------------------------------------------------------------
/Usecase-6/scripts.txt:
--------------------------------------------------------------------------------
1 | Step 1: Remove the existing pictolearn/tomcat7-jdk7 and pictolearn/tomcat8-jdk8 images
2 | -------------------------------------------------------------------
3 | docker rmi pictolearn/tomcat7-jdk7
4 | docker rmi pictolearn/tomcat8-jdk8
5 |
6 | #Step 2: Building an image
7 | #Syntax: docker build -t
8 | -------------------------------------------------------------------
9 | docker build -t spring-mvc-tomcat7-jdk7-image .
10 | docker build -t spring-mvc-tomcat8-jdk8-image .
11 |
12 |
13 | #Step 3: Run a container from the image
14 | #Syntax: docker run -itd --name -p :
15 | ---------------------------------------------------------------------------------------------
16 | docker run -itd --name tomcat7-jdk7-container-1 -p 5555:8080 spring-mvc-tomcat7-jdk7-image
17 | docker run -itd --name tomcat8-jdk8-container-2 -p 5556:8080 spring-mvc-tomcat8-jdk8-image
--------------------------------------------------------------------------------
/Usecase-6/supervisord.conf:
--------------------------------------------------------------------------------
1 | [supervisord]
2 | nodaemon=true
--------------------------------------------------------------------------------
/Usecase-7/Dockerfile:
--------------------------------------------------------------------------------
1 | # This file is used to create a docker image.
2 | # The image name created in the previous use case.
3 | FROM pictolearn/tomcat7-jdk7
4 |
5 | #Set Catalina HOME and JAVA_OPTS
6 | ENV CATALINA_HOME /opt/tomcat
7 | ENV PATH $PATH:$CATALINA_HOME/bin
8 | ENV JAVA_OPTS="-Xms1024m -Xmx1024m -Xss8192k -XX:PermSize=500m -XX:CMSInitiatingOccupancyFraction=50 -XX:+ExplicitGCInvokesConcurrent -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:NewRatio=1 -XX:SurvivorRatio=1 -Dorg.apache.cxf.JDKBugHacks.imageIO=false"
9 |
10 | EXPOSE 8080
11 | EXPOSE 8009
12 |
13 | # Need a war file from the host to be mounted you can do so here. This instruction tells docker that content in those directories does not go in images and
14 | # can be accessed from other containers using the --volumes-from command line parameter. You have to run the container using -v
15 | #/path/on/host:/path/in/container to access directories from the host.
16 | VOLUME "/opt/tomcat/webapps"
17 | VOLUME "/opt/tomcat/logs"
18 |
19 | #The WORKDIR instruction sets the working directory for any RUN, CMD, ENTRYPOINT, COPY and ADD instructions that follow it in the Dockerfile.
20 | WORKDIR /opt/tomcat
21 |
22 | # Launch Tomcat
23 | CMD ["/opt/tomcat/bin/catalina.sh", "run"]
--------------------------------------------------------------------------------
/Usecase-7/docker-spring-mvc.war:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pictolearn/docker-tutorial/875ddd62c7c4e8739962efb41dba88ea2e9d9591/Usecase-7/docker-spring-mvc.war
--------------------------------------------------------------------------------
/Usecase-7/readme:
--------------------------------------------------------------------------------
1 | Use case 8 :
2 |
3 | Create a volume mount with the host.
--------------------------------------------------------------------------------
/Usecase-7/scripts.txt:
--------------------------------------------------------------------------------
1 | #Step 1: Building an image
2 | #Syntax: docker build -t
3 | -------------------------------------------------------------------
4 | docker build -t spring-mvc-tomcat7-jdk7-volume-sample .
5 |
6 | #Step 2: List all the images
7 | #Syntax: docker images
8 | -------------------------------------------------------------------
9 | docker images
10 |
11 |
12 | #Step 3: Run a container from the image with a volume mount
13 | #Container volume is the logs directory for example or war directory
14 | Example: docker run -itd -p : -v : --name=
15 | ---------------------------------------------------------------------------------------------
16 | docker run -itd -p 3333:8080 -v F:/pictolearn/Docker/logs:/opt/tomcat/logs -v F:/pictolearn/Docker/webapps:/opt/tomcat/webapps --name="tomcat-container-log" spring-mvc-tomcat7-jdk7-volume-sample
--------------------------------------------------------------------------------
/Usecase-8/docker-compose-mysql/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '3.1' #version of Docker-compose
2 | services: #Specifies the micro-service you want to run
3 | db: # create an image by the name mysql
4 | # NOTE: As of June, 2018 this has been updated to use the version of mysql 5.7.22
5 | image: mysql:5.7.22 # specify the image to download from docker hub,
6 | ports: ["3306:3306"] # expose ports to docker-machine , same as the EXPOSE command
7 | hostname: db #specify the name of a host which can be used by a container running on the same docker machine
8 | environment: # specify the password and default database to connect to, note that the default root user will be picked up.
9 | - MYSQL_ROOT_PASSWORD=root
10 | - MYSQL_DATABASE=Users
11 | container_name: mysqldatabase
12 | web: # create an image by the name web
13 | build: docker-mysql-connector
14 | image: docker-mysql-connector
15 | hostname: web
16 | tty: true # same as the "-t" option used in docker build "-t"
17 | depends_on: #Specifies that this container should start up after mysql is build and has started
18 | - db
19 | links: # you will specify this name or the alias name db: in the java code to connect, note you will not use localhost
20 | - db:db
21 | environment: #Specifies the environment variables
22 | - AWS_ACCESS_KEY=123456
--------------------------------------------------------------------------------
/Usecase-8/docker-compose-mysql/docker-mysql-connector/.classpath:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/Usecase-8/docker-compose-mysql/docker-mysql-connector/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | docker-mysql-connector
4 |
5 |
6 |
7 |
8 |
9 | org.eclipse.jdt.core.javabuilder
10 |
11 |
12 |
13 |
14 | org.eclipse.m2e.core.maven2Builder
15 |
16 |
17 |
18 |
19 |
20 | org.eclipse.jdt.core.javanature
21 | org.eclipse.m2e.core.maven2Nature
22 |
23 |
24 |
--------------------------------------------------------------------------------
/Usecase-8/docker-compose-mysql/docker-mysql-connector/.settings/org.eclipse.core.resources.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | encoding//src/main/java=UTF-8
3 | encoding//src/test/java=UTF-8
4 | encoding/=UTF-8
5 |
--------------------------------------------------------------------------------
/Usecase-8/docker-compose-mysql/docker-mysql-connector/.settings/org.eclipse.jdt.apt.core.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | org.eclipse.jdt.apt.aptEnabled=false
3 |
--------------------------------------------------------------------------------
/Usecase-8/docker-compose-mysql/docker-mysql-connector/.settings/org.eclipse.jdt.core.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
4 | org.eclipse.jdt.core.compiler.compliance=1.5
5 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
6 | org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
7 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
8 | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
9 | org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
10 | org.eclipse.jdt.core.compiler.processAnnotations=disabled
11 | org.eclipse.jdt.core.compiler.release=disabled
12 | org.eclipse.jdt.core.compiler.source=1.5
13 |
--------------------------------------------------------------------------------
/Usecase-8/docker-compose-mysql/docker-mysql-connector/.settings/org.eclipse.m2e.core.prefs:
--------------------------------------------------------------------------------
1 | activeProfiles=
2 | eclipse.preferences.version=1
3 | resolveWorkspaceProjects=true
4 | version=1
5 |
--------------------------------------------------------------------------------
/Usecase-8/docker-compose-mysql/docker-mysql-connector/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM pictolearn/ubuntu-jdk8
2 |
3 | #Author of the Docker File
4 | # MAINTAINER Pictolearn Note: MAINTAINER has been deprecated for LABEL,
5 | # LABEL is a key value pair
6 | LABEL "Maintainer"="Pictolearn"
7 |
8 | ADD . /usr/local/docker-mysql-connector
9 | RUN cd /usr/local/docker-mysql-connector && mvn assembly:assembly
10 | CMD ["java", "-cp", "/usr/local/docker-mysql-connector/target/docker-mysql-connector-1.0.0-SNAPSHOT-jar-with-dependencies.jar", "org.pictolearn.docker.mysql.MySQLConnection"]
--------------------------------------------------------------------------------
/Usecase-8/docker-compose-mysql/docker-mysql-connector/pom.xml:
--------------------------------------------------------------------------------
1 |
3 | 4.0.0
4 |
5 | docker-mysql-connector
6 | docker-mysql-connector
7 | 1.0.0-SNAPSHOT
8 | jar
9 |
10 | docker-mysql-connector
11 | http://maven.apache.org
12 |
13 |
14 | UTF-8
15 |
16 |
17 |
18 |
19 | mysql
20 | mysql-connector-java
21 | 6.0.6
22 |
23 |
24 |
25 |
26 |
27 |
28 | maven-assembly-plugin
29 | 2.6
30 |
31 |
32 | jar-with-dependencies
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/Usecase-8/docker-compose-mysql/docker-mysql-connector/src/main/java/org/pictolearn/docker/mysql/MySQLConnection.java:
--------------------------------------------------------------------------------
1 | package org.pictolearn.docker.mysql;
2 |
3 | import java.net.InetAddress;
4 | import java.sql.Connection;
5 | import java.sql.DriverManager;
6 | import java.util.Map;
7 |
8 | /**
9 | * MYSQL connection checker, tries to connect to mysql database.
10 | *
11 | */
12 | public class MySQLConnection {
13 | public static void main(String[] args) throws Exception {
14 | String ipAddr = InetAddress.getLocalHost().getHostName();
15 | System.out.println("Printing IP address of the host " + ipAddr);
16 | Map env = System.getenv();
17 | for (String envName : env.keySet()) {
18 | System.out.format("%s=%s%n", envName, env.get(envName));
19 | }
20 | Thread.sleep(10000);
21 |
22 | boolean connected = false;
23 | while (!connected) {
24 | try {
25 |
26 | // Note the way the mysql container is used here.
27 | String url = "jdbc:mysql://db:3306/Users?autoReconnect=false&useSSL=false";
28 | String user = "root";
29 | String password = "root";
30 | System.out.println("Connecting to URL " + url);
31 | // Load the Connector/J driver
32 | Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
33 | // Establish connection to MySQL
34 | Connection conn = DriverManager.getConnection(url, user, password);
35 | System.out.println("Connection was successful");
36 | connected = true;
37 | } catch (Exception e) {
38 | System.err.println("Error connecting to database");
39 | e.printStackTrace();
40 | Thread.sleep(5000);
41 | }
42 | }
43 |
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/Usecase-8/docker-compose-mysql/docker-mysql-connector/src/main/main1.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Usecase-8/docker-compose-mysql/ubuntu-jdk8/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM ubuntu:16.04
2 | MAINTAINER pictolearn
3 |
4 | RUN apt-get update && apt-get install -y python-software-properties software-properties-common
5 | RUN apt-get install -y iputils-ping
6 | # RUN add-apt-repository ppa:webupd8team/java
7 | RUN apt-get install -y vim
8 | RUN apt-get install -y mysql-client
9 | # Since the license for Oracle JDK 8 has changed this is no longer applicable hence use Open JDK 8 instead
10 | #RUN echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 boolean true" | debconf-set-selections
11 | # RUN apt-get update && apt-get install -y oracle-java8-installer maven
12 |
13 | RUN apt-get update && apt-get install -y openjdk-8-jdk maven
--------------------------------------------------------------------------------
/Usecase-8/readme:
--------------------------------------------------------------------------------
1 | Use case 9 :
2 |
3 | 1. Using docker-machine
4 | 2. Sample mysql program demonstrating docker compose.
--------------------------------------------------------------------------------
/Usecase-8/scripts.txt:
--------------------------------------------------------------------------------
1 | *****************************************************************
2 | Docker - machine: Windows and MAC
3 | *****************************************************************
4 |
5 | #Create 2 Docker machines (Remember both are virtual PCs running with different IPs)
6 | ------------------------------------------------------------------------
7 |
8 | Windows: docker-machine create -d hyperv --hyperv-virtual-switch "vs-1" hyperv-vm-1
9 | MAC: docker-machine create --driver virtualbox --virtualbox-disk-size "20000" hyperv-vm-1
10 |
11 | Windows: docker-machine create -d hyperv --hyperv-virtual-switch "vs-1" hyperv-vm-2
12 | MAC: docker-machine create --driver virtualbox --virtualbox-disk-size "20000" hyperv-vm-2
13 |
14 | #Verify if docker-machine is running on an IP
15 | ------------------------------------------------------------------------
16 | docker-machine ip hyperv-vm-1
17 | docker-machine ip hyperv-vm-2
18 |
19 | #Run the following command and whatever output you get run it again
20 | ------------------------------------------------------------------------
21 | docker-machine env hyperv-vm-1
22 | docker-machine env hyperv-vm-2
23 |
24 | #Run the output of the last line of the command which is there before.
25 | ------------------------------------------------------------------------
26 | & "C:\Program Files\Docker\Docker\Resources\bin\docker-machine.exe" env hyperv-vm-1 | Invoke-Expression
27 | & "C:\Program Files\Docker\Docker\Resources\bin\docker-machine.exe" env hyperv-vm-2 | Invoke-Expression
28 |
29 | #Verify the docker-machine is active.
30 | ----------------------------------------
31 | docker-machine ls
32 |
33 | Turning OFF and ON docker-machine
34 | -------------------------------------
35 | docker-machine stop hyperv-vm-1
36 | docker-machine stop hyperv-vm-2
37 | docker-machine start hyperv-vm-1
38 | docker-machine start hyperv-vm-2
39 |
40 | Remove docker-machine (Turn off docker-machine on hyper-v manager for windows before executing this command, for MAC no extra steps are required)
41 | docker-machine rm -f
42 |
43 | *****************************************************************
44 | Docker - compose commands to follow (Common for MAC and Windows)
45 | Manual Reference: https://docs.docker.com/compose/reference/
46 | *****************************************************************
47 | Step-1 # Builds the image
48 | -------------------------------------------------------------------
49 | docker-compose build
50 |
51 | #Build a specific image
52 | docker-compose build
53 |
54 | #Builds and run the containers
55 | docker-compose up --build -d
56 |
57 | Step-2 # View the image (All started and stopped containers)
58 | -------------------------------------------------------------------
59 | docker-compose ps
60 |
61 |
62 | Step-3 # Run the image in detached/non-detached mode (use -d)
63 | -------------------------------------------------------------------
64 | docker-compose up -d
65 | docker-compose up
66 | docker-compose up -d
67 |
68 |
69 | Step-4 # View logs and Tail logs
70 | -------------------------------------------------------------------
71 | # View logs
72 | docker-compose logs
73 |
74 | # Tail logs
75 | docker-compose logs -ft
76 |
77 | Step-5 # Login to the container
78 | -------------------------------------------------------------------
79 | docker-compose run /bin/bash
80 |
81 | Step-6 # Stops all containers related to the compose file
82 | --------------------------------------------------
83 | docker-compose stop
84 |
85 | #Stop and start specific container
86 | docker-compose stop
87 |
88 | #Stop and remove containers
89 | docker-compose down
--------------------------------------------------------------------------------
/Usecase-9/docker-compose-spring-boot/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '3.1' #version of Docker-compose
2 | services: #specifies 2 microservices "web" and "mysql"
3 | mysql:
4 | # NOTE: As of June, 2018 this has been updated to use the version of mysql 5.7.22
5 | image: mysql:5.7.22 # Expose a mysql image
6 | ports: ["8888:3306"] # Expose port 8888
7 | hostname: mysql # mysql hostname
8 | environment: # root username and password
9 | - MYSQL_ROOT_PASSWORD=root
10 | - MYSQL_DATABASE=Users
11 | web: # Web microservice
12 | build: pictolearn-docker
13 | image: pictolearn-docker
14 | ports: ["5555:8080"] # expose port 5555 for the rest client to connect to
15 | hostname: web
16 | tty: true
17 | # volumes: # you can include volumes, will be a TODO exercise
18 | # - /Users/AGanesan/docker/docker-tutorial/resources/docker-compose-spring-boot/logs:/usr/local/pictolearn/logs
19 | depends_on:
20 | - mysql
21 | links:
22 | - mysql
23 | environment:
24 | - DB_PORT=tcp://mysql:3306
--------------------------------------------------------------------------------
/Usecase-9/docker-compose-spring-boot/pictolearn-docker/.classpath:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/Usecase-9/docker-compose-spring-boot/pictolearn-docker/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | docker-compose-pictolearn
4 |
5 |
6 |
7 |
8 |
9 | org.eclipse.jdt.core.javabuilder
10 |
11 |
12 |
13 |
14 | org.springframework.ide.eclipse.core.springbuilder
15 |
16 |
17 |
18 |
19 | org.eclipse.m2e.core.maven2Builder
20 |
21 |
22 |
23 |
24 |
25 | org.springframework.ide.eclipse.core.springnature
26 | org.eclipse.jdt.core.javanature
27 | org.eclipse.m2e.core.maven2Nature
28 |
29 |
30 |
--------------------------------------------------------------------------------
/Usecase-9/docker-compose-spring-boot/pictolearn-docker/.settings/org.eclipse.core.resources.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | encoding//src/main/java=UTF-8
3 | encoding//src/main/resources=UTF-8
4 | encoding/=UTF-8
5 |
--------------------------------------------------------------------------------
/Usecase-9/docker-compose-spring-boot/pictolearn-docker/.settings/org.eclipse.jdt.core.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
4 | org.eclipse.jdt.core.compiler.compliance=1.8
5 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
6 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
7 | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
8 | org.eclipse.jdt.core.compiler.source=1.8
9 |
--------------------------------------------------------------------------------
/Usecase-9/docker-compose-spring-boot/pictolearn-docker/.settings/org.eclipse.m2e.core.prefs:
--------------------------------------------------------------------------------
1 | activeProfiles=
2 | eclipse.preferences.version=1
3 | resolveWorkspaceProjects=true
4 | version=1
5 |
--------------------------------------------------------------------------------
/Usecase-9/docker-compose-spring-boot/pictolearn-docker/Dockerfile:
--------------------------------------------------------------------------------
1 | #Install from the same image built i usecase - 8
2 | FROM pictolearn/ubuntu-jdk8
3 |
4 | # add the directory to the path
5 | ADD . /usr/local/pictolearn
6 |
7 | # Run maven
8 | RUN cd /usr/local/pictolearn && mvn clean package
9 |
10 | #Spring boot initiation
11 | CMD ["java","-jar","-DlogPath=/usr/local/pictolearn", "/usr/local/pictolearn/target/docker-compose-pictolearn-1.0.0-SNAPSHOT.jar"]
--------------------------------------------------------------------------------
/Usecase-9/docker-compose-spring-boot/pictolearn-docker/pom.xml:
--------------------------------------------------------------------------------
1 |
3 | 4.0.0
4 |
5 | docker-compose-pictolearn
6 | docker-compose-pictolearn
7 | 1.0.0-SNAPSHOT
8 |
9 | org.pictolearn.redis
10 | http://maven.apache.org
11 |
12 |
13 | UTF-8
14 | 1.8
15 |
16 |
17 |
18 | org.springframework.boot
19 | spring-boot-starter-parent
20 | 1.4.1.RELEASE
21 |
22 |
23 |
24 |
25 | org.springframework.boot
26 | spring-boot-starter-web
27 |
28 |
29 | org.springframework.boot
30 | spring-boot-starter-actuator
31 |
32 |
33 |
34 | org.springframework.boot
35 | spring-boot-starter
36 |
37 |
38 | org.springframework.boot
39 | spring-boot-starter-logging
40 |
41 |
42 |
43 |
44 | org.springframework.boot
45 | spring-boot-starter-data-jpa
46 |
47 |
48 | org.springframework.boot
49 | spring-boot-starter-log4j2
50 |
51 |
52 | org.springframework.boot
53 | spring-boot-starter-test
54 |
55 |
56 |
57 | mysql
58 | mysql-connector-java
59 | 6.0.4
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 | org.apache.maven.plugins
68 | maven-surefire-plugin
69 |
70 | true
71 |
72 |
73 |
74 | org.springframework.boot
75 | spring-boot-maven-plugin
76 |
77 |
78 | maven-failsafe-plugin
79 |
80 |
81 |
82 | integration-test
83 | verify
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
--------------------------------------------------------------------------------
/Usecase-9/docker-compose-spring-boot/pictolearn-docker/scripts/post.json:
--------------------------------------------------------------------------------
1 | {
2 | "name":"test",
3 | "email" : "test@pictolearn.com"
4 | }
5 |
--------------------------------------------------------------------------------
/Usecase-9/docker-compose-spring-boot/pictolearn-docker/scripts/test.txt:
--------------------------------------------------------------------------------
1 | curl -X POST -H "Content-Type: application/json" --data "@./post.json" http://localhost:8080/add
--------------------------------------------------------------------------------
/Usecase-9/docker-compose-spring-boot/pictolearn-docker/scripts/util.sql:
--------------------------------------------------------------------------------
1 | create database Users;
2 |
3 | use Users;
4 |
5 | CREATE TABLE users (
6 | id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
7 | name VARCHAR(80) NOT NULL,
8 | email VARCHAR(50) NOT NULL
9 | );
--------------------------------------------------------------------------------
/Usecase-9/docker-compose-spring-boot/pictolearn-docker/src/main/java/org/pictolearn/docker/Application.java:
--------------------------------------------------------------------------------
1 | package org.pictolearn.docker;
2 |
3 | import java.util.Arrays;
4 |
5 | import org.apache.logging.log4j.LogManager;
6 | import org.apache.logging.log4j.Logger;
7 | import org.springframework.boot.CommandLineRunner;
8 | import org.springframework.boot.SpringApplication;
9 | import org.springframework.boot.autoconfigure.SpringBootApplication;
10 | import org.springframework.context.ApplicationContext;
11 | import org.springframework.context.annotation.Bean;
12 |
13 | /**
14 | * Spring boot startup
15 | * @author agane
16 | *
17 | */
18 | @SpringBootApplication(scanBasePackages= {"org.pictolearn"})
19 | public class Application {
20 |
21 | private static final Logger logger = LogManager.getLogger(Application.class);
22 |
23 | public static void main(String[] args) {
24 | SpringApplication.run(Application.class, args);
25 | }
26 |
27 | @Bean
28 | public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
29 | return args -> {
30 |
31 | logger.debug("Let's inspect the beans provided by Spring Boot:");
32 |
33 | String[] beanNames = ctx.getBeanDefinitionNames();
34 | Arrays.sort(beanNames);
35 | for (String beanName : beanNames) {
36 | logger.debug(beanName);
37 | }
38 |
39 | };
40 | }
41 | }
--------------------------------------------------------------------------------
/Usecase-9/docker-compose-spring-boot/pictolearn-docker/src/main/java/org/pictolearn/docker/controller/UserController.java:
--------------------------------------------------------------------------------
1 | package org.pictolearn.docker.controller;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | import org.apache.logging.log4j.LogManager;
7 | import org.apache.logging.log4j.Logger;
8 | import org.pictolearn.docker.dao.UserDao;
9 | import org.pictolearn.docker.model.User;
10 | import org.springframework.beans.factory.annotation.Autowired;
11 | import org.springframework.web.bind.annotation.PathVariable;
12 | import org.springframework.web.bind.annotation.RequestBody;
13 | import org.springframework.web.bind.annotation.RequestMapping;
14 | import org.springframework.web.bind.annotation.ResponseBody;
15 | import org.springframework.web.bind.annotation.RestController;
16 |
17 | @RestController
18 | public class UserController {
19 |
20 | private static final Logger logger = LogManager.getLogger(UserController.class);
21 |
22 | private static final String SUCCESS = "success";
23 |
24 | @Autowired
25 | private UserDao userDao;
26 |
27 | @RequestMapping(value = "/delete/{id}")
28 | @ResponseBody
29 | public String delete(@PathVariable("id") long id) {
30 | try {
31 | User user = new User(id);
32 | userDao.delete(user);
33 | } catch (Exception ex) {
34 | logger.error("Error deleting the user : {} ", id);
35 | }
36 | return SUCCESS;
37 | }
38 |
39 | @RequestMapping(value = "/list")
40 | @ResponseBody
41 | public List getAll() {
42 | try {
43 | return userDao.getAll();
44 | } catch (Exception ex) {
45 | logger.error("List users", ex);
46 | }
47 | return new ArrayList();
48 | }
49 |
50 | @RequestMapping(value = "/add")
51 | @ResponseBody
52 | public String add(@RequestBody User user) {
53 | try {
54 | long id = userDao.save(user);
55 | logger.debug("User has been saved successfully with id:{}", id);
56 | } catch (Exception ex) {
57 | logger.error("Error find the user by email", ex);
58 | }
59 | return SUCCESS;
60 | }
61 |
62 | }
63 |
--------------------------------------------------------------------------------
/Usecase-9/docker-compose-spring-boot/pictolearn-docker/src/main/java/org/pictolearn/docker/dao/DatabaseConfig.java:
--------------------------------------------------------------------------------
1 | package org.pictolearn.docker.dao;
2 |
3 | import java.util.Properties;
4 |
5 | import javax.sql.DataSource;
6 |
7 | import org.apache.logging.log4j.LogManager;
8 | import org.apache.logging.log4j.Logger;
9 | import org.springframework.beans.factory.annotation.Value;
10 | import org.springframework.context.annotation.Bean;
11 | import org.springframework.context.annotation.Configuration;
12 | import org.springframework.jdbc.datasource.DriverManagerDataSource;
13 | import org.springframework.orm.hibernate5.HibernateTransactionManager;
14 | import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
15 | import org.springframework.transaction.annotation.EnableTransactionManagement;
16 |
17 | /**
18 | * Database configurations being injected by spring
19 | *
20 | * @author agane
21 | *
22 | */
23 | @Configuration
24 | @EnableTransactionManagement
25 | public class DatabaseConfig {
26 |
27 | private static final Logger logger = LogManager.getLogger(DatabaseConfig.class);
28 |
29 | @Value("${db.driver}")
30 | private String DB_DRIVER;
31 |
32 | @Value("${db.password}")
33 | private String DB_PASSWORD;
34 |
35 | @Value("${db.url}")
36 | private String DB_URL;
37 |
38 | @Value("${db.username}")
39 | private String DB_USERNAME;
40 |
41 | @Value("${hibernate.dialect}")
42 | private String HIBERNATE_DIALECT;
43 |
44 | @Value("${hibernate.show_sql}")
45 | private String HIBERNATE_SHOW_SQL;
46 |
47 | @Value("${hibernate.hbm2ddl.auto}")
48 | private String HIBERNATE_HBM2DDL_AUTO;
49 |
50 | @Value("${entitymanager.packagesToScan}")
51 | private String ENTITYMANAGER_PACKAGES_TO_SCAN;
52 |
53 | @Bean
54 | public DataSource dataSource() {
55 | DriverManagerDataSource dataSource = new DriverManagerDataSource();
56 | dataSource.setDriverClassName(DB_DRIVER);
57 | dataSource.setUrl(DB_URL);
58 | dataSource.setUsername(DB_USERNAME);
59 | dataSource.setPassword(DB_PASSWORD);
60 | logger.debug("DB_URL " + DB_URL);
61 | return dataSource;
62 | }
63 |
64 | @Bean
65 | public LocalSessionFactoryBean sessionFactory() {
66 | LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
67 | logger.debug("DB_URL " + DB_URL);
68 | sessionFactoryBean.setDataSource(dataSource());
69 | sessionFactoryBean.setPackagesToScan(ENTITYMANAGER_PACKAGES_TO_SCAN);
70 | Properties hibernateProperties = new Properties();
71 | hibernateProperties.put("hibernate.dialect", HIBERNATE_DIALECT);
72 | hibernateProperties.put("hibernate.show_sql", HIBERNATE_SHOW_SQL);
73 | hibernateProperties.put("hibernate.hbm2ddl.auto", HIBERNATE_HBM2DDL_AUTO);
74 | sessionFactoryBean.setHibernateProperties(hibernateProperties);
75 |
76 | return sessionFactoryBean;
77 | }
78 |
79 | @Bean
80 | public HibernateTransactionManager transactionManager() {
81 | HibernateTransactionManager transactionManager =
82 | new HibernateTransactionManager();
83 | transactionManager.setSessionFactory(sessionFactory().getObject());
84 | return transactionManager;
85 | }
86 |
87 | }
88 |
--------------------------------------------------------------------------------
/Usecase-9/docker-compose-spring-boot/pictolearn-docker/src/main/java/org/pictolearn/docker/dao/UserDao.java:
--------------------------------------------------------------------------------
1 | package org.pictolearn.docker.dao;
2 |
3 | import java.util.List;
4 |
5 | import javax.transaction.Transactional;
6 |
7 | import org.hibernate.Session;
8 | import org.hibernate.SessionFactory;
9 | import org.pictolearn.docker.model.User;
10 | import org.springframework.beans.factory.annotation.Autowired;
11 | import org.springframework.stereotype.Repository;
12 |
13 | /**
14 | * DAO with helper methods to interact with hibernate.
15 | *
16 | * @author agane
17 | *
18 | */
19 | @Repository
20 | @Transactional
21 | public class UserDao {
22 |
23 | @Autowired
24 | private SessionFactory _sessionFactory;
25 |
26 | private Session getSession() {
27 | return _sessionFactory.getCurrentSession();
28 | }
29 |
30 | /**
31 | * Save the object to the db
32 | * @param user
33 | * @return
34 | */
35 | public Long save(User user) {
36 | return (Long) getSession().save(user);
37 | }
38 |
39 | /**
40 | * delete the object
41 | * @param user
42 | */
43 | public void delete(User user) {
44 | getSession().delete(user);
45 | return;
46 | }
47 |
48 | /**
49 | * returns all the users
50 | * @return
51 | */
52 | @SuppressWarnings("unchecked")
53 | public List getAll() {
54 | return getSession().createQuery("from User").list();
55 | }
56 |
57 | /**
58 | * find user by email
59 | * @param email
60 | * @return
61 | */
62 | public User getByEmail(String email) {
63 | return (User) getSession().createQuery(
64 | "from User where email like ':email")
65 | .setParameter("email", email)
66 | .uniqueResult();
67 | }
68 |
69 | /**
70 | * find user by id
71 | * @param id
72 | * @return
73 | */
74 | public User getById(long id) {
75 | return (User) getSession().load(User.class, id);
76 | }
77 |
78 | /**
79 | * Update user
80 | * @param user
81 | */
82 | public void update(User user) {
83 | getSession().update(user);
84 | return;
85 | }
86 |
87 | }
88 |
--------------------------------------------------------------------------------
/Usecase-9/docker-compose-spring-boot/pictolearn-docker/src/main/java/org/pictolearn/docker/model/User.java:
--------------------------------------------------------------------------------
1 | package org.pictolearn.docker.model;
2 |
3 | import java.io.Serializable;
4 |
5 | import javax.persistence.Entity;
6 | import javax.persistence.GeneratedValue;
7 | import javax.persistence.GenerationType;
8 | import javax.persistence.Id;
9 | import javax.persistence.Table;
10 | import javax.validation.constraints.NotNull;
11 | import javax.validation.constraints.Size;
12 |
13 | /**
14 | * The following class contains an id, email and name.
15 | * @author agane
16 | *
17 | */
18 | @Entity
19 | @Table(name="users")
20 | public class User implements Serializable{
21 |
22 | /**
23 | *
24 | */
25 | private static final long serialVersionUID = 1694243216355681366L;
26 |
27 | @Id
28 | @GeneratedValue(strategy = GenerationType.AUTO)
29 | private long id;
30 |
31 | @NotNull
32 | @Size(min = 3, max = 80)
33 | private String email;
34 |
35 | @NotNull
36 | @Size(min = 2, max = 80)
37 | private String name;
38 |
39 | public User() { }
40 |
41 | public User(long id) {
42 | this.id = id;
43 | }
44 |
45 | public User(String email, String name) {
46 | this.email = email;
47 | this.name = name;
48 | }
49 |
50 | public long getId() {
51 | return id;
52 | }
53 |
54 | public void setId(long value) {
55 | this.id = value;
56 | }
57 |
58 | public String getEmail() {
59 | return email;
60 | }
61 |
62 | public void setEmail(String value) {
63 | this.email = value;
64 | }
65 |
66 | public String getName() {
67 | return name;
68 | }
69 |
70 | public void setName(String value) {
71 | this.name = value;
72 | }
73 |
74 | } // class User
75 |
--------------------------------------------------------------------------------
/Usecase-9/docker-compose-spring-boot/pictolearn-docker/src/main/main5.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Usecase-9/docker-compose-spring-boot/pictolearn-docker/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | #Spring Booth properties
2 | app.name=Pictolearn-Docker-Java
3 | app.description=${app.name} is a Spring Boot application
4 | logging.path=logs
5 |
6 | # Database Properties
7 | db.driver=com.mysql.cj.jdbc.Driver
8 |
9 | # Note the URL Here, it has "mysql" which is the host name specified in the "links" section of docker-compose
10 | db.url=jdbc:mysql://mysql:3306/Users?autoReconnect=true&useSSL=false
11 | db.username=root
12 | db.password=root
13 |
14 | # Hibernate
15 | # MYSQL Dialect
16 | hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
17 |
18 | # Print SQL statements in the logs
19 | hibernate.show_sql=true
20 |
21 | # Create and drop tables everytime
22 | hibernate.hbm2ddl.auto=create-drop
23 |
24 | # Scan packages with annotations
25 | entitymanager.packagesToScan=org.pictolearn
--------------------------------------------------------------------------------
/Usecase-9/docker-compose-spring-boot/pictolearn-docker/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | logs
5 |
6 |
7 |
8 |
10 |
11 | %d{dd/MMM/yyyy HH:mm:ss,SSS}- %p %c [%t] %m%n
12 |
13 |
14 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/Usecase-9/readme:
--------------------------------------------------------------------------------
1 | Use case 10 :
2 |
3 | 1. Using docker-machine
4 | 2. Docker compose app spawning multiple containers, one for nginx , multiple spring boot and 1 my sql containers
--------------------------------------------------------------------------------
/Usecase-9/scripts.txt:
--------------------------------------------------------------------------------
1 | *****************************************************************
2 | Docker - compose commands to follow (Common for MAC and Windows)
3 | Manual Reference: https://docs.docker.com/compose/reference/
4 | *****************************************************************
5 | Step-1 # Builds the image
6 | -------------------------------------------------------------------
7 | docker-compose build
8 |
9 | #Build a specific image
10 | docker-compose build
11 |
12 | #Builds and run the containers
13 | docker-compose up --build -d
14 |
15 | Step-2 # Run the image in detached/non-detached mode (use -d)
16 | -------------------------------------------------------------------
17 | docker-compose up -d
18 | docker-compose up
19 | docker-compose up -d
20 |
21 | Step-3 # View the image (All started and stopped containers)
22 | -------------------------------------------------------------------
23 | docker-compose ps
24 |
25 | Step-4 # View logs and Tail logs
26 | -------------------------------------------------------------------
27 | # View logs
28 | docker-compose logs
29 |
30 | # Tail logs
31 | docker-compose logs -ft
32 |
33 | Step-5 # Login to the container
34 | -------------------------------------------------------------------
35 | docker-compose run /bin/bash
36 |
37 | Step-6 # Stops all containers related to the compose file
38 | -------------------------------------------------------------------
39 | Use a RESTFul Client to test the APIs
40 |
41 | Step-7 # Stops all containers related to the compose file
42 | --------------------------------------------------
43 | docker-compose stop
44 |
45 | #Stop and start specific container
46 | docker-compose stop
47 |
48 | #Stop and remove containers
49 | docker-compose down
--------------------------------------------------------------------------------
/readme:
--------------------------------------------------------------------------------
1 | Goal of the course:
2 | What is docker? Overview
3 | Docker installation
4 | - Ubuntu
5 | - Ubuntu on Windows
6 | - Mac
7 | Git installation
8 | Visual Studio Code with Docker plugin.
9 | Basics
10 | 1. Images.
11 | 2. Containers.
12 | 3. Docker basic commands.
13 | 4. Docker hub and searching within docker hub.
14 |
15 | Use case 1 : Build - > Ship - > Run an httpd instance running an html page.
16 |
17 | a. How to download an image.
18 | b. How to run a container from the image.
19 | c. How to run a container directly
20 | d. How to view containers which are running
21 | e. How to view images which are installed.
22 | f. Stopping a container
23 | g. Starting a container
24 | h. Removing a container
25 | i. Removing images.
26 | j. docker logs.
27 | k. running on a random port
28 |
29 | Recap
30 |
31 | Use case 2 : Build - > Ship - > Run an nginx instance running an html page.
32 |
33 | a. How to download an image.
34 | b. How to run a container from the image.
35 | c. How to run a container directly
36 | d. How to view containers which are running
37 | e. How to view images which are installed.
38 | f. Stopping a container
39 | g. Starting a container
40 | h. Removing a container
41 | i. Removing images.
42 | j. docker logs.
43 | k. running on a random port (-P)
44 | Recap
45 |
46 | Use case 3 : Run a simple java Hello World Program
47 |
48 | Use case 4 : Build - > Ship - > Run a tomcat instance
49 | Show java version
50 | a. How to download an image.
51 | b. How to run a container from the image.
52 | c. How to run a container directly
53 | d. How to view containers which are running
54 | e. How to view images which are installed.
55 | f. Stopping a container
56 | g. Starting a container
57 | h. Removing a container
58 | i. Removing images.
59 | j. docker logs.
60 |
61 | Use case 5 : Build - > Ship : Build a custom image contains CENTS OS, JDK 1.7 and Tomcat 7
62 | a. Log into the terminal show the installation of the utilities
63 | b. docker tag the build
64 | c. docker tag
65 | d. docker login and creds stored in WINDOWS C:\Users\\.docker\config.json and in MAC/UNIX in ~/.docker
66 | e. docker push
67 |
68 | Use case 6 : Docker create another image with the war file using the image created in usecase 5
69 | a. Create another image from the image in Use case 4
70 | b. Run a container, login to the container, change some setting
71 | c. docker commit a container as an image
72 | d. docker push
73 | e. docker inspect container and image. (docker inspect --format='{{.Id}}' 1c6c4ba72862)
74 |
75 | Use case 6 : Mounting logs to the host machines
76 | Use case 7 : Create an image from a container
77 | Use case 8 : Using Docker machine
78 | Use case 9 : Microservices with docker-compose
79 |
80 | a. Create a simple microservice with nginx- AngularJS2, Spring-MVC-Hibernate-MYSQL and spawn a container with docker-compose.
81 | b. Display remote debugging inside the container.
82 | c. Hot deploy a container.
83 |
84 | Use case 10 : Introduction to docker swarm and how to run clusters using docker
--------------------------------------------------------------------------------
/resources/install-scripts/MAC/uninstallDocker.sh:
--------------------------------------------------------------------------------
1 | docker-machine stop $(docker-machine ls -q);
2 | docker-machine rm -f $(docker-machine ls -q);
3 | docker stop $(docker ps -a -q)
4 | docker rm $(docker ps -a -q)
5 | docker rmi $(docker images)
6 | sudo rm -rf /Applications/Docker
7 | sudo rm -f /usr/local/bin/docker
8 | sudo rm -f /usr/local/bin/boot2docker
9 | sudo rm -f /usr/local/bin/docker-machine
10 | sudo rm -r /usr/local/bin/docker-machine-driver*
11 | sudo rm -f /usr/local/bin/docker-compose
--------------------------------------------------------------------------------
/resources/install-scripts/ubuntu/installDocker.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # Instructions to install docker
3 | sudo apt-get -y install docker
4 | sudo apt-get -y install docker-engine
5 | sudo apt-get -y install docker-compose
6 | sudo reboot
--------------------------------------------------------------------------------
/resources/install-scripts/ubuntu/postInstallDocker.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | sudo groupadd docker
3 | sudo usermod -aG docker $USER
4 | sudo service docker restart
5 | sudo reboot
--------------------------------------------------------------------------------
/resources/install-scripts/ubuntu/preInstallDocker.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # Generic instructions to upgrade UBUNTU and add the repository URL for docker.
4 | sudo apt-get -y update
5 | sudo apt-get -y install apt-transport-https ca-certificates
6 | sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
7 | sudo echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" >> /etc/apt/sources.list.d/docker.list
8 | sudo apt-get -y update
9 | sudo apt-cache policy docker-engine
10 | sudo apt-get -y update
11 | sudo apt-get -y install linux-image-extra-$(uname -r) linux-image-extra-virtual
--------------------------------------------------------------------------------
/resources/install-scripts/ubuntu/uninstallDocker.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | sudo apt-get -y purge --auto-remove docker-compose
3 | sudo apt-get -y purge --auto-remove docker
4 | sudo apt-get -y purge --auto-remove docker-engine
5 | sudo apt-get -y autoclean
6 | sudo rm -rf /var/lib/docker
7 | sudo rm /etc/apparmor.d/docker
8 | sudo groupdel docker
9 | sudo reboot
--------------------------------------------------------------------------------
/resources/install-scripts/ubuntu/upgradeDocker.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | sudo apt-get -y upgrade docker
3 | sudo apt-get -y upgrade docker-engine
4 | sudo apt-get -y upgrade docker-compose
5 | sudo service docker restart
6 | sudo reboot
7 |
--------------------------------------------------------------------------------
/resources/scripts.txt:
--------------------------------------------------------------------------------
1 |
2 | # Build an image
3 | docker build -t
4 |
5 | # run an image or run a container directly from a specific image
6 | docker run -it -d -p: --name :tag
7 |
8 | -i (interactive)
9 | -t (TTY)
10 | -d (Detached) : Run it in detached mode or else the life time of the container will be only as long as you run the terminal.
11 | -P : Docker assigned default ports which will access the required port in the container (meaning the host machine can get assigned 32769 : pointing to default port of the image)
12 | --name : represents a default name, if it is not specified the docker daemon will allocate a unique name
13 | image-name : specifies the image to download from the repostory
14 | tag : defaults to latest, a version for the given image can be specified.
15 |
16 |
17 | # allows you to view the logs in the container
18 | docker logs
19 |
20 | # Allow you to tail logs
21 | docker logs -ft
22 |
23 | # List all containers running and stopped
24 | docker ps -a
25 |
26 | # List all containers running
27 | docker ps
28 |
29 | # List all images available
30 | docker images
31 |
32 | # stop a specified container
33 | docker stop
34 |
35 | # stop all containers
36 | docker stop $(docker ps -a -q)
37 |
38 | # remove image (note: no containers for this image should be running)
39 | docker rmi
40 |
41 | # remove all images
42 | docker rmi $(docker images -a)
43 |
44 | #Remove a specific container
45 | docker rm
46 |
47 | #Remove all containers
48 | docker rm $(docker ps -a -q)
49 |
50 | # log in to the shell of the container. Typically entry-point refers to /bin/bash
51 | docker exec -it
52 |
53 |
54 | docker login
55 | docker tag : /:
56 | docker commit /:
57 | docker push /:
58 | docker inspect
59 | docker inspect
60 |
61 |
62 | #Container volume is the logs directory for example or war directory
63 | docker run -itd -P -v :
64 |
65 |
66 | #docker-machine commands
67 | docker-machine version
68 |
69 | #Version of docker-machine
70 | docker-machine ls
71 |
72 | #Create a docker-machine
73 | docker-machine create --driver virtualbox --virtualbox-disk-size "20000"
74 | docker-machine create --driver hyperv
75 | docker-machine create -d hyperv --hyperv-virtual-switch ""
76 |
77 | #docker-machine ip default provides the ip of the name of machine "default"
78 | docker-machine ip default
79 |
80 | # Telling docker to talk to the new machine
81 | docker-machine env default
82 |
83 | #Stop docker-machine
84 | docker-machine stop default
85 |
86 | #Start docker-machine
87 | docker-machine start default
88 |
89 | # Removing a docker machine
90 | docker-machine rm
91 |
92 | #remove all docker machines
93 | docker-machine rm -f $(docker-machine ls -q);
94 |
95 | # Runs the container
96 | docker-compose up
97 |
98 | # Runs in detached mode
99 | docker-compose up -d
100 |
101 | # Builds the image
102 | docker-compose build
103 |
104 | #Stops the container
105 | docker-compose stop
106 |
107 | #Starts the container
108 | docker-compose start
109 |
110 | # Equivalent to docker exec
111 | docker-compose run /bin/bash
112 |
113 | # Build a specific image.
114 | docker-compose up --build
115 |
116 | # View logs
117 | docker-compose logs
118 |
119 | # Tail logs
120 | docker-compose logs -ft
121 |
122 | # Update specific container
123 | docker-compose up -d --no-deps
124 |
125 | # Stop all containers
126 | docker-compose down
127 |
128 | #Remove errored out images
129 | docker rmi $(docker images | grep "^" | awk "{print $3}")
130 |
131 |
132 | #Shut down containers, remove all images and rebuild images with docker-compose
133 | docker-compose down
134 | docker-compose rm -f
135 | docker-compose pull
136 | docker-compose up --build -d
137 |
138 | # How to find the disk space used by docker
139 | docker system df
140 | du -sch /var/lib/docker/containers
141 | du -c /var/lib/docker/ | head -15 | sort -rn
142 |
143 | # cleaning up old containers and images from docker and release resources
144 | docker rm $(docker ps -qa --no-trunc --filter "status=exited")
145 | docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
146 | docker rmi $(docker images | grep "none" | awk '/ / { print $3 }')
147 | docker volume rm $(docker volume ls -qf dangling=true)
148 | docker volume ls -qf dangling=true | xargs -r docker volume rm
149 | docker network rm $(docker network ls | grep "bridge" | awk '/ / { print $1 }')
150 | docker network prune
151 | docker system prune
152 | docker system prune -af
--------------------------------------------------------------------------------