I've Got 99 Problems but the Image Ain't One
Containerization is amazing, it is a low overhead easy to maintain sustainable long term solution that helps create highly portable apps that will just run... Everywhere
I started using Docker for all my personal project probably around a year ago at this point and I haven't looked back it really has taken out the headache of a lot of server related woes I used to have. One of my main issues I've had with maintaining my own cloud instance is generally as Ubuntu updates major versions I have been highly apprehensive to update, as updating the instance generally leads to environments braking, other parts generally need to be updated and we end up with a domino affect in place.
It is this that has often made me neglect updating as my old site, written in Python using Django is, well, very messy and a bit all over the place. As a result it is pretty hard to move from server or survive updates and this has been a huge headache to me. As underlying systems vary a lot it is common to get an app running on your own development environment but then it can be really hard to mirror in another place, or a second place after that because well you probably have a lot of configuration you have just forgotten about or packages globally installed that have some impact on the project, this makes for huge problems and a lot of unpredictability.
What is nice about Docker is you cram everything that is required to make your app generally work inside a built image that will hide away all the vital components of the app. This bundles together an image that can be attached pretty much anywhere and it will yield the exact same result anywhere and this is pretty amazing. On top of this it doesn't fall into the trappings of virtual machines in eating resources as containers just abstract the import stuff but rely on the underlying OS to fill in the common blanks to get it up and working, this is also why mac works better than Windows as mac shares a similar architecture to that of Linux servers which Docker is modeled on.
As creating production ready images is pretty simple and builds such as alpine
are fantastic as slimming down the overall size of the Docker images to leave such a small footprint on the server that even on small instances you will find little issue with space. Containerization also helps in creating pipelines to push code from your IDE right into the server and update the live service and with such platforms as Kubernetes you can do this will zero downtime.
Docker is really easy to get started with and once you start using it you will never go back, it helps in simplify a lot of server issues and makes adding Continues Delivery/ Integration pipelines pretty easy and straightforward. Containerization is something that is only growing because it helps remove complexity and it provides a great level of stability that older deployment methods lack, it also makes upgrading things like server instances, runtimes and other dependancies as the images are very predictable.
Most importantly Docker allows you to spend a few hours in setup which then provides a pipeline that greatly reduces the amount of time you will have to spend doing repetative pointless tasks allowing you to spend more time working on the things that truely interest you!
The Docker Docs are actually really good and provide a lot of detail on how to get started with Docker, also it is great alliteration and who doesn't love that?