 My name is Brian Grace Lee, Analyst with Wikibon, and on today's Wikibon whiteboards, we're going to begin to understand container architectures. Containers are really the big technology talk about these days, especially for infrastructure teams. There's a component of it that's both application and infrastructure, but in this whiteboard we're really going to understand the basics of how it applies to the infrastructure, and we're going to try and put it in the context of things that most infrastructure teams understand today, which is virtualization. So let's go ahead and begin. What we've done, and again, this is for context, we've tried to take a standard environment that people are used to seeing for virtualization, and in this case we're going to use VMware as the example, because obviously broadest market share, and a lot of people understand what they do. So let's talk about the basics of what happens here. People understand what happens at the host level. I've got servers. Within each server I've got a hypervisor, so in VMware's case ESX or ESXi. Within that hypervisor I'm going to go ahead and create virtual machines, so every single virtual machine has a copy of the full operating system, and then within that virtual machine I've got an application itself or multiple applications. So everybody understands that pretty well. Now how I manage those hypervisors and virtual machines is through a centralized control plane, and that's called vCenter, and vCenter may be a single instance, it may be a clustered instance, but think of it as the thing that's going to manage the scheduling of the resources and the management of those resources, and it's really only focused on virtual machines. Now above that we're going to have, if we're deploying applications I can either deploy them by hand, or I may begin to deploy them through application templates. So I may deploy the same type of application over and over again, a web server, a SQL database, something else, do that consistently, I'm going to use some sort of typically a templating function, and a lot of that can come in the management framework from something like VMoreVrealize, and then on top of that I'm going to have my applications, whatever those might be, SQL databases, SAP, Oracle, Microsoft applications, whatever those things might be. So the key things I want you to understand is at the host level it's hypervisor, virtual machine, full operating system and application, and at the control plane it's this sort of structured format of vCenter, clustered vCenter, is going to make sure that virtual machines get deployed onto those hosts, and it's going to keep track of where they are and make sure that they stay alive using things like VMoreHA, VMoreVmotion, and VMoreFaultTolerance. So now that we have that basic context in place, let's take a look at how the container ecosystem is beginning to evolve, and in this example we're going to use Docker because similar to VMware, right now Docker is the most frequently used container technology, there are other ones in the marketplace, but we're going to use Docker just as an example, the rest of what we talk about will be applicable whether it's Docker, CoreOS Rocket, or a number of the other container technologies that are out there. So let's begin down at the host level just like we did over here, in the simplest form, I'm going to have a host, I'm going to have a server, we're not going to have a hypervisor, we're just going to have the operating system. Today in most container environments that operating system is going to be Linux. Now there's a lot going on in the marketplace where this will eventually be Linux and Windows, Microsoft is working quite a bit on this, but for right now let's just say that operating system is Linux, okay? I'm going to have my container runtime, which in this case is Docker, and you can think about that as sort of being like a hypervisor, but it's almost a lightweight hypervisor. And then that container runtime is going to create my containers themselves. And each one of those containers, now what's unique about this that's different from this environment is each one of those containers only uses, they all share the same operating system. So again, all of your containers within a single host have to run the same operating system, either all Linux or eventually would be all Windows. They're going to use the bits that they need from that operating system. So the net net of it is it's a lighter weight footprint. I should be able to boot them quicker. And the reason people get very, very fixated on I can boot a container faster is because in this container environment, the types of applications that I'm building tend to be more what they call ephemeral pieces of them are going to go away, they're going to come back, I'm going to want to spin them up quickly if I have a scalable application spin them up or spin them down. And so what you're looking for is a operating environment that will come up very, very quickly. So just to put that in context to spin up a virtual machine may take three, four minutes because of the operating system coming up to spin up a container usually is on the order of a second or a couple of seconds. So big order of difference between there. Now the second piece that's really important and this is where a lot of people kind of get confused about what's going on in the container ecosystem is what happens at that control plane. The first thing to understand is when we talked about, you know, virtualized applications, we tend to talk about very stateful, sometimes they're called platform two, sometimes they're called legacy applications, but they're more or less stateful. So the expectation is once you deploy them, other than maybe be motioning them around for availability, you're not scaling them up and down. You don't expect them to fail frequently. And so the scalability needed at the control plane is fairly well defined. Maybe it's a thousand hosts or 10,000 hosts. When we start dealing with containers, the types of applications we deploy tend to be more what they call 12 factor applications. Sometimes you hear them call modular applications, cloud native applications. The idea being they're much more modular. They tend to be more state less. So the idea of maintaining state tends to get pushed somewhere else. But they're designed for scale. They're designed for mobile applications, for real-time data applications. And so the control plane, unlike here, which tends to be somewhat stateful and more confined in terms of scale, has to be designed to be a distributed control plane and has to be designed to scale much, much larger. And so as part of that, what we see is we're seeing technologies come out that sort of break up the things that were functions inside of a v-center control plane into sort of distinct technologies that, number one, tend to scale more because they're written in a distributed manner. And number two, they've got a certain amount of sort of mix and match that you can have with them depending on what your application is going to do. So let's talk through the basic things that are in here. The first layer that you'll often hear about is clustering. How do I cluster together sets of container hosts? An example of this is Docker swarm technology. Another example of this is something like EtsyD from CoreOS. It's a technology to sort of figure out where my clusters of hosts are gonna be. The next layer is what's called service discovery. If I'm deploying hundreds and hundreds or thousands of devices, I want to be able to figure out what services are available. Queuing services, database services, notification services. The things that are out there, I need to do that dynamically and automatically. The next piece is going to be scheduling those containers. Just like v-center is gonna put it on the right host to make sure that it's load balanced properly, there's a scheduling function to make sure that containers get deployed to the right container. And then the next piece is what they call application scheduling. So in these environments, I don't tend to schedule my applications. In these environments, they could be a mix of batch applications, Hadoop applications, long running applications, short running applications. I need a more advanced intelligent scheduler to make sure that I'm getting the containers and the applications deployed on the right place and as efficient as possible. And then on top of that, I have my actual applications. So the takeaway from this is at the host level, some difference between how heavy a virtualized environment is going to be versus a container environment. And that you want that to match how your application requirements are. And at the control plane, a more structured model for doing the functions that you need to manage the environment. In a container model, a more distributed model. So with that, I'm gonna go ahead and wrap that up. We're gonna get into some more depth in other videos. We hope you enjoy these. Once again, this has been a Wikibon whiteboard video. You can find more information about all of our research and all the information about these technologies at wikibon.com. And again, if you wanna follow me, again, my name is Brian Gracely. I'm at Be Gracely on Twitter. Or you can follow at wikibon on Twitter as well. Thank you and have a great day.