├── .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 |
55 |

Docker Company 2016

56 |
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 |
47 |
48 |

Hello, Docker!

49 |

${greeting}

50 |

Learn more »

51 |
52 |
53 | 54 |
55 |
56 |

Docker Company 2016

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