Docker allows the creation of light Virtual Environments (VEs) rather than full Virtual Machines (VMs).

Whereas full VMs replicate hardware, ports, drives, processor, kernel, OS, etc. VE's just share the kernel, and build on top of that.

  • Advantages:
    • VEs are lighter than VMs, using much less resources than a VM.
    • Image reuse is possible, saving time. For example, if you have have 3 different environment all using MySQL, you can create a base image with MySQL, and use it to build the other ones.
    • Changes to the config are versioned. So you can rollback to a previous configuration.

      * Considerations:

    • Docker image can only be deployed to targets that have Docker already installed.
    • Isolation is partial, as compared to with VMs/IT:AD:Vagrant. But that's fine for many many scenarios.
  • Disadvantages:
    • Docker can only be installed on Linux hosts (check)
  • Notes:
    • Is an extension of Linux Containers (LxC), which is itself a sort of supercharged Linux chroot (isolation container), allowing the isolation of not just apps, but the OS itself.
    • Allows snapshoting an OS and its apps into a common image, then deploying the image to other Docker hosts.
    • Written in Go, and uses helper scripts to create VEs.