Today on the show: why containers? Where do they come from, and which problems do they solve?
Hi, Karl here. Let me tell you a story from a couple of years back. Imagine a team of quite stressed out developers. This team at Nokia Research Center had been preparing for a Demoday, to showcase their new applications to an excited audience. Luckily the team had already finished building their application -- or so they thought. During the evening before the Demoday, they started to prepare the application to be showcased in the demo. This meant moving the application into a server that was located on the second floor of the office. Yet, the size of the application was huge, so the file transfer took all night. In the morning, half an hour before the demo, the project manager asked for a small change to the application: could the developers change the color of one of the buttons from blue to green. This wasn't a hard task: The developer was able to make the change in a minute, and he could show the result on his computer to the project manager. But how could they make the change apply to the server? They had no other solution than to grab a USB stick and start running… These types of problems could be solved with a technology called -- containers :)
Hi, and welcome to Cloud Gossip. I'm Annie and I am a cloud marketing expert and a startup coach. Hey, my name is Teemu. I'm Cloud developer, Devops trainer and an international speaker. And I'm Karl and I'm a cloud & security consultant for enterprise customers, and I also moonlight as an international speaker. Today on the show: why containers? -- Where do they come from, and which problems do they solve? And by the way, no worries if you didn't understand all of the terms used in the beginning, that is why this podcast exists. Glad to have you with us! This podcast is part of a 4 part series, which you can find either on Apple Podcast, Android podcast apps or on our website CloudGossip.net.
Okay, so in the intro we highlighted the problems of software development. Now -- we will do a rundown of terminology, and the history leading to containers. Things in real life are more complicated and things will have more layers to it. But here we have tried to simplify and find the best definitions and examples to get you started and grasp the basics.
Let's talk about application development process, which is essentially the process of how applications are built and made available to the users. The process starts with developers building applications on their own computers. And finally, when applications are finished, they are moved to the servers.
We call this deploying to production, which is a fancy name for essentially releasing an application. The biggest difference between development and production phase is that, on the latter the application is continuously running on the server to serve a lot of people -- not just the developer.
So, what are servers? They are expensive computers that are specially made to serve thousands of users at the same time and are never meant to be powered off. Where computers are made for personal use and normally turned off after use.
As an example, a regular computer might store your holiday pictures, your favorite games or you might browse Facebook with it.
Servers are the infrastructure that all internet services run on top of, like a house is built on a foundation. Servers typically house software that thousands of users can use at the same time. For example, Facebook itself, or any of Google's sites are housed on servers.
Hey, did you know?! Previously, we had servers so big, that they filled entire rooms. They would also cost a lot of money, in the realm of hundreds of thousands of euros.
Servers have evolved over the years to be smaller and nowadays you can fit them under your desk. This is very much the same process as what happened with mobile phones; evolving from old and clunky phones, into the small smartphones we currently use.
Let's switch gears and talk about operating systems. On both regular computers and servers, we have an operating system, otherwise known as the OS. The OS is a collection of software that communicates between computers and applications. Operating system makes these all work together.
For example, developer's computer might have a MacOS operating system, and the server might have Windows Server operating system. If an application has been built on top of one operating system and is then placed on a server with a different operating system, things can get a bit messy.
Why does this happen, you might ask? Well, if the application has been built and is used in another system it might not function properly in the new environment – the same way if an athlete trains in a high-altitude environment, they may not be able to exercise the same way in a low altitude environment.
All in all, developing software for servers involves dealing with many problems. Servers are expensive, cannot have more than one operating system and having multiple applications on the server can make them all fail -- since they might not play well together.
This is why virtual machine technology was introduced. Virtual machines enable putting multiple operating systems in a single computer, through a progress called -- isolation. Isolation means that the server or computer can be divided into multiple "boxes" so to say.
Then every box can have their own environment -- also known as an operating system. This let's us have more than one application in the same server in a secure and portable way -- isolating the applications from messing with each other.
Still remember the demo day we talked about in the beginning? All the demo day teams had developed their own applications with their own operating systems. The reason the teams were able to use only one server was that each of them had a virtual machine with their own environment on that server.
Then every application had its own isolated "box" -- virtual machine -- and it didn't affect the other applications.
However, from the developer's point of view, there are still problems with virtual machines, that would have made the demo day tedious. For example, virtual machines are handled as one big file. Moving that file from the developers' computer to a server is tediously slow. Data transfer through internet is not quick enough for files that large, so it might take several hours to transfer the virtual machine to a server via the internet.
If the server is physically close by, it is often faster to transfer the files to a USB thumb drive and physically run or walk to the server. And as everyone can imagine even though running is an effective workout, it's not the most productive use of time :)
As virtual machines were not the best possible solution for some of the issues, a new technology surfaced. And that is Containers. -- The foundations of container technology were invented already in the 80's, but was widely popularized in 2013 by a company called Docker.
Containers follow the same idea as virtual machines, but take the level of isolation one level deeper. Virtual machine "boxes" include the whole operating system. On the other hand, container "boxes" include only the application and the parts of the operating system that the application needs.
Containers are smaller than virtual machines, because they don't include the unnecessary parts. Containers are typically a hundred times smaller than virtual machines. This makes them more portable and efficient.
Therefore, in the demo day that we have talked about during this episode, the applications had their own isolated boxes, also known as virtual machines, to run happily in. Applications had no way of negatively affecting each other.
Containers could have made a big difference. With containers, the Demo day teams won't have to worry about slow transfer times or having their running shoes ready.
So, all in all, Containers enable developer productivity and help us build software faster. With the progress of technology, software development no longer needs to be such a hassle. And developers can focus what they do best, which is developing!
Hey, thanks for listening. Let us know your thoughts by leaving a comment on our website CloudGossip.Net. And please leave us a review and subscribe to us at iTunes!