Everyone will come on Saturday morning sessions. This is a workshop session, docker for J2E developers. First of all, a few organizational things. This room has no additional audio, so speakers have to be loud and they will try to do their best, but please be quiet, respect the speakers, and if you need to leave, try to not make noise with the doors. So there will be no break in this session, so if you want to move some tall in a half of this workshop, again be quiet and check the blocks here for the right time. A few more generic things. We really want your feedback, so please give us feedback about Dekom generally and this workshop. You can see some links to Twitter and to the feedback form on the backside of your leaflets, of your programs. And one more thing, there will be lightning sessions and you can vote for your favorite one. The list of the lightning session proposals is just before the D1.5 room, so just go to the D building after the workshop, of course, and vote for your most favorite session. For this workshop, there are some materials on the USB. We have only limited set and they are supposed to be for all the workshops, so you can take them and give us back the USB page. So that's everything from the organization stuff. So I would like to introduce Raphael Pejavides, George Gastaldi, they are both software engineers in J-BOSS projects. George is the project lead of J-BOSS sports and Raphael... Actually, J-BOSS developer materials lead. Okay, docker master. So, guys, it's all yours. Thank you. Okay, so thank you for coming. Today we will introduce you to the world of docker for Java developers. Who develops in Java? Cool, that's cool. Have you guys used docker before? Okay, cool. So, Raphael, we will start by giving the agenda. The agenda? Okay, so this is what we will see. Probably people who have worked with docker before should already be prepared to be facing that the docker base because it will be something that they had contact before. But this is what we will see. We will make an introduction of docker. Then we will see how to create an image and how to deploy Java applications to existing containers. And finally, we will see how to mix, how to run separated containers using docker compose. And finally, we will have five minutes for questions and answers. This material is available under this URL. You can access it on your machine. And once you access this URL, you will arrive on this page. It's exclusively prepared material for the DevConf. And this whole material would take approximately three hours to complete all of them because it involves downloading the docker image, it involves setting up your whole machine. So, since we just have one hour and a half, and also, of course, that would be, these three hours would increase a lot if we download the image using Wi-Fi, using the conference network. So, what I propose to you is that I will show you, I will run the lab in my computer. And then, in your home, you can access your URL and do it yourself. If you have any questions, any doubt, you can send me an email, send me a Twitter. This, this, that handle is my Twitter account. This is the George Gustavs Twitter handle. So, I would be very pleased to answer any questions that you have, that you have. Okay, so why I'm showing this Twitter IP here? It's mostly because the, I'm running a registry here in my machine. So, if we use docker, we need to download the docker image instead of downloading from the Internet because of the Wi-Fi connection, we could download from a machine, okay, to speed up the process. But as I told you, we will not use this approach, okay? So, first of all, this lab shows how to set up your environment. Of course, the first thing that you need is to install docker. Actually, people who are running Linux, Windows and Mac, docker provides a, provides a tool called docker2box. Docker2box comes with the docker, will come with a virtual box, will come with docker machine and docker compose. Why is that? Who is running Linux here? Okay, and who is running Windows? And who is running Mac? Nobody? Okay, essentially docker is a Linux technology. So, it will run actively in Linux. So, for people that use Mac as me, people who use Windows, to be able to run Linux containers, you will need to have a virtual box running the dockerdemon. So, what docker2box does is to install the virtual box for you to create a demon running on your virtual machine. And that's how docker makes possible to run Linux container inside virtual box. Okay, of course, you will need other tools like Java, the web browser, the Git client, and Maven. For people running, for people that use Linux, the virtual box is suggested just in case if you want to run a cluster of docker containers. So, you can simulate that you have many hosts, of course, using virtual box. But for Linux, it's not necessary. Okay? And finally, we have the instructions for Linux users how to get the docker machine. And what docker machine does is to be able to create these virtual box demos. I will show you, this is just a step up, but showing what you need to do to run docker. Finally, the docker client and we are ready to go. So, let me give you an overview of how docker works. Docker is mostly composed of two parts, a client and a server. In a Linux, everything will be at the same machine. So, for example, when you run a docker command, the base command is docker run in the name of the image, this command will send to the docker host where it's running the demo and ask it to create a container based on the image name that you gave here. So, for example, suppose that you ask docker run image Fedora. The docker demo will communicate to the docker hood where we can think that it's like a maven central for people who are Gavi developers. We will get the image, download the image to an internal repo story and we will create a container using that image. So, for people who are not using Linux, these docker hosts is what will run inside the virtual box. Just virtual box? No. With docker machine, which is to use to create docker hosts, I can create a docker host in the cloud. For example, I can create a docker host inside Amazon, inside Microsoft Azure. I can create a docker host in other hosts in a server running inside my network. So, this is the base architecture of docker. So, suppose that in an empty machine that I'm just about to start using docker. With the docker machine, as I said, I can create the docker host. What I need to do... By the way, let me increase the font size here. Is it visible for everybody? So, I have here the docker machine and I want to create an environment for me to work. So, basically, I need to specify a driver. As I said, I have drivers for virtual box, I have drivers for Amazon, I have drivers for Azure. So, I want to create a docker host in my virtual box. Wait, let's find it. Comment, create, virtual box. And I'll give it a name, for example, LED. When I do that, remember, this is just for people that are not using Linux. It will download a boot docker, which is a Linux image. And... The content of the docker is from the free API. Well, the content of the... There is an OVA file with... Yeah, I have another one. Yeah. The content of my view is not the same as the previous show. Yeah, yesterday we had some troubles with the USB drives. So, if you're already broken, please take another one. Sorry for that. If you don't see all the files there... That seems completely different. Yeah. You see just... Yeah.  Okay? I'm canceling it, because I have a docker machine created in here. With a docker machine, you can also list the existing machines. So, if I do a docker machine LS, here you will see I have a depth default and I have a structure machine where I have already my image already downloaded. And how can I say to the docker clients which host should I use? Well, docker machine makes that easy for me. Using the docker machine and command. So, for example, I will use here a structure machine and it will return for me the existing... the environment variables to connect to that specific machine. So, for example, docker machine and structure machine, I should create an environment variable using docker host and the path for the certificate because the docker machine has... the docker host needs a digital certificate from the clients to be able to make the communication. This is necessary to avoid security issues. So, just the clients that have the certificate will be able to communicate with the demo. So, the docker machine automates this process. So, to set this environment variable, docker machine says to me, run this command to configure your shell. So, when I execute that, this will create the environment variables for me to connect on the structure machine, which is a machine that I have previously created with the docker machine create command. And now I can do any docker commands. So, let me kill my existing... just dropping my existing containers so we can start with empty containers. Okay? So, the lab will instruct you to create a machine, get an IP. By the way, the docker machine also allows you to get the IP of the docker demo. So, for example, the structure machine, it will give you the IP. And it's extremely suggested that you use this IP address in your host file. So, you can create here an entry with that IP pointing to the docker host. So, every time that you need to communicate with the demo, you can use the docker host, for example, just to make it more easy for you to work. Okay? But now it starts to play with docker. So, as I said, docker uses images just like a virtual machine to create containers. I have already downloaded a lot of images here so we can start playing. And what you will do to run, for example, Wallfly, you can previously pull the image from the repository using docker-pull-jboss-wallfly which is the docker-pull-jboss. The jboss here, in this case, is the name of the user inside docker-hub and the name of the image because inside jboss we have images for Wallfly, for Wallfly's forum, for every other jboss and jboss projects. So, jboss-pull-wallfly. If I don't specify the tag, it will use the full tag called latest, which is the latest image available for that version. So, let's see what's happening here. Now you can see pulling repository, docker-io, remember that I said that docker-io is just like the Maven central repository. It's where all docker images are stored. It seems that they don't have any issues with the internet. Maven, let me see here. Maybe I was disconnected. I'm stopping the structor machine because I just plugged the cable instead of the Wi-Fi and it changed my network and this machine here needs to update the IP and the DNS. So, that's why I need to stop and start the structor machine again. So, as you can see here, the machine can have a new IP address, so it suggests me to run the docker machine and command to get the new IP in the environment variable. I didn't change it. So, docker pull JbossWallfly and now this command, remember, this is the client. It sends this full command to the demand that's running inside my virtual box. So, as a client, it does nothing.  It does not have any intelligence. Everything is made by the demon that's running inside the docker demon. So, as you can see here, it's saying that it's pulling a file system layer. Why does this image have a lot of layers? Because this is something that made docker so popular. I will show you here the contents of the Wallfly image. The Wallfly image is layered because it has a Wallfly that was built in top of an image called JbossBaseJDK, which contains just the JDK, which was built on top of another image that has the CentOS Linux that was built in on top of the image that has the boot file system and the kernel. We can see that taking a look on the source code of this image. So, for example, if I open that JbossWallfly inside, we will see that the docker file that creates that image will see how to create this docker file. And we can see here that this Wallfly image, the base layer of it is an image called baseJDK. If we open the baseJDK, this has the front JbossBase. If we open the JbossBase, we will see here the CentOS installation. Each one of these images have a specialized purpose. So, the Wallfly has just the Wallfly installation. As you can see here, there is no need to install the JDK because the JDK is already installed on this baseJDK image. Let's open it again. The baseJDK image has only the installation of the JDK and the base image just added a user called Jboss and doesn't need to worry about the CentOS installation, which was made in another image. So, that's why you see a lot of file system layers being downloaded. So, how do we run this image now that we have this image locally? We can run Docker image to see the list of all images. What I need to do is specify the run command. So, this is the very base of Docker. Docker run the name of the image, Jboss Wallfly. But, there are some flags that it's important to specify. There is the flag minus I dash I, which will instruct to run this container in interactive mode, which means that I can interact with this container. And, I need also to specify a terminal. So, when I do Docker run minus IT and the image, it will create a container with that Wallfly 10 being executed. Now, a question. Where is this container running? Is it running on my native laptop? Or is it running inside my Docker host where it's running the Docker demo? Who can answer that? Who answer? Yeah! Exactly! Inside the Docker host. That's why people like baseball. Yeah. Okay. Okay. So, this is the very base to execute a Wallfly in your using Docker. If you have a new machine you didn't need to install JDK, you didn't need to create a J-Pause, you didn't need to download the Wallfly, it's just there in the image. Okay. And now, you will stop the container because I run it using interactive mode, so it accepts commands from my terminal. Now, we don't need as... we don't want to run this Wallfly in interactive mode most of the time because anybody can go here and view the process with control C. We want to run that in background. In Docker, this is called Detached Mode where I'm detecting the container from my terminal. So, instead of using the minus it I will use minus b which is Detached. And it's a good practice to give the container a name. So, I can specify here name my Wallfly using the minus minus name. So, Docker run in this mode giving the name my Wallfly for this image. So, now I'm not seeing the container being executed because it's Detached. I can do a Docker PS, just like you do a PS in Linux. And you will see here some information. You'll see the container ID 92BC and the same ID that it returned when you did when you did a Docker run minus d it returned an ID created for that container you can see the ID here the image, the Wallfly the command that's running inside that image and what else they start it was created 15 minutes ago it's up 30 minutes there is a port opened and a name my Wallfly that I created. What happens if I don't specify the minus minus name for example here I didn't specify yeah, it will generate a random name and it's a very funny name each time. Backstablish home every kind of crazy names will be created here. So why this name is so important because if I need to interact with this container which is detected for example I want to see the logs of this container. I can do Docker logs, my Wallfly now I can see the logs running Docker logs minus f and it will keep tailing the logs and I also can use to stop the container so Docker stop I have that other name that was created for me or I can stop my Wallfly what happens if I stop the container well as the name says it stopped and if I do a Docker PS it's not there anymore so what will happen if I try to run this command again using the same name it will say for me that this name already exists it's a conflict the name I will apply already exists so that's an important concept if I do a Docker PS I can't see it because it's not active but it's still there if I do a Docker PS minus a which means all I can see the previously created containers so they where is it let me see my Wallfly is here it was created three minutes ago ok so if you want to hit start this container you can do a Docker start my Wallfly and it will execute it again and if I do a Docker PS it's there it was created three minutes ago but it's just after 12 seconds or if it was stopped I can remove that container using Docker and ok so now let's have access to that container ok so let me start here Detached mode name my Wallfly and the boss Wallfly if I do a Docker PS there is important information for me it says here that 888 which is the default part of Wallfly being it's there as port if I do a Docker logs my Wallfly I can see also here that undertone 8TP is listening on part 880 so what can I do to access this Docker this Wallfly will I use localhost 888 no because it's running where? inside the virtual box in my case for people who are running Docker demo on Linux you can access it on localhost so remember that I said that's a good practice to get the Docker machine IP and place it inside your host file so you can do a Docker host at resolution this will make easy for me to just say Docker host 888 so another scarf for who answer me it doesn't valid for you because you will know you will have already used a Docker before will I be able to just hit enter and access Wallfly yes or no well this was a tricky question why I cannot access it because Docker secures the container for me it if I go to the let's do a research here let's open Docker hub look for that image the open here the the image I can export the Docker file which was used to create the the image I can see here that there is instruction expose 888 but when I do a Docker PS I can see the port 888 here I can ask for Docker to expose that port for the world so how do I do that Docker stop my Wallfly what I will do is when I'm running the container my Wallfly I need to specify with capital P that I need to I want to get all ports that's declared on the file and expose it for me when I do a minus P capital let's see by the way I am the Wallfly now if I do a Docker PS I will see a mapping between my local host and the container but it generated me a random port number 7668 so let's try to see if I can access 32768 now I have access to Wallfly ok but you may look like that and see this is strange I didn't like that because I'm used to have Wallfly running on 8080 I don't like that number the first thing is that why it creates random port numbers because as a container I can create many containers as I want for example suppose that I don't give it a name I can execute this command many times each container will execute on different port without collisions ok that's why Docker it was on random port sorry it will work if you don't use Docker machine do you mean executing natively on Linux? yeah it will work in the same way the only difference between using Docker machine and not using Docker machine is that instead of specifying here Docker host because I'm getting the IP of the virtual machine you can use local host here it's the only difference the port will be the one that is exposed to the Docker file yeah it will get the information from the Docker file from the expose and with the capital P I will it will create random ports to access access it was I ok so let's kill all these containers sorry on the container yes what does that mean there are four containers there are four containers because they executed many times they are mapped to the internal port when Docker runs as a container you have like a virtual machine and it exposes internally the 88 port but for the host or whatever access where the Docker container is running it is exposed as that random port so the only way to access is through the the new port and that will redirect to the 88 that is defined internally the wildfire image ok so this works that way because as I can execute as I told you I can execute many containers and there won't be a port only if you run Docker native and you don't specify the minus P it will use the exposed port it will try to the 88 port is that right do you mean if I don't specify the minus P if you don't run in Docker machine if you run native the Docker host as local host and you don't specify the port you won't have access that's what happened here even using Docker machine locally it won't work because it's a a kind of security constraint and one I need to specify that those ports that are available I want to expose them to the outside world of the container well but as I said this seems odd for me I don't like that port number so it may raise a question can I specify the port myself? yes I can so instead of the where I say get all ports that are unexposed get that and and create random ports for me I can specify with lower case P the local port that I want to expose in the port of the container this is how I create a mapping myself of that container so if I run that and that's my Docker host oh yes Docker host ADA now I can have access on the port ADA because I specified that I want to run that container mapping the port ADA to the port to the port ADA of the container is that clear or is that okay? to run both it will tell me that there is a port conflict the ports are already allocated okay so for purpose of have escalation to scale your your containers it's very important to you to not specify the port and use a load balancer that will recognize those ports and and do the load balance between them okay so let's see what else container with specified port okay now some tricky commands suppose that I have here let me run many containers I run I have three containers executing on random ports two we use in random port one we use in port ADA and suppose that I want to stop all of them with docker stop I can pass commands for example I saw previously that I can do docker ps which will show me all the containers executing but I can do docker ps minus kill which will just return me the container IDs so I can do a docker stop and pass docker ps minus kill and it will stop all executing containers in a single command this is very handful and you will need to stop many containers or remove ps minus aq when you need to remove all containers in a single command instead of specifying 101 okay so now suppose sorry there are also some important to get those random ports because when I run like in Jenkins I need to get back those ports so how about it existing exposed ports well when you run the docker without specifying the ports it will show you the ports available in the docker ps you can do it you can look for example in the image so far let's get Jenkins that we get here of shell image of Jenkins most of the time it will say for me in the documentation for example docker run minus p88 and the port 50,000 I created containers on the Jenkins I see I create the same container of different versions but I need to get it back I understand so for example you want to get the port you can do docker port in the name of the command the name of the container this is the random name it will return for me the mapping or I can do a docker inspect let me get here the docker inspect you can use this complex command here should get the port for example docker inspect I need to here if you do docker inspect using this complex filter because the docker inspect get all information from the container it will get all information and with this format UIS specifying a filter that you want to get just was exposed on port 8080 so it will return just the port number or you can do just docker port and it will return you the mapping both ways work you're welcome so now another trick part of dealing with wildfly the default image exposes me the port 8080 but I need to have access to the administration of wildfly that doesn't exist on the default image so in this case I believe that the image was created that way for security purpose so if you want to have access to the administration you have to create an image yourself that will add an administrative user and expose the port 990 that was what I did in an image that I previously created so let me see show you here I have an image called wildfly admin that if I go to the docker file you will see here that I created a username that shows the port myself I customise it the existing jboss wildfly 10 image we will see how to create an image in some units but now let's see how to access the wildfly administration port so now I will run docker-it minus p because I want to get minus d minus p because I want to expose all ports in the following image that I have created before remember that it's my username so it's the image that I have created and I gave the name wildfly admin if I do a docker docker ps I will see that I have now two ports let me do a docker port I have the port 9.9 exposed as 3.2.775 so if I go here docker-host 3.2.775 now I have access to the administration console remember I created this customised image myself and I had a user with environment variables so here the default value is admin and the password is docker docker-it yes that's what we will see now so I have here this I have now access to the deployment to the administration console why I created these parameters here as environment variables to be able to overwrite these values so how do we do that let's stop the existing containers once more when I'm about to execute the command remember that I said it's important to give a name so it's more easy I have here we will see now another parameter which is minus E minus E allows me to specify environment variables inside the container so if I use here username equal devconf and minus E password equal devconf that's 123 now when we let me get the port number again which is 777 devconf devconf 123 I know this that didn't work because I previously created the image so what I should do is overwrite here after the execution of the container this image was created as a test purpose so that's why I didn't overwrite the value we can see that this environment variable was passed to the container by logging inside the container how can I do that well docker run creates a new container login inside this existing container here my wildfire so instead of do a docker run I can do a docker exec minus it and the name of the container and the process that I want to start inside the container in this case bash so I'm executing bash inside this container so inside the container now I can do a echo for example user name I have here the environment variables that was passed but I should overwrite here after the execution of the container this is crafted in the image that's why it didn't work the way to overwrite values inside the image how to pass in it using environment variables okay that's good to see that so I can change it later okay so this is the basic very basic off docker we saw how to expose ports how to run it in detected mode how to execute new process inside the image environment variables now we will see how to create our own image well to create our own image we will create a docker file as we saw here in many examples so for example let me create here my image every docker image has to every docker image source has to have this name docker file so there are just few commands to create an image basically you will specify the from which is the base image that you want to create for you for example suppose that you want to use the existing multiply image and now you can use any of these copy and run cmd and expose to create your own image for example suppose that you want to add or an application let me get an application here on my path an existing image here so we can move faster this is an example let me make it I will get the existing jboswild file image I can declare a mountainer and I can use the add to add a file I could use copy there are some small differences between them and I will add the ticket monster double war inside this deployment folder and now expose the part 8899 and 8809 because I was playing with mod cluster and finally I will run the full command for this container so once that I have a docker file what do I do to build this image I will do a docker build and specify a tag for so suppose that I want to give it a minewall fly ticket monster which is the name of it and the path of the docker file which is here when I do that if I put all these commands in an intermediate file system that's why when you are creating a docker command you will see different file system being created and finally we have the image my world fly my world fly ticket monster how can I do to run that docker run my anxiety my world fly ticket monster the world file is the source of the image it's inside the image yeah it's inside the image well in this case you are creating an image that have everything to run this application this ticket monster application so suppose that you want to deploy an application in a in a cluster so instead of running many containers of world fly and you have to deploy the application on all of them you just craft an image with everything built in with the data source created with the parameters of the JVM customize it suppose that you change the thread numbers of the world fly you make the customized image of world fly you can do that and simply ask for a person in the operations department to hey is it cool 100 containers of the ticket monster application and it will execute that part of the application you don't need to ask him to execute the world file and then deploy this world file image in all of them change the create an administrative user change the parameter of the JVM increase the size of the threads everything that you should do prepare your image to be executed should be made inside the image that's how you guarantee that the container that you execute in the development environment is the same one that will be tested and it's the same one that will land in the production you don't need to worry that they are different because everything is there that's the purpose of a container if you imagine a container it's something that you can put everything inside that's the purpose that's why you are instructed to have an application inside the image okay how do you view the continuous development in such environment continuous sorry continuous delivery well there is an initiative called Fabricate let me show you here Fabricate which is a project from Red Hat which has continuous pipeline it gets the source of your project creates an image and it allows you to propagate this image between environments so I suggest you to get a look in this project because this automates the process of continuous delivery so as you can see here so this Fabricate project allow you to have a control based on it will check the code from the version control generate an image during the build process and based on the feedback it will propagate the image to another environment so to return to our lab I will show you by the way if you have the image as we have here image we can see here the size of the image suppose that I want to export it to a file I can do a docker save the name of the image and the destination for example it will export the image suppose that you want to send that image to place it in a drop box or an append drive to send it to another person or in a network drive so you can this is how you can export the image and then later you can do a docker load and it will bring that image to the internal registry well we saw how to create the object the image wow something about docker is that containers should be what they call ephemeral the containers need to be discarded and recreated easily because that's important suppose that your application is crashing for overload it's overloaded and it's crashing instead of debugging why it's crashing why it's there is an issue with that container just discard that container and run a new image you don't need to worry because you can create as many containers as you want based on that image so the image is more important than the container and now you have everybody asking me but what about the states files that are inside the container it's a good practice to not store things inside the image besides the things that you need to execute for example that ticketmonster image has only the application but the data is stored in a database was that what you were about to ask it's possible to expose a folder from the container to to the dockerhose or to another container this is what we will see now as we create a port mapping we can create an application so that's why you have access to the this is how you externalize things from the container so for example let me show you here well this is how we executed the ticketmonster we have the application server and the database run inside the same image but also that I want to deploy the image myself so let's do what we learned docker run minus E minus V a folder here called deployments and I will map here to the port let me get here I will map my local port my local folder to inside jboss logfly send along deployments and I will run it as the invitation mode with my logfly and I will run the jboss image docker loves my msf my logfly image ok and I can see here that it created a deployment folder so let's keep it running the log this deployment folder is mapped to inside the container so I can simply move the application to inside this folder I believe that's what she asked right you want to update your application without stop so this is how I could also do is to have a mapping between the container and the file system ok so now that we know how to run the container with the application inside it and how to run application with where we can deploy the application inside the container using the the mapping between the folder and the container we will see how to execute two containers interacting between them having a database and the application talking to the database and this database is running as a container ok so to be able to two containers communicate to each other we have to create a network because with Docker since the version 1.9 we can also have isolated networks to create a container so with Docker network network we can go to LS which will show me the default networks and we can also create a network that can give a name for example MyNet so let's run for example a Postgres so let me call the command here and explain you minus minus name DB DetachedMode I'm exposing the port 5,4,3,2 to specify the network that I want to attach to that container and remember what I tried to show you in the this is how I can specify or overwrite the username and password in this image of course I need to fix my image to be able to specify an administrative user and here the Postgres username and password and the base image is Postgres now I have running the the DB the Postgres as a container and I need now to execute another container pointing to that to that container I try to customize the image with the wildfireticketmonster and what did I need to make if I go there minus f wildfireticketmonster you see here that's working this error is because it tried to drop the image but you see the application deployed and it's working nicely what I need to do I need to customize this image let me show you as I created this image here you can see that before deploying the application I executed a shell script that creates the data source installs the Postgres driver creates a data source here use the host called DB that's why I need to specify the container with the name DB so for example let's take a look inside that container minus it wildfireticketmonster bash when you run two containers in the same network it updates me the host file the IP address of each one so that's why inside the wildfireticketmonster I have the IP address of the DB that's how I'm able to have two containers communicating to each other container so do you communicate with one of the data bodies? yes so let's do that as it could now wildfireticketmonster2 of course with random port name with random ports now it is actually 3 and let's see the log of the database let's see wildfireticketmonster2 it started so that's why you can scale your containers ok so now you use this last 5 minutes to show you how to do that in an automatic way using Docker compose because everything that we need to do until now we need to use to learn the minus Z minus name minus net minus V to specify the volume and sometimes it's critical for us to have all those information in the in the console so let me queue the containers here what I needed to do to run that example I need to create the network I need to create the postgres container specifying the port the name of the network the environment variables and then I need to to execute the many ticketmonster application exposing the port so wouldn't be much more easy we define that in our file that we have here and specify everything in a YAML file and just say to docker run that for me so this is what docker compose does docker compose allows me to specify for example here the container name and I force it to use the container name because remember inside my image I'm expecting that the database is running inside the dbhost the name of the image the name of the net the ports that I want to open and the environment variables remember what I told to use a load balancer this is a container running multi cluster which is a load balancer for apesh so I have here the container name called mod cluster the network the image environment variables to define what IPs I should accept what port is it running and finally my wildfly image running on the same network so to run that I will use instead of docker run I will just do a docker compose minus b for the teshack mode and it will create all containers for me automatically to prove that I can do a docker ps look it created for me the postgres, the db and the multi cluster containers the docker and exposing the right ports for me so I can go here for example dockerhost on port 8080 and the multi cluster assessing the multi cluster and I have here the ticketmonster context available automatically for me I can do a docker let me go here I can do a docker compose ps it will list for me the name of the containers the commands which ports are available and I can do the thing that I really like about docker compose is this I can do a docker compose scale which serves I will scale wildfly and I want to have wildflies running and it will automatically create three wildflies for me and I can do docker compose logs and it will concatenate all logs for me that's why you are seeing wildfly 2 and 3 running and remember what I have told you about the load balancer because all of them are running in different ports they are not colliding so if I update here the load balancer you see here that I have host three containers pointing to to ticketmonster that allows me for example to do tests like for example so suppose that I am using the application and I want to docker compose scale wildfly wildfly docker 2 stop in one and I can for example try my application and see if it was not affected if the load balancer is working and the application was not affected of course I need to check it as you can see here I reduced the name of wildfly and now I just have two wildflies in my load balancer docker compose is the finally the way to scale your application so now we have five minutes or no we don't have five minutes questions no for database I really don't recommend to use a container in production because as I said it should be ephemeral I should just drop and recreate and I should keep the data out of the container because it would store files on local drive or substorage what is best practice for doing in docker they suggest I did here making a local volume in my computer they suggest to map that to other container instead of using minus V volume from I think that's the right switch to store the image in other container because with docker cluster I can have the docker demos spread in the network so I can't rely on just one volume just one machine holds the volume so docker allows you to specify a docker container just to store just to store information that's the recommend way yes definitely and guys thank you if you have any questions please don't hesitate and contact us okay and of course we will be outside if you want to continue our discussion about docker I will be very pleased to answer all questions thank you very much thank you are you? yeah fortunately we were we thought we would have more time but no worries we will have about 2 hours okay bye bye thank you hi how are you is this your clicker fantastic great I'll tell the volunteer thank you very much was it just outside great thank you Still made it. This player is... This. Yep. Fantastic. We'll try. We've got balls? Or not. It's fine. It's not talking. It's good. You need to do good. You need to do good. Speed. State. Time for something. I've got it all on the end of the game. Is that a game or not? It depends. We'll find out as of the requisition. It's fine. Okay. That's fine. You know, the buy-pies... Not great. Not that great. Okay. Last time, one of our players completely ruined one of the buy-downs. They played 60 max. So, okay. I think it is bigger than... Yeah. We'll find out. Yeah. Let's hope. Yeah. Great. Great. So, we're smart people. That's me. Yes. We can't see the sheet. Great. Where should I stick my stickers? On my laptop. I think I'll have it on my laptop. I have plenty of stickers on my laptop. There we go. Right. Let me get configured. Make sure we're working. Now we don't have time. There we go. And then... Yeah. Well, we'll see. We'll see how we go. Great. Thank you. Let's just check this present. Fantastic. You can. Yeah. Hey. Hi. Hey, hi. Nice to see you. Great. Are you my Kerberos guys? Yes. We are. Good to meet you. Well, don't feel like you have to sit in the session if this is boring. I can find you afterwards. Yes. Yeah. Yeah. Actually, with me. Great. I don't know them. I do a similar thing in the past. Again. So I must have a real job before I join. Let me just make sure that we just get to the scale. And I used to have the... I used to make cross-platform products up to Microsoft products before it came to Microsoft. So they made something similar. And so we had to reverse engineer NTLM V2 to get some work using the Kerberos MIT virus. And just that. So the guys in the end, I'm not sure actually they're the guys who own that pit for the networking. And I'm not sure how familiar they are with how much they do on the line. So I suspect they're taking... They're going for an easy route rather than the right one. Brilliant. Yeah. They shouldn't do anything. That's the answer of life. Yeah. Yeah. Exactly. Yeah. You will need to... It may sound very strange. You will need to help us educate our developers on that protocol. Okay. Because a lot of them, it's invisible to them. Yeah. Exactly. As you know, NTLM is just the same protocol over HTTP. So you have to reverse engineer it, did you, before the protocol got... Now it's the document. Yeah, exactly. Oh, really? I'm just making sure I don't use the presenter view. I just want to remember how I don't... Hey. Hello, yeah. I'm just going to introduce myself. I'm Riley Booker. Hi. I'm going to choose a couple of emails. Yes, yes, thank you. Martin, I was wondering if you could see someone from Microsoft New Region today, Daniel, or some of the evangelists from... I'm not sure if some of the evangelists are here. I'll find out. I've only literally just got here. Okay. So I will find out. But, yeah, if you come and grab me later on. I'm just talking to them. Okay. So I was like, yeah, I'll find them, and I'll agenda those. But get them to talk to me in the meantime. Yeah. Martin. Do you need a break, or will you continue this holiday break? Let's see how it goes. I would like to continue without a break, if it works. Okay, yes, yes. But feel free to... people just walk in and out. I'll be sitting there, and I will show you 10 minutes, the right 15 minutes before the end. Yeah, fantastic.


The Cube at EMC World 2014 is brought to you by EMC. Redefine VCE, innovating the world's first converged infrastructure solution for private cloud computing. Brocade, say goodbye to the status quo and hello to Brocade. Welcome back, Jeff Rick here on the Cube Day 3 from EMC World 2014. We launched the Cube at EMC World 2010. It's our fifth year in a row coming back. We're so excited, we have such great demand that we have not one but two cubes so we can get twice the number of guests on, bring you more insight, more of what's going on. And I'm joined in my next segment by Cube favorite, Bill Schmarzo, dean of Big Date. I don't even know what his official title is. I'm sure it's up on the lower third. I've had Bill on a number of times and Bill launched his book on the Cube at Big Date NYC last year. But Bill spends more time on the road than most Accenture partners. I mean, the guy is always on the road but the great thing is he's talking to customers. So Bill, welcome back to the Cube. Thanks, Jeff, thank you. So what are you seeing out in the field in all your various travels? So it's fun to be in the field talking to customers all the time and there is increased belief that Big Date can actually change my business. The conversation is really starting to shift one that's focused on technology being led by the CIO to a discussion that's being led by the business with the help of the CIO to focus on how do I use Big Data to transform my business?  I like that, how to make more money. So talk about, obviously it's a journey. Probably a lot of people don't even know where the data is much less how to get it in and work with it, bringing in third party sources of data. So what are you seeing in terms of people having success, where are they starting? Where's the little hanging fruit? How should they proceed? So that's a great question, Jeff because I think for most organizations the low hanging fruit starts with what are my key business processes? And for many organizations that is their existing data warehouse and BI implementations are actually a really good starting point because the BI data warehouse stuff has defined your key business process. It has identified what metrics are trying to measure what data I'm using, it's built reports and dashboards it's done some of the transformation work for you. So it's actually a really good starting point and then we find that the low hanging fruit for most organization is their existing operational data. It's the dark data in the organization that they have purposefully never had access to. If you think about a data warehouse environment is really expensive. So what most organizations do is they actually minimize data, right? You don't put all data in a data warehouse you minimize it, right? You don't want to buy more boxes, right? You don't want to buy more boxes and so you keep 13 months of aggregated summarized data in your data warehouse when all the insights is in the 15 to 20 years of detailed customer transactions that you have but probably have stuck on mag tape somewhere. It might as well be chiseled in stone to have it on mag tape. So how are they, so do they see enough value to one, collect more and two, not summarize it as much but keep it more in its raw form? Yes, so we have to take a lot of our customers through an envisioning process to get them sort of to kind of slap them inside the head and say, okay now take off those existing binders you have that said, oh I can't have all the data and we start running these envisioning exercises to help them understand here's what you could do with you have all this data. Here's the kind of questions you could ask that you could even ask in the past and here's the kind of answers you can get that are much more insightful and detailed than the ones you had before. When customers go through that, you can literally in the process you can see the light bulbs go off and people are going, wow, I didn't know I could do that. Well, if I can do that can I do this too? Right. And when they start that what if-ing process you know they've made that key leap. So I wonder if you can share any specific examples that you've seen out there of customers and some of the initial successes that they've had. Well, I tell you my favorite one is this school district project we're doing in a very southern tip of Texas and they want to create what they're calling Netflix for teachers. And what they want to do is a teacher, the problem they have is that they have a real hard problem with teacher retention. It's in a very, you know, it's way south in Texas it's kind of an underprivileged area and so teacher retention is a real issue and they find that their teachers are spending between 45 to 90 minutes a day on administrative tasks not teaching but doing administrative tasks. So they want to build this thing they call Netflix for teachers that when a teacher comes in the morning they open up their tablet it shows it you know what students are struggling it has recommendations as far as what lessons they should go through identify a student who's having behavioral problems who might need an intervention it'll even help a principal identify a teacher who's struggling who may be teaching the wrong class or dealing with too many students. And so the idea is you deliver those recommendations they can pick and choose the ones they want and you take that administrative low down from 90 minutes down to 10 or 15 minutes and let them spend time teaching. Now is that in process or has that been delivered? It's in process right now. So we've done the envisioning exercise the one thing you probably get a kick out is our data science team was looking at all these different data sources we had all this lesson data from all their lessons now are done on computers so we can pull off all the logs and analyze things and have their course or test results and one of the data scientists said I wonder what if? I love that, what if? What an impact is on the price of a parent's home and the change in that price and the student's performance in class, right? If the housing value has gone up do we see a corresponding change in the student's behavior? So we brought in Zillow data, right? Which not only tells you the price of the house but in a monthly value it shows you the changes and we're trying to correlate is there a change in that or not? Now we haven't found anything yet but I love that kind of thinking that says what if, let's try this data let's grab it, drop it in here play with it, found nothing? Okay, found nothing, move on to the next one. I love that kind of exploration attitude. And you went through a whole bunch of things that you're looking at. Were most of those data sets already someplace they just weren't tapped into? Yeah, most organizations have data buried throughout the organization the classic in silos and in many cases they're not even sure how much data detail they have. Though the IT group themselves struggles with where's all my data and the business people by this time have given up even trying to ask for it. That's probably the biggest challenge that the business users face is in some cases they've given up asking the questions. Now is that because just the you know that which gave rise to shadow IT just that the IT guys were just so busy or the delivery was so slow and they've just been frustrated by it or is it just that no one could really answer the question because no one's really thought about the data in that way before? I actually think Jeff I think it's both. I think part of it is you know building a classic data warehouse where you have to define your scheme of first and then load data into it has always been a long labor intensive process and it's not unusual somebody wants to add a new data source you know the IT says well I'll be six to nine months. Well holy cow the opportunity may be gone in six to nine months it may be gone in six to nine days. So the traditional data warehouse approach of having to build that scheme of first and then try to retrofit data into it has really made it very hard for people to try to bring more data in. So IT groups have, they're doing the best they can with the technology they had but it's kind of like making a dog walk on its hind legs. It's impressive that they can make these damn things work but I don't want that dog bringing my beard to me. So one of the things you mentioned earlier was again going from a mindset of having basically as much raw data as you can versus having aggregated summarized data for short period of time because of the cost. Are people doing some type of ROI analysis to justify now collecting all that data? Are they putting that data in a less expensive place? How are they managing the business expense on the front end of that process to then eventually unload the insights of the bag? Well what I think is the most interesting thing about big data is the economics of big data that the cost to store, manage and analyze data is 20 to 50 X cheaper today than it was even two years ago. I have a friend. 20 to 50 X in two years. Let me give you an example. I have a friend who's a senior vice president of analytics at Travelers Life Insurance at Hartford. He did an analysis, he shared an analysis with me, he said for the same four terabytes of cost that it cost me for data on an enterprise data warehouse four terabytes, I can get 200 terabytes on how to do. When you have that 50 X magnitude of change it can enable you to think differently about how you treat data. It's like data doesn't become a cost to be avoided. Data becomes an asset to be hoarded and gathered and harvested.  And how much of this economics, how much of its competitive pressure from other companies within the same realm or has that really gotten enough traction yet? I don't think there's as much competitive pressure as much as there's a person in the organization who has this feeling. I don't even say a vision. It has a feeling that we could do more with our data. We have this data, we've been spending all these years collecting that and we're just not getting great value out of it. Many times somebody in the CIO's organization is saying, God, for the longest time we've been getting whipped up on. We have all this data. It's time for us now to be in a leadership position, become a strategic business partner and help our business cohorts to leverage that data to get more value out of it. So I don't think it's competitive as much as it's somebody in the organization who's starting to realize, wow, we can do something different. Right, we talk a lot about CIOs starting to take more of a business role in the organization, not just maintainers of what was in the past, but really thinking about adding value beyond that maintenance role and bringing strategic vision and execution and competitive leverage. So do you think big data is one of the better ways for them to take on that additional responsibility? It's the perfect opportunity for CIOs who are willing to step outside their normal roles and who aren't afraid to fail and to step forward and say, we can help lead this initiative. Now they got to have somebody in the business who's willing to walk arm in arm with them. And in most cases, a business wants this, is dying for it. They just want somebody on the CIO side to say, I'm in, I'm all in on this thing. We're going to make it happen. And can build that collaboration between those two groups that really makes the big data discussion not a technology discussion, but a business transformation discussion. Great, so let's shift gears to the people side. So we've talked a little about the CIO side, but it often comes up that there's a shortage of data scientists and really to potentially unlock the real value of this. You need the guy who's not a data scientist that you give a little taste of something to and he goes, ah, if we could do this, can we do that? So what do you see in terms of trends of not data scientists being able to execute new things with big data gain insight? So the tools today that are available for data scientists are really still very specialized. And it's not like the average person is going to be able to pick up and write Python, MapReduce onto a Hadoop environment. It's just not there. And the people who have been trained in BI for a long time have had to sit on the sidelines, but now we're seeing things like HAWC that allow people to write SQL and get that data stored on an HDFS structure. So we're slowly starting to bring in because of the technology that the SQL people who can issue queries. However, the data scientists have the ability to be curious, to bring in data sources, to write these Python and Ruby on Rail and Java code that brings data in and literally is building the schema on query. That's still a very rare breed. The tools haven't helped that role yet, no, but education has. There's, you know, EMC has an education program where we're training people, we're working closely with a number of different universities that share curriculums. We see opportunity to create more data scientists. If we're smart, we tell our kids to become data scientists. We'll have jobs forever. Yes, they will for sure. So that's interesting. So we're here at EMC World 2014. What do you think we're going to be talking about a year from now? What do you think is the next big kind of move?  We're going to see company after company who've already jumped into the lake. Lake or ocean, this is a big argument that Furrier hates that lake. Of course he does. It's an ocean. Well, I just wrote a blog about the data lake and I titled it something like How I Learn to Stop Worrying and Learn to Love the Data Lake. I'm going to take off another strange love. Actually, after talking to a lot of different customers, I actually think the data lake is going to be a great enabler. You know, it's going through its overhyped status right now, but a year from now, we're going to see a lot of different organizations who have implemented the data lake and are running not only their analytics on top of that, but in some cases, they've actually moved some of their data warehouse capability to that as well. So I think the data lake is going to be a very big enabler. I think next year, you're going to start hearing a lot more about the third platform as a delivery vehicle for the insights I'm teasing out of my data lake. Then the third platform, being able to deliver insights to my frontline employees that they're more effective in working with customers. They're more effective in the stores or underneath the mechanic in the shop. I think we're going to see the third platform take on a growing role. By the way, not only the third platform, but the role of a user experience person, I think we're going to start seeing more discussion next year about the importance of that role. Awesome.  So Bill wrote the book, like I say, not only is the Dean a big data, he wrote the book on big data. So I think they're giving away a few copies here at the show. You can get it on Amazon. But I think the story of why you wrote the book is interesting. And I wonder if you can just kind of run us through that real quickly. Well, the book was, EMC wanted me to write a book on big data and got me in touch with Wiley. And so Wiley kind of, they made things easier. I had a blog, but the real impetus for doing the book was I was sitting around the kitchen table with my kids and my wife. And I was telling, I said, I was thinking about writing this book, but it's a lot of work. And I talked to my friend Ralph Kimball and Ralph says, you don't make any money writing a book. And so I said, I don't really do it for financial gain. And I think it was Amelia who said, she's dead. Why don't you donate the money to charity? That's like, well, which one Amelia?  Why don't you donate it to breast cancer research? So the proceeds from the book, I donate to breast cancer research to give back. I've always believed in, I've been very lucky, right? My whole career has been full of forced up moments where I've been at the right time at the right place, where people have freely shared with me and given me opportunities. I just want to give opportunities back. Awesome. So Bill, thanks for coming on theCUBE. As always, we go out to the events. We extract the signal from the noise. And as we say, we get the smartest people in the room we can find. We invite them on theCUBE. We ask them the questions you'd like to ask them. So Bill Schmarzo, thanks for coming on. We're at EMC World 2014. Day three of wall to wall coverage on theCUBE, not one, but two. So we can give you the double the pleasure, double the insight. Guys like Bill coming on. So we will be back with our next segment after this short break.


Hello everybody, Andrew Maeski here with Dental Elf. Please excuse the mess behind me. My puppy is in the office with me today, so she's just hanging out, but okay guys, so let's talk about how you should be preparing your patients for your return back to work because trust me, patients are going to have questions. If they haven't been asking you questions yet, they will be even before they book an appointment and just to make people feel as comfortable as possible, it's best to really talk about these things now, so then they don't have to worry about it. They don't have to wonder and when people start to ask them questions, then they will have a much better idea. So what I have been doing is I have a group on Facebook where I have been updating patients even just doing a simple post such as I can't wait to see everybody when we return back to work. If you have any questions about your oral health, please just let me know. I was even posting about teeth whitening kits. If people want to whiten their teeth at home, just to get them something to get excited about summertime. So I have been updating patients, but in regards to COVID, I have been posting about I did order some thermometers, I did order some face shields, lab coats, all of that. I just simply take a picture.  But now things are going to be changing where I will likely be wearing all of those things, even before they see me.  So it is a good idea to take pictures, okay, take pictures. It's not just about taking selfies, you're on social media, but it's about letting patients know that you are on the ball, that you are ordering things that you have to order, you are serious about proper PPE, and their safety and your safety as well. I've, I've also been taking pictures of the cert certificates of courses that I've been taking. So they know that I'm not just sitting here doing nothing, but I'm taking courses to really make them feel safe as possible. And for me to know what to do when we return back to work. So keep them in the loop. That's marketing right there, you guys, because there are patients who can't wait to get on the phone, call you because they've had two fakes, but they might not have considered it an emergency. So they don't know what to do. They're probably thinking, Oh my goodness, I needed a cleaning like two months ago, I cannot wait to get in there to clean my teeth. Your phone will probably be ringing off the hook. But you also need to prepare them in another way. So for your dental practice, let them know things like what to expect before your appointment. These are the questions we are going to ask you to ensure your safety. We will be taking your temperature. Hopefully you can take your temperature at home. Also, we will be having you wait in your car until it's your turn to come in.  Let them know what to expect. Let them know things that you are, you are only seeing one patient every three hours because the CDC says that those aerosols can remain in the in the air for three hours. And you know that because you've been paying attention. So you are seeing one patient every three hours. They will like to hear that because they will be thinking, oh, okay, wonderful. So that's an even lesser chance of me potentially getting infected from somebody else. Because people can lie to you, even if you ask them, do you have any symptoms? How do you feel? Do you feel sick? And they they might not even be, you know, not being truthful on purpose, but they might not have any symptoms yet two weeks later, or, you know, three days later, they might all of a sudden have symptoms. So you don't know. I suggest everybody update their consent forms so that you have something in there saying it's not our responsibility if you do get COVID. If something happens because nobody can prove that it came from this dental office, you know, have something in there saying that you are monitoring staff every single day. So if they're sick, they have a temperature, they will be sent home, you know, let them know that you are doing everything that you possibly can, even list everything new that you are doing in that consent form so that they can read through everything once again, because they might not be active on social media. So they might not have seen all of your posts, have them read through everything so then that can help them as much as possible. That's what I intend to do. And just keep letting them know if anybody has any questions, please let us know. We are here to help you. This is new for everybody, but we have to work through this. We are coming back with proper PP, all of that make everybody as safe as possible, but to also take care of their oral health because oral health is so important for overall health. So they need to know that too that this isn't just, you know, them getting a haircut or just them doing something. This is really taking care of them. So definitely do that. I would even suggest reaching out to all of your peer patients. I did that. Now I'm a mobile dental hygienist for the past year and a half. So I don't have thousands of patients. I have 177 I believe I had counted I had reached out to all of them actually, about a month ago saying hi. I'm sure you've been hearing what's been happening in the news. How could you not? If you had an appointment book with me that is obviously canceled, I will let you know when we do open back up again. But how can I help you? How how how are you doing?  I am here to help. So I did reach out to every single person. So they can kind of keep me in their mind too. And every single person said, Oh, wow, thank you so much. A lot of them said, actually, I do have a question, you know, so we just sort of helped, helped each other with that. And so that way they know that I'm paying attention that I'm being careful. And when we do go back to work, everybody will be as safe as possible. What else you guys I'm just checking my notes. So I did mention to let them know also like what you're doing at that appointment, let them know that they will be having to rinse with a pre procedural rinse of 1.5% hydrogen peroxide. I suggest actually updating everybody's medical history as well. If there's anything in there medically where their lungs could be affected or something like that, you probably shouldn't see them yet. Something like that. Let them know the appointment might take longer because you will only be doing hand scaling for hygiene.  I plan to tell patients it's probably going to take longer if you have the time. If you don't have the time, it might take two separate appointments to clean the whole mouth because I can't use that instrument that sprays out the water because that will create too much aerosols and things like that and we're not allowed to use those at this time. So just let them know. Let them know what to expect. Let them know what you're going to do and then also how you are preparing, how you also disinfect the room, how you are sterilizing everything. Even take a video of just, you know, how your staff look with all of their PPE on, how they're going through sterilizing everything, how they're disinfecting everything. We have, we have always done that, but patients haven't necessarily cared as much as they do now. So let me know, you guys, if you have any questions, thank you so much for watching and I will see you guys in the next one.