 So I'm Vincent Betts. So Docker in five. This is a five minute lightning talk. I've been involved in a lot of things, but right now I'm presently on the red hat and OpenShift side of working with Docker. So containers, what is this all about? And has anybody has anybody played with the Docker containers at all yet? It's crazy. Okay, so more than half the room. So Docker has been a very very fast paced technology. Like Brian just was talking about, Linux containers have been around for a little while. There was mountain namespacing even starting in the 2.4 kernel, but even as recently as a 3.8 kernel, we've had user namespacing. And so a lot of the namespacing and C groups, the control resource groups have allowed the Linux kernel to do is to partition off and say you're allowed this much of this and this much of that. And when you're running in your PID namespace, this is the host that you see and this is the network that you see and isolating off and coordinating off PIDs processes so that they can only see their little world. And so it's gotten us to a position now where like the LXC tool, LXC has actually been around for a long time, 2008, but it just had its first 1.0 stable release earlier this year, like February. Whereas Docker, they started cooking up Docker around January 2013, but it didn't have its first public release until last summer. And it also had its 1.0 this summer in about June. And it's crazy, like it's already up to 650 collaborators, contributors on the GitHub and over 10,000 stars and forks. It's a very hot project. What are some of the problems that Docker and all the container technology, why is it getting all the hype that it's getting? So some of it is the conflicting run time. So why do people really, the first thing that people look at it and they say, oh, I can Docker run and Fedora this thing. I can YUM install this thing and it works just dandy. And then I can Docker run Debian this thing and it works just dandy. It's because of the conflicting run times. Anybody that has ever been a sysadmin says, oh, I want to run that service. Ah, it's compiled on that glibc. It doesn't work with the system I'm on. Or, oh, this thing needs user bin Python to be 2.7 in my, or 3.2 in my system needs 2.7. And I can't just send link it and I really don't want to recompile it. And good gracious, that's just, so no problem. No problem. No problem. That goes away. So the next thing is like port mapping. People say, okay, so I've got this little fun service or maybe you're a sysadmin and somebody says, here I have this service. It runs on port 80. I can't change that. You need it to run on port 80. Or I have this service that runs and it writes a bunch of sock files or it writes in some weird places. I can't change that. So thankfully for the VM world, you've had people say, okay, that's no problem. You can spin up a new VM. It'll listen on port 80. No problem. Docker, that kind of goes away also because you can start mapping out and you could have 15, you could have a lot of HDTPD services all listening on port 80 and you're mapping it around. That's not a problem. No problem. So this is one that gets me a lot and it's actually become kind of a fun use case of when you have reproductions of bugs and people saying, well, here's how this thing does it. It works for me or I can reproduce it this way or somebody hands you some code and says it works for me and you're saying, how am I supposed to run that? You just were given a pile of something. How am I supposed to do that? This also is no problem. So then you have ops to dove. This one cracks me up because often you'll have people that say the developers who, I'm a developer, I'm sorry. I also was in ops, I'm sorry. You'll have people that hand you some pile of code that might not have really seen what it looks like in a real production environment and say, I need you to run that. And the operation looks at it and goes, you've just introduced a host of new dependencies. You've just introduced something that cannot run in our environment. How am I supposed to actually run this? You expect me to put this out into my environment and the developers say, sure, why not? Well, with Docker, that also is no problem because you can start bundling up and shipping these containers basically immutably. Likewise, you have the developer saying, you did what to get our code running? I mean, you actually hot glued and duct taped it together. You did what? And this also is no problem because with Docker, you start having these reproducible runtimes. So lastly, I mean, all of this starts getting around a big problem that even if you're not in a production or operational type environment that you start wondering, so reproducibility. Like, I ran this thing in a certain way some months ago. How do I do that again? Or I want to run it in my CI environment. How do I do that in production or vice versa? Reproducibility is often a conversation that is, you say, oh, I can think about this in a couple of hours and then like two sprints later in your work cycle, you're saying, we're still trying to figure out how to have this process ironed out. A lot of reproducibility also goes away. So that's a lot of talk to say the very fundamental subtleties of what happens with Docker is when you say Docker run something busy box and I want you to just have some job, hello world, and it does it. That's fine. People are like, that's cool. But then when you say Docker run a Redis server, and I just need you to publish the port somewhere, I'll figure that out later, that you then can see, you've actually got a PID running somewhere. And when I go into that PID, I'm actually looking at PROC number one. So if you're not a nerd and have like meddled in the PIDs of a Unix host at this point, the PID number one is that application. It doesn't see another process. It's listening on a host, a port that might not be its normal host, but it's its own little isolated environment. So then you say, well, how do I do that? Well, there's also a syntax for that so that you can build these out and say, hey, I've got my application. It listens on port 8080. Here's what I do to install it. Here's what I do to run it. Docker build that. Docker push it out. Now it's published. You can share that with other people. You should say, no, no, no. To run my application, you don't have to worry about whether you're on Debian or Fedora or whatever. Just Docker run this thing. It'll pull it down. It'll run it. It'll plumb it up, and it just works. So a lot of those no problems go away. Really, that's it in a nutshell. If you have any questions, now's not the time. Find me. Find me almost anywhere. I'm VBATs. Take care.