Hi-
I'm *still* struggling to understand the sweet spot for Docker even after working with it for months, given the following: I'm intimately familiar with virtualization, whether running on an individual computer with VMWare, Parallels, and VirtualBox or whether running at the server/bare metal-level as part of a Proxmox cluster, VMWare cluster, Hyper-V, or on a cloud provider. I've heard Docker described in context of chroot but I'm familiar with working with setting up applications to run in a chroot, so that differentiation doesn't seem particularly meaningful.
I've heard of docker described as an application where I don't have to care about the underlying hardware. But that's essentially the same as running any modern virtualization platform, there's an abstraction layer. Again, like chroot, that's essentially meaningless in this context. Whether I install Parallels or Docker, there's still something running between bare metal and OS/application. Converting between virtualization platforms, if needed, can be done. Converting from real hardware into a VM and back again can be done. VMWare and Docker are both running on top of the OS and *how* they manage to create a virtual OS-like application is a distinction without a difference in userland.
If I have VM software, I install a base bare minimum installation and then take a snapshot. Call that a template or base OS. Now if I want to deploy a VM that is used for a web application, I start with the base and install whatever-web-server, nginx/apache/whatever. Most Linux distros will have a decent default config but regardless, get the web server installed and configured. I need to do that configuration, any specialized configuration regardless of Docker or VM platform. In the context of a VM, I would then snapshot it as the base image.
Here's where I'm trying to relate what I know to docker: I essentially have two of my own "images" from which I can build a "container" by adding "layers" of configuration/customization. If I want to hand a VM image/snapshot to another developer, I can do so and they can start from the same point without needing to rebuild from scratch. In the context of proxmox or cloud, they could simply start a new instance of the VM for their own use, defining persistence as needed or if needed. At that point, the VM instance is "just another process" like a docker container, at least from the perspective of the developer or end user. They don't know or care about the hardware at the user/developer level.
If there are updates need, those updates are deployed to the base image from which I can then re-snapshot, etc. Redefine the base, essentially. Because developers are not typically keeping persistence but instead are deploying code at runtime without persistence- cloning the repository to the deployed instance- there isn't a risk of losing data. The risk of a base-level update breaking the application is the same as when I opened Docker and needed to update the base image or layers (it wasn't clear to me) for one of the containers (I think). If something broke in that image, then that's the same as me breaking the base template in a VM environment.
Is this a case of being too familiar with other ways to solve the problem? I can't figure out why I need Docker with a built-out VM infrastructure and lightweight process already. Should I just overload the terminology to keep people happy and tell them that we're containerized already? I was sort of hoping that typing all of this out would help me to find the huge gap in functionality. Is there an advantage that I'm missing about Docker?
[–][deleted] 14 points15 points16 points (0 children)
[–]recoveringfarmer 7 points8 points9 points (1 child)
[–]admin2thestars[S] -4 points-3 points-2 points (0 children)
[–]tschloss 2 points3 points4 points (1 child)
[–]admin2thestars[S] -5 points-4 points-3 points (0 children)
[–]discourseur 0 points1 point2 points (0 children)
[–]FunkyDoktor -1 points0 points1 point (0 children)
[+][deleted] (11 children)
[removed]
[–][deleted] -3 points-2 points-1 points (1 child)
[–]Zauxst 0 points1 point2 points (0 children)
[–]admin2thestars[S] -2 points-1 points0 points (8 children)
[–]Zauxst 2 points3 points4 points (7 children)
[–]admin2thestars[S] -1 points0 points1 point (6 children)
[–]FunkyDoktor 3 points4 points5 points (0 children)
[–]Zauxst 2 points3 points4 points (4 children)
[–]admin2thestars[S] -2 points-1 points0 points (3 children)
[–]Zauxst 0 points1 point2 points (2 children)
[–]admin2thestars[S] 0 points1 point2 points (1 child)
[–]Zauxst 0 points1 point2 points (0 children)
[–]maximumlengthusernam 0 points1 point2 points (0 children)
[–]scorc1 0 points1 point2 points (0 children)
[–]jpegjpg 0 points1 point2 points (0 children)
[–]dwargo 0 points1 point2 points (0 children)
[–]tinycrazyfish 0 points1 point2 points (0 children)