As mentioned earlier in this document, a container is an isolated environment to run a set of processes. It looks almost like a virtual machine with its own operating system, but is not, and usually starts almost as fast as a local process.
In a distributed development architecture, the use of Containers is a good way of limiting infrastructure costs. Containers are not supposed to hold any permanent data and are meant to be destroyed and recreated often. One can save data in a container, as long as he’s ok with losing it after a restart, as most tools assume they can recreate a container on a whim.
It is possible to install SAP instances on a container. Windows containers do exist, but they’re mostly created in Linux.
For the ActiveControl abapGIT integration created by Basis Technologies, Docker has been used.
Images are typically created using a dockerfile. With a properly defined dockerfile one just runs docker build
Doing this results in a fully working image, fully defined by the dockerfile.
An image can also be created by committing a running container.
Creating SAP Container
Ideally, Basis Technologies would have written a dockerfile to get a linux distribution, install all dependencies and start a fully scripted installation. But some of these are not available in a dockerfile, only when running an existing container.
For this reason Basis Technologies needed to split the work into 2 steps:
1. Create an OS image with all the dependencies
2. Install SAP in a running container (manually, but scripted would be better)
- Volumes were mounted in advance to hold the database
- Once installed, we saved the resulting image and archived the volume contents
- When we want to start a container we first create a volume and initialize it with the archived DB. Starting a new instance takes about 10 minutes, destroying it about 1
This process is slightly labour intensive, but is not a massive concern given it only needs to be done once in a while.
It should be noted that a number of small issues needed to be addressed whilst setting up Containers for SAP. These are noted below for reference of Customer users that might come across the same.
|Typical container scenario||SAP requirement||Solution|
|Random dynamic hostname||Fixed hostname||—hostname flag|
|Random mac address||License linked to mac address||—mac-address flag|
|Quick termination||Needs a few minutes or the DB will get corrupted||—stop-timeout flag|
|Dynamic DNS domain||Fixed DNS domain||Custom scripts to patch at startup|
|Usually maps services to different ports||Expects all ports to end with the same 2 digits||Map different containers to the same ports but different IPs|
|Needs uuidd||Added to startup script|
|Generates zombie processes||catatonit|