Welcome back to Devops and Build Automation with Python, this is the fourth course in python scripting for devout specialization. All right, so in this module, we're going to think about containers and mainly from a development perspective, because this is a DevOps course right? And Containers allow developers to have a controlled environment to test and deploy their applications. So I'm sure you've heard the problem, which is it works on my machine is what a developer often says, but then it doesn't work when it gets deployed. So the idea here is let's control the environment so some learning objectives. By the time you're done with this module, I'd love it if you can describe the need for containers, I'm hoping you can install and configure a Docker container. And lastly, you should be able to script a Docker with Python. So to scripted container you've got set up in Docker with Python. All right, so let's start out with what our containers and why do we need them? Okay, so to start, I want to think about something else which are virtual machines, because I want to contrast containers with virtual machines and virtual machine. Often abbreviated VM is the virtualization or emulation of a computer system. So it's exactly what it's in the title, right? It's not a real machine it emulates a machine and VMs run a complete operating system, including its own kernel, and you've probably run a virtual machine before there's lots of them out there. Containers are different they're an isolated, lightweight silo for running an application on the host operating system. So containers built on top of the host operating systems kernel. So there's one kernel shared between the containers and the host, okay? And so that means that the operating systems must be the same in the containers and the host. So some common virtual machine providers you've heard some of these VMware, VirtualBox, Xen, Microsoft has Hyper-V, and KVM. And then we've got some common providers for containers. So Linux Containers, we have several in the series of LXC, LXD, CGManager, Docker is the big player right now. I say right now because, like all things, the industry will change over time. And as I move [LAUGH] to the right of the slide in front of you Windows Server, right? So Windows Server Containers will probably start taking some of that market away from Docker as to my expectation. But I'm going to focus on Docker right now because they're the big player. All right, so some benefits of Containers for DevOps one is Less Overhead, right? Containers are typically faster than virtual machines because they don't have to run their own operating system. Reproducibility, Containers are much easier to reproduce because you'll see we're going to have a Docker file that says, what's in that environment? Versus a virtual machine, this is a much bigger file, okay? And containers by default are immutable what I mean by that is essentially they don't change so you spin it up, you do something in it. And when you spin it up again, it looks just like it did the last time you spun it up versus virtual machines are mutable, right? You spin them up, you make changes and those changes are saved by default, okay? All right a little review here each virtual machine guests can have its own operating system. Containers share an operating system with the host and containers are immutable by default. All right, see you next time.