Upfront Clarifications Needed:
- What components are actually included in the package(s)?
- Base software components
- Customized configurations
- Metadata
- What are the implementation site requirements (if any)?
- Operating system
- Network connectivity
- Level of expertise
- How often will the contents of the distribution need to change?
Different Types of Packaging
Binary / Standalone
A binary or standalone package usually consists of a .zip or .tar.gz file that will first need to extracted. After extraction, a binary or script is executed to run the application.
Pros
- No additional software should need to be installed.
- Does not require any specific hardware support.
- Does not require internet access for installation.
- Performance is great.
- Easiest to install.
Cons
- Specific binaries need to be created for each OS supported.
- No easy way of getting updates.
- Requires extra effort from software maintainers to put the standalone package together.
Installer Packages
Installer packages consist of platform specific packages that, when executed, install the application to a specific directory and also can run some post installation configuration. File extensions typically are .exe or .msi for Windows and .deb or .rpm for linux.
Pros
- Does not require any specific hardware support.
- Performance is great.
- Easily updated if configured to use a repository.
- Easy to install using native OS tools.
Cons
- May require extra software dependencies.
- Packages are specific to OS.
- Installation Requires internet Access.
Virtual Machine Image
Virtual machine images consist of a base operating system with the application preinstalled and preconfigured. This is then distributed as a .ova or .vmdk files.
Pros
- Does not require a specific base OS.
- Easy to install.
- Easy to upgrade after initial install. *(If updating packages in the virtual machine.)
Cons
- Requires VM software to be installed (e.g. VirtualBox)
- Requires Hardware support
- Performance is not as good as native.
Docker image
A docker images consists of virtual container containing a minimal OS and the application pre installed and preconfigured. The most common form of distribution is in a source repository, or through Docker Hub.
Pros
- Performance is very close to native.
- Easy to get new updates once installed.
Cons
- Requires docker and base os it be installed before running image.
- Requires Hardware support on non linux OS.
- Host OS and image OS must match. (e.g. Linux os will run only linux images.)
- Requires internet access to get base image
Packaging Solution | Requires Additional Software | Requires Hardware Support | Requires Operating System Support | Requires Internet Access | Performance(1-5) | Ease of Install(1-5) | Easy to update |
---|
Standalone Binary | No | No | Standalone is specific to OS | No | 5 | 5 | No |
Installer Packages | Yes, dependencies | No | Packages are specific to OS | Yes | 5 | 4 | Yes |
Virtual Machine Images | Yes, VM software | Yes, AMD-V or VT-x | No | No | 3 | 4 | Yes* |
Docker Images | Yes, docker and OS img | Yes, if using boot2docker | Host os and docker OS must match | Yes | 4.5 | 2 | Yes |
Blockers for each packaging method
Standalone Binary
You should not use the standalone binary if any of these are true.
- Need easy updates in the future.
- Using a non supported OS
Installer Packages
You should not use the installer packages if any of the following are true.
- No internet access during install. This prevents installation of additional software.
- Using a non supported OS.
Virtual Machine Images
You should not use the virtual machine images if any of the following are true.
- Do not have hardware support for virtualization.
- If you do not have internet access and do not have virtualization software already installed.
- Need the maximum amount of performance from your hardware.
Docker Image
You should not use the Docker image if any of the following are true.
- You need an easy to install method.
- Using a non linux OS and do not meet the hardware virtualization requirements.
- No internet access during install and do not have docker and all images needed to run the application.