Docker is one of the tools available for you to use. It can help you develop your app further, and also simplifies certain processes that you might need to do when you’re not using it. So let’s take a quick look at it.
What is Docker?
Docker is an open platform for developing, shipping, and running applications. Docker enables you to separate your applications from your infrastructure so you can deliver software quickly. With Docker, you can manage your infrastructure in the same ways you manage your applications. By taking advantage of Docker’s methodologies for shipping, testing, and deploying code quickly, you can significantly reduce the delay between writing code and running it in production. — Taken from Docker documentation
Docker is a tool that can help us in developing and deploying our applications. It uses containers, which can be used to package an application with all its libraries and dependencies, allowing the app to be run on any other Linux machine. These containers are created by an object called images, which is a read-only template with instructions for creating a Docker container.
Docker uses a client-server architecture, in which the client communicates immediately with the Docker daemon, which will listen to the requests from the client and manages the docker objects such as containers and images. There’s also a Docker registry, which is a public registry that anyone can use. Its job is to store Docker images.
Benefits of Docker
As stated above, using Docker means that the app can be run in almost every Linux machine, which means developers doesn’t have to worry about dependencies and libraries not being compatible with the user’s machine. Docker is lightweight and fast, meaning it wouldn’t affect the computer heavily.
Usage of Docker in Our Project
Do we use Docker in our project? Well no, but yes.
Our main project itself doesn’t use Docker to run or distribute the app, because from the requirements that we gathered we agree that Docker wouldn’t really benefit us that much, and learning about it can potentially take time from developing or other university things we need to do.
Instead, what we do is we (technically, one person in our team) created a Docker container which has a GitLab Runner inside it. This means that we do not have to rely on shared runners, as they tend to be pending a lot and when running, it’s usually slow. But with our own runner, it will immediately start the CI/CD process without waiting in the queue for the shared runners.
This really benefits us in the long run, as by our fourth sprint, unit testing alone took around 10 minutes to do, so in case of a failed test we can immediately fix it. The only problem we have using this runner is that if Nadhif (the guy that makes and hosts the runner) turns off his computer, then the runner is basically dead and no CI/CDs can be run.
(by the way, check out Nadhif’s article here as he explains how to build your own GitLab Runner using docker.)
In conclusion, I think Docker is a very versatile tool that allows developers to work with their full potential without worrying about how their dependencies work on other machines, and its container system makes for a light and portable tool.
But, a tool is only as useful as its owners. We decided to not use Docker in our project, as looking at conditions and requirements for the project we see little benefits of using Docker. At least for now. This doesn’t mean that we doesn’t use Docker at all, as we ended up using it for our own GitLab Runner, in a decision which probably ended up saving a lot of our times (and our sanity).
So yes, Docker is a neat tool. But it is up to you to decide how useful it can be.