Reducing the time between the development of a feature and its use by customers is key for software organizations. Organizations need to take measures to reduce time invested in software delivery activities such as building, packaging, and testing. In the pre-virtualization days, building output from incremental changes to the codebase and then testing every newly built output required a dedicated infrastructure (networks, machines, relevant software installations and configurations, build and test scripts) and manual work. Organizations would either set up a clean infrastructure every time a new build was needed, or maintain the infrastructure exclusively for building and testing, which is an inefficient use of resources. Instead of spending time setting up or maintaining environments, you should be able to use resources when you need them and shut them down as soon as you finish with them.

Virtual machines addressed the problem to an extent. With a virtual machine, you can automate the entire process, which starts as soon as an increment is checked in to the codebase. If manually setting up the infrastructure took hours, then virtual machines brought the time down to minutes.

But, there are limitations to virtual machines. They cannot ensure that the building and testing of software components happen in real time. There is a considerable lag between the time developers check in their code changes and the time when the build process starts, for example. This is because starting a virtual machine and installing and configuring software applications take time. Though virtual machines ensure application-level isolation, they require a lot of resource overhead.

Container technology in general and Docker in particular are remarkable advances in this regard. With Docker, the infrastructure you need to build and test a software application can be set up on demand, in seconds, and can be removed just as easily. Docker ensures that there is isolation between containers without being resource intensive. Docker also enables application portability across machines and operating systems, which means that as long as you work with the same kernel, you can seamlessly deploy and run your application across different machines and different distributions of the operating system.

Because of its advantages, Docker is an important part of the continuous integration and continuous delivery or deployment (CI/CD) model. To enable Progress partners and customers to more efficiently implement their CI/CD pipelines, there is now support for deploying an OpenEdge database in a Docker container. For example, you can create and start a database in a Docker container on demand, run your tests, and then dispose of the container immediately after your tests are executed. As a result, you can focus on optimizing continuous testing of code increments without worrying about deployment details such as system resources, availability of a dedicated machine, and database setup.
Note: The OpenEdge database Docker container images are meant to be used in a development environment for building and testing purposes only.