Previously, I’ve been hesitant to veer away from building on my core coding abilities. I’d assumed that to begin to get a basic understanding of the cloud infrastructure, I’d need to be a competent/expert programmer or I thought that I’d wait and get introduced to the various aspects when I start working. However, that doesn’t have to be the case. In fact, you don’t need to be an Engineer to understand and use Docker, Kubernetes, AWS or anything else required to deploy and host an app.
So, I’ve started, quite gently, learning Docker.
What is Docker?
Docker is a virtualisation technology or software development platform that makes developing and deploying apps easy. This is achieved inside of packaged virtual containerised environments which lets apps run the same regardless of where the app is being run from or what machine they’re running on.
What is a Docker Container?
A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another. A Docker container image is a lightweight, standalone, executable package of software that includes everything needed to run an application: code, runtime, system tools, system libraries and settings. — docker.com
Docker containers can be deployed to any machine. They don’t have compatibility issues because they are what’s called “system-agnostic” whereby the software does not know or does not care in what manner the data it receives was sent to it. This leaves the software simpler to use, easier to maintain and deploy. These containers are like smaller computers, each with their own operating system, CPU processors, memory and network resources. They can be installed, deleted or stopped and started without affecting each other or the host machine. Containers run singular specific task such as a mySQL database then they are connected and scaled.
To use Docker, you’d usually start by using Docker hub, an online cloud repository of docker containers. You’d pull one containing a pre-configured environment for a specific programming language such as Ruby with all the files and frameworks needed to get started.
Docker is a form of virtualisation where resources are shared directly with the host. This allows you to run many docker containers where, in turn, you’ll only be able to run a few virtual machines. A virtual machine has to quarantine off a set amount of resources: hard drive space, memory and processing power, emulate hardware and then boot an entire operating system. The VM then communicates with the host computer via a translator application running on the host operating system called a hypervisor. Docker communicates natively with the system kernel bypassing the middleman on Linux machines and Windows. This is means you can run any version of linux in a container and it will run natively. Docker uses less disk space as it is able to reuse efficiently by using a layered file system. If you have multiple docker images using the same base image for instance, Docker will only keep a single copy of the files needed and share them with each container.
There’s a lot to learn but I’m glad that I’ve taken the step and started trying to get an understanding of microservices, cloud infrastructure and everything in between!