Before introducing the containerisation let us first understand what basically happens in a standard delivery pipeline.So developer after writing all the codes will build it.In this, several dependencies can also be needed. After building he/she will give the executable or software(code + dependencies) to the tester to check all the test runs which were initially decided even before making of that project.If the project passes all the test runs then tester approves it for the deployment and then it become available to end users.
But what if software fails to pass some of the test runs, it will be given back to developer highlighting the problems, but developer wonders, its working properly in my machine. Why it won't worked in yours??🤔🤔
So in order to know the problem let's deep dive into this environment of developer and tester.
Say developer and tester is using almost the same environment but there is a slight difference, like developer is using Pytest 5.4.3 to test all the test runs and the tester is using Pytest 5.3.0 or if both are using different IDE,etc so there can be compatibility issue which can cause the software to run on the developer environment but not on the tester environment.
To solve this problem, what developer can do is, he will take the code, all the dependencies(like libraries,functions,tools) and the environment of the project and put it in a container and then he will ship the container like a package to the tester or to the users. By doing this, now the environment of the other's system doesn't matter because developer had already configured the container according to the project need.
So this concept is quite similar to virtual machine, right? but lets quickly summarise what virtualisation or virtual machine (VM) is ?
Now, containers, based on the same concept but quite different from VMs. Each VMs run its own guest operating system but containers share the operation system of the host which makes containers size lighter than VMs hence, more portable and agile. Moreover, they are isolated from each other and run there own software,binaries and configuration. Container can be made and run on local systems,virtual machines or even deployed on the clouds.
Docker - Docker is an open source platform which allows you to build, deploy, run and manage your containerised app. What it means is its a software that helps you to build containers for your apps. Building containers now your app is independent of any system, any environment because container has everything inside it needed by the app, their dependencies,suitable version,configuration,script,binaries.
Now lets quickly see what are the different terms related to docker are:
- docker client
- docker daemon
- docker image
- docker container
- docker hub
- docker registry
- docker volumes
- docker networks
you can install docker desktop if you are using windows. If you are using ubuntu you can install docker Engine by following this installation guide like I did ;)
Great! if you are reading upto here, that means I haven't bored you at all 😅 and now you know the terms, concepts related to deployment, virtualisation, containerisation and docker😇😇
I think putting all the things under one roof will be overwhelming so I will come back very soon with a new blog that will explain all the terms that I listed here. And we will also create container live there, start it,run it and even stop it using docker commands.We will see what is images, how we make our own image or pull an already build image from docker hub and explore many more things. 🤩🤩
Good bye until that👋👋