You can listen to the podcast and read the show notes here.
Michael: Welcome back to the show. I am here with Mark Drew otherwise known as the amazing C.F.O. from London.
Mark: There's only one of us in London.
Michael: There’s only one, others 00:12 [crosstalk]
Mark: There are hundreds of them.
Michael: Yes and he's the director of web development at C.M.D. which is a web development shop, I believe in the U.K.
Mark: In sunny Greenwich.
Michael: In Greenwich yes, he got Greenwich Mean Time exactly down. And he's also the co-host of a new podcast called ‘Local Host’. So, check that out too. I’ll put the link in the show notes to that.
So today, we're looking at how C.F.S. can get started fast with Docker and we're going to look at what a Dock container is and why everyone listening should care about that. The challenges they overcome, Docker versus Vagrant even controversially our traditional I.S.P. is going to go away if Docker gets his way.
And how they compare the virtual machines, how you can get started with a Docker engine. What the heck is Docker compose? And using Docker 01:13 [inaudible] to make your sites even more reliable. Docker cloud and how you can get started with Docker.
So, welcome Mark.
Mark: Well, thank you Michel for having me on board. This is very exciting all across the internets.
Michael: Yes, I am extremely excited and in particular because you are going to be speaking on this very topic at C.F. objective in just a few days time.
Mark: Two days time from today so, if you…
Michael: Yeah, if you haven't bought your ticket to it yet, you probably better get your shoes on and get out there and buy it.
Mark: Then they'll be selling them at the door I'm pretty sure like if honestly you have to come and see it. It’s going to be a great conference. It used to run some little events down in. D.C. as well. Doing it for years back C.F.
Michael: Yeah, just a small thing. C.F. United.
Mark: There was like hundreds of people. It was a small event is really an understatement. It was a massive event. I'm kind of really looking forward to going back to D.C. So, the last time I went there was for your event.
Michael: Oh! Well yes, I am sure it’s change slightly. I understand has been a few people moving in and out of the city.
Mark: Right, right I don't think I even went there when Obama was in there. I don’t know.
Michael: Oh, Mr. Obama?
Mark: Right because…
Michael: I'm sure he was at the C.F. You know I did show him somewhere.
Mark: I missed him. He was running around with busy you know, things happen.
Michael: Yes, there you go. Yeah, these conferences can get very busy between all the talks and the hallway track and the bars.
Mark: right
Michael: yes
Mark: It's going to be very exciting. So, I guess we should dive right in.
Michael: Yes, some people listening may not know what a docker container is and why all ColdFusion developers should care what it is.
Mark: right
Michael: What the heck is one?
Mark: Well, before I say what is one, I want to talk about life before the 1960’s. I know that's a bit of a deviation. But bear with me for a second because it's a good analogy and it's going to get us in place of what we're talking about, right.
So before the 1960’s, if you wanted to get some coffee beans from Peru all the way to D.C., what do you do? You went and got these sacks of coffee beans and you've got some strong guys and you drag them onto a ship and you put them in the corner of the hold. Then someone said hey, I want to actually have this crate and they move the crate they try to wedge it in. And then someone said I have this grand piano I am sending to Washington D.C. And they kind of like manhandle that onto the ship. It swings about, has a few dents on the side but you know, we’ll polish that up later.
And that's how stuff was moved around the world. So, you had like bananas next to coffee, next to Graham pianos all in a cargo ship.
Michael: What could go wrong?
Mark: What could possibly go wrong? And this has been happening for years and of course this is no way to be doing international trade and cargo, right. And of course, the bananas would have to go there like kind of slightly green and then they'll be right next to the coffee and of course they'll smell a little bit coffee-banana; so it’s tasty. But if you had two things that didn't actually go well with each other, it doesn't taste nice.
Now of course when it got to the scene and it had to very gently move the stuff out and then balance it on a truck or train or whatever and move it across country, right. So and it was all individual different types of goods using different types of transport. So you know, I mean we still do this and in some bright spark came up with this idea of a standard size container.
So you could fill in all your coffee, you could fill in all your bananas or whatever at certain temperature. And a little bit later, they also invented these things called reefers which were containers that were actually firmly controlled I think.
Michael: I thought it was something else.
Mark: Yeah well no, it's actually a container that is firmly controlled; refrigerated container in fact. If someone’s told you something different, they're wrong.
So, they invented these things that you could have like cool temperature so you can put your mangoes in there or you're more delicate things. Or you can put them in an exact temperature. So, if you want to have the avocados arrive in D.C. just ripe, you could actually put in there set at another temperature but also carry it in the same format.
So this was the idea. You could put coffee next to bananas, next to everything else in the same size containers and just chuck them onto a ship, right.
Michael: yep
Mark: Why am I talking about this nonsense? Well because this is exactly how we've been doing web development and deployment, right. So we have this, we install C.F., we install I.A.F., we install this. And this all delicate balance of these fragile machines.
And you go into another machine and you have no idea what's on it because I have my sequel on it. I have P.H.P. as well as a A.S.P. and you mix all these different layers. And I mean recently, I've been encountering this. You go to a machine, you have no idea what's on it and if I want to build a new one, that's an issue, right. It's a non-trivial issue that you have to build a new machine. So, you have the different technologies, different hardware, different typologies. So, you have like your service and stuff like that.
So changing all these variables becomes a non-trivial issue. So, Docker is what you know, coming in from that side is this idea of containers that have your stuff inside it. In other words, you know how to configure your bits inside that but an admin has to just treat it like in other box. Doesn't really have to care much about how it restarts, how it deploys. If I needed to put hundred instances of Lucy for example running at the same time. As a developer, I can do it on my local machine or as a develops guy, I can just go and do it and well, I have hundreds of machines and they just source itself out.
Now I can have a hundred instances of Lucy running my web application the way I’ve configured it in the same way and that's a knowledge of containers, right. So, what's inside the box is my problem as a developer. What's outside the box is or how the boxes are get delivered or run an instantiated, that's a standard way that he doesn't care if it's got 07:59 [inaudible] in it or P.H.P. in it; you tell him I need twenty of them, right. And he knows how to load balancer because it's the load balancing is the same thing across all these machines.
Michael: So whether you have bananas or coffee or 08:12 [inaudible]. Your develops guy doesn't care and they can contaminate each other.
Mark: right
Michael: Just suppose the bananas went off and the container’s dead in the water, you re-instantiate another copy of that ColdFusion instance.
Mark: Right and because you inherently use a kind of version control system behind them, you have repositories of these containers, you can go right replace the last week's bananas with this week's bananas; bad analogy. But you can't because …
Michael: Just because this week’s bananas have bugs in them you know.
Mark: right exactly
Michael: We need to go back to last week’s that were bug free.
Mark: Exactly if you only you could do that you don't so much money certainly. But exactly that you go like this week's bananas that this latest release of your code; that’s a whole machine is now actually wrong. There’s some problem with it. Let's roll back and you can just do that and that's not my job as a coder, right.
Michael: right
Mark: That would be a develops guy. But of course, if you were going back, it would have been my job because you would have been, Mark how do you deploy this thing? Can we do a redeployment? And we've had a lot of tools for deployment right. We've had Jenkins and 09:22 [C.I.] and very seldom, we always so you have to be continuously integrating, right. But how do you do this all the time if you having literally moving bits and bytes. I'm sure you've encountered this problem of the F.T. Ping of the code to a server.
Now I know we shouldn't have to because the servers but that moment lapse of reason where files are changing on the server because you are sinking them or doing anything else. Like a new version of your app is being deployed and you have madness falling down. Right because you don't have it pre-warmed. You have to validate caches and all these things.
All that goes out the window when you said this is my app. This it literally my app pre-warmed and ready to go or you can start up a dock container, warm it up and then add it to the cluster and that's an automated script. But you can do all this kind of magical things with these containers. But if you then go back look at how I did this before became an actual you know, another job that you have to do which is not part of the job that you should be doing.
Michael: So you can all that container set up. You can put in a script so it's reliably going to happen the same time, every time.
Mark: Right and you can also script the building of the container. So you say like generally that would be my job to say okay so, this is what goes into the container and I'll build you the container. I'll put the contents in and I'll set them up. I’ll set up my data sources because that's part of my vocation. I'll set up whatever and you can do that.
And that's kind of like building. You know just your application. This is other benefits. This has the benefit that the application that I can run on live is exactly the application that can run on development, right so.
Michael: Because you couldn't tweak with the script between the two versions.
Mark: Right I mean so generally the difference is between a live item or a live application and a development application. In terms of a couple of things is things we like environment variables are saying where your data bases are. So you connect to this data base versus you connect to this data base.
But it means that I can also test; which is really difficult. What does my application look like when I'm doing a load balancing on that? Because you'd be doing this in life, right. It becomes prohibitive doing it as a developer in a development sort of mindset. Like how do my sessions behave when lots of traffic goes to them and is load balanced?
I feel like as developers, we develop a kind of like here's our machine. This all works. Okay, now we put it inside this big network. You know this big complicated architecture and then we test it. And then what happens? It fails and it fails and it fails in 12:12 [inaudible] ways that we can't replicate.
The sessions are going, the sessions are disappearing. It's not using one of the items is not using sticky session so, each time something goes wrong or whatever right.
Michael: So you could actually have a little cluster of Docker container on your development machine or testing machine. Is that the idea here?
Mark: exactly
Michael: And is that really expensive to have or is it basically free to have on your development server? They’re basic free to have on your… I mean free as if you can actually… if your machine can handle it.
And this is what we come back to a bit of like you might be thinking that each Docker container is like a V.M. You might say hey Mark, I’ve done this before. I have my one V.M. and I start up another V.M. and set up another V.M. And I load balancer on all of them, right. But the problem here is that each one of those V.M.’s is instantiating everything.
Michael: They’re heavy.
Mark: They’re heavy. You use in the kernel. You using it like X. amount of gigs of RAM and so therefore, you have to have a thirty two gig RAM machine that you're running, right. Docker containers are lightweight and they reduce the kernel and various other parts. So they basically do a vertical layer of these are the only things I'm going to need, this is my difference to each one of them.
So, the startup as well is nearly instantaneous so, apart from them being instantaneous, as long as the host L.S. is already started up. It means that you can do other types of tasks with these things and they're not just there as heavy weight machines. You could actually have a whole container but there’s… I'm trying to think of an example. Like 13:56 [E.B.I.] conversion of files right or P.D.F. generation. We do this all in request in the ColdFusion world we seem to do this a lot of times. All of generating, yeah. But if you had a container that's all it did was generate P.D.F.
Michael: Like generating reports would be a good example.
Mark: Right, generating reports is a good one.
Michael: Because I mean isn't this the whole micro service thing that I 14:20 [crosstalk]
Mark: Yeah, I mean this is a service Microsoft kind of stuff, right.
Michael: And you might ask, but what's the point of doing that? But I'm assuming you could have a… if you were… I know often reporting is very C.P.U. intensive.
Mark: right
Michael: If you had some part of your app like that separate out into a separate container, you could out like twenty containers to doing that instead of.
Mark: unparalleled
Michael: yeah unparalleled
Mark: But also more importantly is like once they’re done, they can go away. They can literally go away; they're done. They’ll say bye. They don't exist anymore so they're not taking any resources, right. So you can do like micro transactions and I mean and especially on this if I'm a well don't have a command box.
You can start up a command box instance, run a script on that and then it dies. It goes off. You don't have to worry about the lifecycle of that machine. It's literally that's all it's doing. And it’s doing it on request because it takes zero time for it to start up. So it's a very handy when you can start using applications. Another thing is that, I’m sorry.
Michael: I mean I often have wondered and I know some. I know Brad Wood has been asking Adobe. Well, how the heck is there licensing work on Docker containers? You have to suddenly have twenty instances of ColdFusion running a container. Is that twenty licenses or is it covered under your one license because it's all on one set of C.P.U.’s?
Mark: I am not a lawyer and I 15:47 [inaudible] a lot of Adobe's ColdFusion instances. So, I don't know the licensing. But as far as I understand it, it’s going to be C.P.U. bound. So you're on that server. Now if you start getting many more servers, you can cross to services. But it's not per instance, it’s per C.P.U. for cool right so you know
Michael: So that's the advantage of using Lucy C.F.L. open source because then, there's no licensing concern no matter. You could have hundreds of containers.
Mark: Right I mean that’s with nearly every other kind of open source of free stuff. But this also brings it is not just an Adobe C.F. and a Lucy thing is that environments are usually much more complex. I mean I worked on ones might have a database or have Mungo D.B. there as well. A Mungo D.B. as in just pick one example at random there. You need three instances of Mungo D.B. to make a real server because you need to tell it you have to have a configuration of the 16:43 [inaudible] most each other.
So you can't ever start it up just like one instance; that's not the proper way of doing it. So as a developer, now you get into this complicated thing about well I'm maintaining three servers as my machine run it. When what you were … you don't try to have the same performance characteristics as a whole bunch of hardware. But you stand trying to have the same characteristics as your environment is.
And environments can get complex very quickly over time. There’s some environments that we’re working with that have like twenty or thirty boxes that do different things, right. And they’re all tied up and they all talk to each other doing various different things.
So, it gets quite complex. Now, Docker solves a lot of that because you can well for one define each machine specifically. So each machine can have its own lifecycle and its own versioning and you can tag them at certain points saying this is this at this point.
But also using Docker compose, you can compose these upon a whole environment. You can actually write it out saying my environment has got a web front end and it's got an app, it’s got a database app. The Web depends on the database. The front end depends on the app because otherwise, the front end is not doing anything. You know my app actual application depends on the database because it needs to start up the database before it starts up.
You might have like a side card container. That means that when it starts up, it goes and populates your database with demo data and then disappears, right. But your application depends on that having been loaded. And then you might even create virtual networks within that saying, I've got one network which is between the web and the application that’s meant to have S.S.L. behind it. But between the app and the database, it doesn't need S.S.L. because it slows it down and it's meant to be one network.
Now, all those things usually where there’s problem is somebody else. Well, I say that but they usually end up being our problem, right.
Michael: yeah
Mark: Especially when it goes wrong. But if you’re like able to would like to find this whole environment say this is a home environment, I can run on my machine with one web app but on life we have forty web apps. The only difference is a configuration that the network administrator or your deployment administrator or even at the end of the day, yourself have done to say okay, on life this is the environment deploy it. This is much easier.
Michael: That’s when you say how many containers you want for each micro service you have in your application.
Mark: Right so for example I mean I think everyone's had to do something like this which is to either your app this lets say four instances of your app, right. And then on the backend, you've got let's say two databases maybe one that you using just as a slave for example, right. Now sitting over the app in real terms so to be like a couple of days, right. I’m not saying that you know, I'm sure there’s someone shouting like going takes me half an hour Mark.
But that's if you know the environment. If you're going to a new environment and you're trying to set it up. And then the amount of time it takes up to set up each developer to be used to the environment. And then, they come to you and say like Michael, can you come and help work with me on this thing? Then is a whole week of us going right so, here's my diagram. At the top, we've got our load balances, then we've got our web, then we've got our fire walls, then we have this.
And after that week that you don't know the environment, you can actually possibly maybe start working or you can say, here you go Michael. Here's a Docker compose file, have a read. It's not particularly difficult. It's a 20:39 [YAML] format. This is like here’s the web, here's the thing, here's the thing, here's the thing and you're all right, this is the environment okay, coding. Now, shall I? And you can run it and see if there's any differences.
Which at the moment, we have something like that I guess with vagrant, right. With vagrant starts up a machine and then it starts orchestrating the installation of everything using pop it or using chef and then it actually starts. You might be able to put your stuff and then it shares a folder for development.
But then, once you've got that stuff working really sweet. But there's just a development environment. That’s not something for life. So now you have a difference between the hive and your development environment which as far as I'm told and people beating around the head is like not a good thing brackets T.M.
You're meant to have similar environments and if your only difference is literally the hardware that is running on, you can narrow it down issues right
Michael: Right you don't get weird issues in life. You just can't reproduce in development.
Mark: I mean you always will because that's the truth of the Internet. You get less. Well, you get less issues that’s your fault.
Michael: And also, you can put that whole composed script in to get.
Mark: of course
Michael: If things start going south off at some point, you have some idea what happened.
Mark: Right so both machines go into every [inaudible] like good but the sort of 22:08 [inaudible] for the actual machines which has like all the differences between your machine and the base machine. And this is nice thing because then you have like these layers of stuff.
So when you’re building a machine, it goes and downloads that send a [inaudible] to machine or whatever and again people in the background are screaming at me because that's not their favorite version of Linux and the smaller ones.
There’s Alpine which is like five man something but you can actually running and then on top of that you have say Tomcat right and what you install is only the difference. So if you install Tomcat, you might install Alpine and Tomcat.
And then, if you then install another application that happens to be Lucy for example or other ColdFusion, both run like on the same base to have the same dependencies, you don't re-download them again.
So you can have on your machine reuse of different layers that are defined in the Docker file. A Docker file is a definition of like use Lucy and then copy the files from here to here and then copy the files from here to here.
And once you've copied all these files, restart Lucy and run the application. Whatever you need to set up your application, right. And the great thing is that you can see what it takes to run your application which is usually lost in the midst of the Note Pad that the admin had once, right?
Michael: Right, yeah! Who knows how the servers are really set up traditionally? But this way it's all documented which I think is another side advantage of this. So, you mentioned vagrant little earlier. What exactly people haven’t come across that? Is that a competitor to a Docker or…?
Mark: Vagrant was a way for everyone to… the problem that vagrant was solving was actually having developers, having a way to have a development environment app very quickly without knowing how to install that development environment.
In my experience, it’s been the opposite because it can't get quite complex but the whole idea was you just installed vagrant and then at the base of the root of your project, you have a vagrant file and you just did vagrant app. And what you'll do is doing the installation, do anything you need to set up the environment and you had a development environment. Not an editor but basically the web server running, a database running or whatever. We use that still for quite a few things but we're now moving to do these Docker composers because they're like this is our environment.
Even if just of mocked up development environment but this is an environment that has a mock data, has got the database running. Even Microsoft is like really taking on board Docker so much, so that they like doing MS access skill Linux machines on Docker and various other things and the whole Docker environment. Like this headless windows that they're now doing. I'm not a Windows guy. So, I can't tell you all the details, and again I can hear people in the background shouting at me again, ‘you're wrong, you’re getting all the names wrong’.
Michael: Well, no worries. You're the one on camera so you can say whatever you want.
Mark: Yeah, that's right; I win.
Michael: So, with all the conveniences of Docker and only advantages, is there any point in using our traditional ISP anymore?
Mark: I think so but I think they really need to change because I know we say this whole thing about like cloud and they are changing. I mean it's actually even better for them because as traditional I.S.P.’s you have like OVM as like hey, go here's your OVM … can do whatever you want from it and I bet you they get… I mean, I get enough phone calls. I don’t know many phone calls they're getting with people going oh, it doesn't work on Wednesday. You know whatever the reason.
You know, there's no RAM. This is no this, there’s no that right and they can go in and they log into the machine and that's a slow thing. That's like, if I was running a business, I don't like people look into other people's machines. Those privacy concerns there. I mean, I know all the people who work with me are trustable but you see what I mean? If you don't like keep the requirements, you can have just random people logging into the machine.
So, they have to change a little bit in the sense of being able to… let me rewind. It's better for them to change because now what they were going to do is get the script and this is the machine that I need to run or whatever. We know how to run it. If we go back to the beginning of science like we know how to start it… restarts hey that the problem shouldn’t get a restart. Is it going there probably? You can probably do it from unknown network.
So, now they handle the gear and the networking and that sort of thing which is I'm pretty sure that's why a lot of them got into it. But I'm not going to speak for all ISP’s but there is a big space for all ISPs; they are the hardware of Internet. And I know we have this whole idea that Amazon and Google are the ones that are going to completely take over. That just doing it by scale, an economy that they can lose a several million on data centers because they just they take of the world.
But I think ISPs if they just move this way… be very friendly about that kind of thing. I’m just saying instead of just saying like oh, we’ll give you a Lucy box, we’ll give you a ColdFusion box is being able to say like hey, you just deploy your thing on the interface that we give you.
There's some great software that maybe we’ll talk about later. Like for example called “Launcher” which you can define your services. And say to deploy them and they'll scale and they'll become as big as you like and go across environments and across servers.
So, you going to have a whole number of physical serves… overture service; I beg your pardon. You know just a machine running these Launcher agents. You just manage from one place. So, you just scroll in to your environment and you define where stuff gets loaded and instantiated and how many of them usual kind of stuff.
I think this other ones now would not Docker specific like Cuban eighty's which is… I think it’s Google. I think it’s an open source project which is to do that. But it's running containers and they call them something else because everyone's coming up with their own little way of defining this idea which allows you to run and scale and do the green blue deployment idea of being able to have like okay.
So, I have got a new version of my software and I'm going to start rolling out a few servers like say ten percent of all my requests now go to these new version of my software. And if we're not getting any errors because we obviously logging errors, right. If we're not getting an error, we now can like deploy those out in these kind of waves of deployment of… as your source code goes out and it gets checked. And you can do the wave the other way if anything happens but instead of the wave going the other way of like everyone gets removed, you can just go right well, let's get rid of those new deployment and beat up the developer for whatever he did. And then after he is well beaten, we can redeploy it, right?
Michael: How can you tell if a developer is being well beaten?
Mark: You don't tell. You don't worry, they’ll tell you.
Michael: They tell you, okay.
Mark: They'll let you know.
Michael: We’ll put all these into the show notes.
Mark: Yeah
Michael: All these things that you have mentioned. So if someone listening is like hey, this is really cool. Like how the heck can I get started with this?
Mark: Well, the first start is just installing Docker, right? Now this is where the magic happens and this was quite complicated but it’s now simplified a lot. Before what Docker was a way just … you needed to have a V.M. in the background. Like it’s not a V.M. ware, it’s like Virtual Box or something like that that could run a V.M. because Docker wasn't really native to let say OSS windows.
So, you needed to install something and it run like on your machine but it's actually running in a V.M. Now they’ve made native versions that actually run on the machine directly and are fine and the same thing for windows.
So, that problem is going on window. But basically, you just install Docker and it handles most of that for you anyway. The next part is if you want to like get started, go to Lucy's… I don’t know if Adobe’s ColdFusion have got Docker files but if you want to get started the steward…
Michael: They exist if you go through command box but I don't think Adobe has them set up.
Mark: Has some… right. I'm going like to the basic thing because command box is again another little layer on top of all those. Actually, they are using Docker to stuff things in the background. Like if you're just going naked for it, you can go to 31:16 [github/Lucy] and look for Docker boxes and then choose which one you want to run. Now you can… there's also another area called Docker Hub or hub.docker.com; that nearly all the software is there.
And even easier, right. Basically, I’m talking about what's underlying it but even easier. When you install Docker on your machine, it usually comes with software called 31:42 [Chimatic]. Now, Chimatic has got whole bunch of boxes there. It's base searching to Docker hub.
So, you can just put in, punch in whatever you want to look for. Let's say Lucy, right and you go here's Lucy. I want version five, press start and it just started. So you know, what it would… I say it just started in the background, download all the requirements, it will download all of the boxes and needs. And then, you have a version for it. Now of course, starting it up by itself what will happens in the instead of Lucy starting it up.
And you go great, I’ve got Lucy running on port 8080 or whatever. Now what I can't have access to the physical machine that this has the files in it. So, I can't run any of my stuff. This is when you can go to the command line or actually Chimatic does it but, it's just easier to do command line. Then you attach a volume to it and by attaching a volume I’m saying like you say, this folder like this my local folder is mapped to that folder on the container.
So, when I started, this container is just going to be looking at that folder. So, there you go your development environment is up and running. You can do the same thing for ports for example. So, let's say Lucy in the container actually runs on port 8080 but you don't want it, you don't even need a web server to run Lucy, right?
So, you can just say actually Lucy you run on port 80 on my local machine and point port 80 on a local machine to port 808080 on that machine and there you go. You've got a server running. And I'm saying this on your local machine but this could be on a server that's just running Docker, right? That's all its running see you know, running is called Docker install. So, you can actually say install Lucy or Docker run Lucy point on port 848088 point to this folder. What a bang. There you go, you've got an instance actually running live on the Internet.
Michael: That is amazing.
Mark: So, that's it.
Michael: And you can just copy your code to that folder on a way it's going running.
Mark: Right. That’s … but what you'd want to be able to be doing is creating an image of your application and that's where a Docker file comes in. So, the top of the Docker file you say “Docker file is literally a file called Docker file” and you have that in your … in the root of your application for example.
And you actually have a whole bunch of commands and they’re very simple commands, one is like from is usually the first one and you can then say Lucy slash Lucy five. I don't know what the proper name for the machine is. But that's the machine name in Docker hub. So, you say “start from here”, then you probably want to copy all your source code into the machine, right.
So just copy from my local folder to the internal folder of the Vagrant machine and whatever else you need to do right? That's generally it and then you do Docker build and what you would do is you would create an image of your layer that's specific to you. Then like virtual control you can actually connect that and then you can push it to a repository like Docker hub for example. But that's an open repository. But once you connect to Docker hub and I think pay them some shekels, you can now have an account which means that you can have private repositories, right.
So, once you have a private repository, it means that you can have your machines or you can run your own repository. There is software to do that or AWS for example Amazon's cloud hosting they have repositories for Docker container. So, you can push it whichever way you want to do it right. So, part of the C.I. circle of life that you have is that you have now pushed your code out. You've got your instance of a machine and then some of the machines somewhere else are going to go hey, there's a new machine, let me go and deploy this to the cluster.
Michael: That’s where the magic happens right?
Mark: You could have Jenkins somewhere going, let me just check this repository if there’s anything else, anything new happening. And the moment there is, you just blow him all up.
Yeah, the Docker file is where you define your application and you do Docker bell and there you go. That is your application, you can just run it. And if there's been no changes, it’ll just run it from your local cache of containers. Your images I should say.
Michael: Now, if you want to have a bunch of containers, is that where Docker’s form comes in for controlling that or?
Mark: Well, Dockers form precisely allows you to do is run containers across machines. So, this is similar to… I mentioned earlier and I’ve forgotten. I have to look at that.
Michael: 36:55 [inaudible] Vagrant?
Mark: Yeah, I have mentioned so many things but…
Michael: You have, the show notes are quite extensive.
Mark: What it allows you to do essentially is be able to say right. So, I'm running all these containers. I want fifteen to go over here and fifteen to go over there, right?
Michael: oh okay
Mark: Or I have a Docker compose files. This will go into this serve room, this will go into that server. Is the ability to run them. And I think they are changing the name of it. I need to catch up a little bit on what Docker’s forms been doing recently.
There's also the study of Docker cloud which allows you to just run the actual machine somewhere else. And this is what the real net benefit of Docker is, not just because of Docker cloud. It's that we now can have applications that you know run anyway.
The true run anywhere thing because we take care of the internals. So, you don't need to have ISP’s that say yes, we accept Lucy apps or we don’t do ColdFusion nine app. So, we can only do ColdFusion eleven app; whatever the massive license for. They go like we don't care, yes. They're like the licensing issue aside. We can run whatever software you're running because it is in a Docker container and we can run them.
Michael: Right, so even in that case, who takes care of the patching of all the stuff in these containers then? Is that you?
Mark: That will be up to you. Why? Because you take care of the application.
Michael: Right so, instead of the I.S.P. doing lap patching of cold fusion on the job of virtual machine or what have you now.
Mark: Because of the one machine right? So, if you look at the little slice of your application you have a job or an aversion machine. Now of course, you could say it one in theory, let's talk about Lucy because it's much easier because there's no…
Michael: yeah
Mark: Licensing issues behind here. In theory, Lucy who maintains the dock 38:54 [inaudible] Lucy is up to them to maintain. Make sure that is using the right patched version of Tomcat, right. And it's Tomcat’s job to say that they use the white patch version of J.D.K.
Michael: okay
Mark: Makes sense?
Michael: yeah
Mark: Now, you can… what’s so nice about it; Even though we have these dependencies is that if you wanted to you can say I have my own machine, my gold standard of a patch version of I'm going to… I’m saying 39:31 [inaudible] again but let’s say [inaudible] with J.D.K. and X-Tomcat right and it's all patched; that's my gold standard and on top of that I run whatever. So you could build that machine by yourself using another Docker file. It's just easy to say like I'm going to use from Tomcat or I am going to use from 39:52 [crosstalk]
Michael: So, when you are putting together your container, you can either say “get me the latest version of Lucy or Adobe C.F. or whatever”.
Mark: right
Michael: or all that stuff
Mark: I’m not care about the Apache or anything else. I’m not care about Tomcat and J V M or anything like that
Michael: Or you could if you wanted to like you needed to test specific versions. You could tell it I want to test against the specific release version.
Mark: right
Michael: Because the other thing I've seen people use Docker for is that they've got some code and people are running it against C.F. nine and ten and twenty sixteen and you know Lucy four and five and goodness knows what else. But instead of you having to have half a dozen different service set up for this, you just spin up a new container.
Mark: Right, exactly and it can be pointing in the same code. So, they can all be running at the same time just on different ports pointing at the same code. And more importantly, I mean more amazingly is that before you would have had to do a whole different port mapping which you kind of still have to do but they all contained within themselves the containers right. But also like you could have hey, so this is ColdFusion on Red hat.
Right, and then you saying I'm also running… I'm just using sporadic examples, right? But I’m using Lucy on Alpine and I guess at some point we're going to say and this is ColdFusion 2016 on headless and what's the server version of the headless server of windows on windows 2016, right?
So if there is Docker versions of windows with that, you could test them on different operating systems as you go along.
Michael: That sounds really good particularly if the testing is automated.
Mark: right
Michael: So, you've got some scripts running the testing. So, every time you make a change, it gets put into get, comes back out in these containers.
Mark: right
Michael: Gets spun up temporarily to test in all the different versions and even problems come back to you and then they go away.
Mark: I mean then that’s the important part. I mean about the part of the C.I. cycle with Jenkins for example. Jenkins is fairly lightweight in itself. It’s just a little world but now, let's step back and say alright, so I’m now building my test machine. Okay, what’s my test machine? Alright, is this beefy machine that sits in the corner over there? I’m going to install Docker on it. Okay, I have not solved Docker. Now, through Docker, I'm going to have liked one process that starts up Jenkins, right? 42:30 [crosstalk]
Michael: In a separate container.
Mark: In a container within that machine
Michael: Okay
Mark: Now, Jenkins is running then you go and create your task there .So you haven't installed anything you later just go run Jenkins and it goes and downloads the entire requirement to starts Jenkins. Then you log in, do the whole configuration of that, save that, right.
Save it as my little Jenkins…that’s the machine of Jenkins. So, if you restart it just calls stay and then you go right. Okay, here’s my stuff. Now, I'm going to download the source code of our application and I'm going to run a Docker container and run the tests on it within the whole same Sheen right? So, the only thing I actually installed was Docker on it. The rest was just telling commands of what it should do.
Michael: And for those who don't know Jenkins is a continuous integration of open source software that you can script out what's going to happen whenever a new piece of code gets updated and it goes off and runs automated tests or copies it to your server as well.
Mark: Yeah 43:22 [crosstalk]
Michael: Sent you little slack messages because that's how you like to roll.
Mark: Yeah I get like messages from Jenkins all day on my favorite chat book. Keeps me updated on what everyone's doing. Especially when you get the double one where you get the commit slack notification and you get the Jenkins' like test pass and notification on when.
Michael: Yes
Mark: You know but exactly…
Michael: I was hoping for a little AI layer there that would filter that out so you'd only see when there was a problem and if it was so quiet you knew everything was okay.
Mark: Yeah, I think most fairly quiet because it's only tell me when things go broken.
Michael: yeah
Mark: But… So yes you can do all that kind of orchestration and is kind of fairly simple. And you only have one software to install because other people have taken care of how this other stuff should get installed right and then this 44:30 [crosstalk]
Michael: Anything else you want to tell us about Docker before we wrap this episode up?
Mark: I think that's about it. I mean go out, use it. The nice thing about it is that if you're interested… I mean we’re all super in to C F M L. We've been using as an example but if you wanted to try out some Ruby, if you wanted to try out like some node and just run little node programs without installing node on your machine because you don't want to sully your machine with such kind of software.
You can run a Docker container, test your little script and get rid of it. I mean I don't know about you but I've tried a lot of different technologies and then like months later go, what's this folder full of crap in it? And it's like the installation of…
Michael: I don’t know.
Mark: Whatever I got installed there right.
Michael: Yeah, and whatever do you do it left in your registry as well or what OS you happen to be running.
Mark: Exactly 45:24 [crosstalk] and you've now got this great dude left on your machine for time in memorial.
Michael: So you can think of Docker as a way to contain rise your dodo?
Mark: Exactly containerized you do and also well, one of the nice things about it is that you can actually see which images you've downloaded. You just do like Docker like list images and it will give you like this is all that or your dodo that you've had from before. So you can like wipe the dodo .I'm glad we’ve done a very mature organization on this.
Michael: Yes, from bananas to dodo.
Mark: In one podcast, you can’t get that anywhere else.
Michael: Can you run other software in Docker container? I mean can you basically run everything you have on your machine?
Mark: I don't think so. The things that…
Michael: It’s only web apps really
Mark: You know some web apps are headless apps. So, I would say more. It is something that has U.R.L.'s again people in the other side screaming at me again, why did you get in? But everything is web now and it's like there's nothing you can't do without web technology.
Michael: Well, that's an interesting thought because like you think of the problems you have on a traditional operating system where you install programs and they leave dodo behind them, get on with each other and what have you. Wouldn't it be great if you just stick everything in a container and whether it ran on your local P.C. hardware or off running in the cloud, you didn't care?
Mark: Right, I think there is an iPad, isn’t it? Like this… how we going to.
Michael: Yeah, iPad and whatever the Google version of iPad is. What do they call that? Anyway some paddy thing.
Mark: [inaudible]
Michael: yeah.
Mark: Pretty much easier especially if you can list them and you know that instead of using all of that… I mean one of the downsides of Docker is that after using it for a while, you start getting why is my machine like filled with stuff and you look at because all the dependencies and I'm down right.
So, if I said we needed Red Hat and we needed Alpine, we needed this. Sometimes, it doesn't wipe everything that it needs, right. So, like because you have like I don't know if I can do a command now to look at all the stuff that I have or probably have gigabytes of images that I’ve built or half built; because they don't get deleted because it shouldn't get deleted, right. Because for example 47:44 [crosstalk]
Michael: I think it’s catching them so it can run faster the second time you run it.
Mark: But also because you have sometimes been tamed state inside, right.
Michael: yeah
Mark: Not all the time is like this is image, you can save it back as an actual image but they don't always say state. Each time you start it will have something new. But you can actually say okay I've saved it, this is my image, this is my new image.
I replaced the one, I downloaded with the one that I modified. A perfect example being I downloaded Lucy started something else now I can say okay, like I've not changed all my data sources. I have changed all my settings, save this out as a new machine saying this is my this client machine. I don't think this is for my actual client’s machine.
Michael: yeah
Mark: And then use that for other stuff and then after years I don't have that client I can delete that. But 48:38 [crosstalk]
Michael: Doesn't Docker give you a choice as to whether you want to save the whole image or you can just save the scripts that created the image?
Mark: Well, you just had the script. That's the cache image. It just means the next time you run the script, it doesn't have to go and download all the different layers again.
Michael: Right so, I would have hoped they had some way so you can see how all those images are.
Mark: Yeah, you can.
Michael: And clean them up.
Mark: I don’t think of… I’m just trying to see what information to give you. I can’t remember from the top of my head.
Michael: Well, we’ll add that to the show notes.
Mark: We'll add that to the show notes.
Michael: Let’s change gears now to a slightly different subject. Which is why are you proud to you C F M L?
Mark: One of …well have been… not because of you know using all the time. I'm proud because you get stuff done. And I know people going to be throwing things at me again. But no doubt, P.H.P. is just an easy way to get things done and it's such a modern language that people don't give it credit for. It’s both like a dynamic and you can use type stuff in there so you can be a straight draws on strict as you want.
It’s fun language and now with command books has been a real change of fortune and command box are massive change the one stuff straight from the command line stuff I was doing in node. I'm now doing back in C.F. I'm out again…which is fantastic because I was having to go to nodes to do something that was just going to run on the command line.
I don't want to start up a whole server instance on a thing like that. But now, command box allows you to do all of that. So, it's become a completely modern language. I'm proud to use CF because it is a great language. Has its quirks but hey, show me a language that doesn't.
Michael: Pretty hard to find a language that doesn't have quirks.
Mark: There's going to be some guy out there shouting, but my language just makes complete sense.
Michael: quirk free
Mark: Quirk free. I mean and you can scale it from small to large right. You can get people like really up on it which sure has given him a bad rep because all these like making bad code. But people can write bad code in any language and what I have seen consulting and going round is something that I could you get in a language.
But it's a lot of multimillion dollar businesses that were grown up from an idea that a guy did not know how to code or the girl that did not know how to code just did it with cold fusion or CFML. They just went oh wow! I can do my idea and now I'm dealing with people like rather have multi-million dollar businesses all born out of ideas like that.
It makes me proud. Again, I think somebody else is going well, other people been doing that. But it's a real easy way to get into Web development.
Michael: I mean be sort of like the grammar police complaining your book is full of grammar errors, Mark.
Mark: Your multi- million selling book, right?
Michael: Because you started writing it using Word instead of you should have used this other word processor instead.
Mark: Right and it's like the content that matters, right?
Michael: right
Mark: Exactly, it’s like and you're able to go from something that's a wacky idea to something that's actually out there and deployed.
Michael: fantastic!
Mark: yeah
Michael: So I’ve seen monster twice those blog article saying ColdFusion is dead or dying.
Mark: Oh God
Michael: Yes
Mark: Is it?
Michael: But I want to ask a different question which is, what would it take to make ColdFusion even more life this year?
Mark: I think it’s the efforts of all authors and you have to like take your hour off them. They are making massive change. The Forge box product like having… allowing people to make 52:32 [inaudible] not write code, be able to like we stuff together very easily.
Forge box is getting there and I think we're having dependencies and things like that being able to… and the box files. Being able to say oh this … I just have this immense in install this widget and I can just use it because sophomore is guide to do that from day one, right.
But we didn't agree on a format of deploying these things and that's been the failure. So, what can make more C.F.s more alive this year is having more forge box apps point one why anything. Like a teaser like here you go, here's an idea for people out there. Cleansing of phone formats, right. Phone formats across the world always should actually be plus date, plus country code and something else right. Write something that turns any stupid number into a properly formatted telephone number, right.
Add that to forge box and everyone will be using that. Don’t make it something you have to Google and go to various different websites to find what their proper widget is. I don't want to do that. I don't care. I want to just have a telephone to proper number or whatever you call it.
But that's just an idea. There should be hundreds of these. There should be like your first choice of kind of like how do I do this? It’s just like how can I install something? And I will speed up the amount of the apps that are out there because you know people are…
Michael: That a way to share some cool stuff you've written. You know if you’ve got little functional or whatever.
Mark: I mean we have rare forge for a while for that. At the promo of rare forge, I had to go to rare forge download, read the instructions on how to install the stuff.
Michael: yeah
Mark: Which is a turbo box?
Michael: Turbo box is plug and play
Mark: It’s more like Docker I would say. You just don't care what's in inside, you just use it.
Michael: Yeah, but I think the other benefit of people sharing some code is I know when I share code publicly, I make the code a downside better than if I just kept it private.
Mark: Right because you know 54:42 [crosstalk]
Michael: I was talking to the folks at pixelates to make; what is it that puffin. What’s that software called?
Mark: Preside… Preside
Michael: Preside! There little animal represents them as a puffin.
Mark: yeah
Michael: But they said when they went from closed doors to open source and everyone they kind of open the Komodo on their underwear. Suddenly, they decided they needed to wash their underwear.
Mark: alright
Michael: you know?
Mark: right
Michael: They code a lot better because you know, of course people can contribute to whatever code you put into forge box and lots of that.
Mark: And this leads us to the massive benefits of the open source world, right? They then have like stuffs for contributing agreements. So, you know what the licensing for stuff is which sometimes you don't. If you just chuck stuff away, you've got codes of conduct which means that the Internet becomes the professional internet. I mean something first on internet becomes a better place. The rest is unruly but at least, we can say like we are welcoming to everyone's opinions.
Michael: Is there a code of conducts for CFO’s, do I missed that?
Mark: Whether the github has a code of conduct. So, but before you start creating your own repo that you going to start share stuff in because when it goes into forge box, you can just add a read me, add a code of conduct, add a contributor’s agreement. So people have to do the proper licensing all that. So you know on this little… I know that that wasn't answering the actual question but that's the part that we start treading and normalizing.
Michael: yeah
Mark: You know that we have to be nice to each other because there are different opinions out there.
Michael: Yeah, just be civil. I mean it doesn't mean you can't give feedback. Just be nice about how you do it.
Mark: Right, be constructive, just build a better thing. I think that's one of the key ones and the other one is for people to stop getting into these versus…
Michael: battles
Mark: Right, like Lucy versus ColdFusion where they don't matter if it's very easy to say like one or the other. But just expound on the virtues of the stuff that you do. I always say like say the positives, say the good things about the thing because when you get into… I'm doing web… I'm also doing game development at the moment and it’s like two big engines. One is like I’m the real energy and one is like this unity. And they have this battle like, which one should we use?
And the pros and cons of the other ones and I’m like I don't care; choose one or the other. It's an argument that you have at the door but once you step in, choose one of the other go to the left go to the right. You find out whether it's good for you or not, right. And then you go like a good like my engine is great because of its great because of its good parts. You don't start going it's great because of the failures of the other one.
Michael: Yeah, I think it's a switch between the black and white, right and wrong judge mental attitude. I don’t know if you've ever done 57:42 [inaudible] but they have a thing called 57:44 [Yes and] where it doesn't matter what the other person said. You're always like Yes and because you said that clever thing, I'm going to add on something else too.
Mark: Right, to make it better.
Michael: Language X is really cool at this Yes and. It's cool at that too.
Mark: Right instead of Yes but
Michael: Right because but is a very… it kind of closes off conversation.
Mark: right
Michael: It's like the terminator in your programming language.
Mark: Right, it is a summary code of language.
Michael: Yeah 58:48 [crosstalk]
Michael: So, you’re flying quite away to Washington D.C. from London to go to C.F. objective. What are you looking forward to this year's CF objective?
Mark: Well, for me because it's been like over a decade of flying from London to various conferences. I actually meeting up with a lot of cool people that I don't get to meet up as much as often. I realize the people in the states also the states is kind of like some big country or something up on 58:46 [inaudible]
Michael: I know that Omar is a big country.
Mark: Yeah but you know it's a big sea between us. So, I like going out there. I like talking to people and seeing what they're doing. Also, it’s nice as time goes on. The presentations that start going out these conferences; really high level. They've always been good and they're getting better. But it seems that we… just because of the majority of language you don't have all these like getting started on ColdFusion.
It just seems to me like right there like you feel like your brain is expanded by the time you leave. And it's that feeling of energy and brain expansion they feel like after the conference is over, they come back. And every person I've talked to comes back from the conference and is like psych I want to try this, I want to do this.
Michael: right
Mark: And hopefully they could keep that going to the next conference and keep that going.
Michael: Well, with… I think it's at least six ColdFusion conferences this since year. So, you don't have a long to wait.
Mark: Yeah, I think I've got obviously September off. But I think maybe this C.F. summit is in September, I’m not sure.
Michael: I think it's later this year. I want to say it's November.
Mark: Right yeah I think it might be November.
Michael: Yeah, there is MC depth con or whatever they call it.
Mark: right
Michael: There is C.F. camp in Germany.
Mark: Right and there’s like one week before the other. So, I’m going to go all the way to North
[Dog howling]
Mark: Excuse me
Michael: Yeah, your dog wants to go too.
Mark: My dog is really excited about MC Defcon. Yeah, he's a cold fusion junior in the house. 1:00:30 [crosstalk]
Michael: And of course we also got cold fusion developer week going on.
Mark: When is that?
Michael: I think it’s in August someone told me.
Mark: Okay, so I have to go somewhere in August. I thought I had like nothing in August.
Michael: That's virtual so you don't have to get on a plane to go to that.
Mark: No but even better. I can just sit here and hang out. But the things about that are that it’s very different to the actual.
Michael: Yeah, it's all virtual drinks you know.
Mark: Yeah and of course the time zone just makes it really awkward sometimes you know.
Michael: Yeah but they record them so.
Mark: Yes it's fine. You can watch it whenever.
Michael: You can have your little bots be cued up with questions to put into the chat while you are asleep.
Mark: I’m going to write to see a button in command box. I’ll just do that.
Michael: yes
Mark: Like Mark's chatting away. It's like he's awake 24/7… little do they know.
Michael: So if people want to find you online, how would they best to do that Mark?
Mark: I am very active on Twitter, that's the best place to get me is @ Mark Drew. I am sometimes I'm on the CFML slack. People should go on but I'm a member of quite a few slack groups. And so yeah, Twitter is the best place to get me.
If you want to email me and it’s not being a public, my name is Mark. My email is [email protected] So, Command Headquarters dot io. Yes if you want to email me, do that and if not carry a pigeon usually works. That's all trusted one or I think Raven, isn’t that? It is ravens now because of Game of Thrones
Michael: Oh you have to use ravens instead of pigeons now?
Mark: Raisins in the Ravens get here then.
Michael: Raisins swallowed by Ravens. God I’m getting at a little tongue twisting here. You’ll be putting me inside a Docker container next.
Mark: Yeah, well and then you just classify them and then is all fine.
Michael: Apart from the Raven shit collected from the container
Mark: Yeah, well that just logged out to like another container.
Michael: Well, thanks so much for sharing all your great insights on Docker and ColdFusion today and may your Docker C.F. objective go wonderfully.
Mark: Thank you Michael, it’s been a pleasure.