In short:
a container is a sandbox that runs a single process. This in turn can spawn off other processes. For us, that is isc-main, which will take care of running on the necessary processes (write daemons etc). But as soon as that first process goes away, the container is being closed
In a classical VM a complete machine is being simulated. Which in turn stars up a complete OS and not just a single process context.
There are plenty of articles that explain the difference in more detail (for example: https://blog.netapp.com/blogs/containers-vs-vms/)
(It's important to notice that on some OSes[windows + macos] docker is 'cheating' by creating a hidden linux VM to run the docker images)

As Mike already said, pretty much it comes down to the specifics of your site and code. There aren't any big changes between 2014.1.2 and the current version, so I wouldn't expect much coding work. The majority of work is probably going to be your testing of the procedure and the resulting upgraded test environment. We are more than happy to discuss your upgrade plan and help with any issues you might encounter, feel free to contact the WRC and we'll go from there!
Best,
Fab