Step-by-step guide to create your own Docker container to compile Delphi projects
Host Delphi on a Docker container and compile Delphi projects for Windows, Mac, Linux, Android and iOS (Not Tested) from the container
delphi4dockercompile.mp4
- Valid Embarcadero licence for Delphi
- A fresh Windows 10 virtual machine
- A fresh Ubuntu 20.04 virtual machine
- Consider having 150GB HDD space available for each VM
- Use the same user name in your VMs as your docker container. I strongly recomend you to use root as user
- In your Windows machine, create a user called root
- In your Ubuntu machine, run everything as root
- When running your container, set user to root
- If you’re using Mac and Parallels for managing VMs, use the option “Isolate Windows from Mac”
- Tested using Delphi 11.3 only. For the previous version of Delphi, it might not work because Eclipse Adoptium folder doesn’t exist
- Install Delphi as a regular installation (Uncheck the option “Install for all users” and use the default destination folder)
- Install all the required getit packages and SDKs
- Install all available patches
- Remove everything that is IDE only related to size down your bundle
- Clone or download the repository: https://github.com/lmbelo/delphi4docker
- Launch the app > delphi4dockersrv.exe app and use the Pack option
- If you didn’t use the default options during the Delphi installation process, please set up accordingly. Whereas, if you used default options, you can go ahead and use the Pack option
- It will now pack the Delphi environment and bundle it up to a single file and make it ready to send to the Ubuntu host machine
- When done, a message will display
Note: You can simplify this process running the setup_wine.sh script
- Verify 64-bit architecture. The following command should respond with "amd64"
$ dpkg --print-architecture
- See if 32-bit architecture is installed. The following command should respond with "i386"
$ dpkg --print-foreign-architectures
- If "i386" is not displayed, execute the following
$ sudo dpkg --add-architecture i386
- Recheck with.
$ dpkg --print-foreign-architectures
- Download and add the WineHQ repository key
$ sudo mkdir -pm755 /etc/apt/keyrings
$ sudo wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key
- Download the WineHQ sources file
$ sudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/focal/winehq-focal.sources
- Update the package database
$ sudo apt update
- Install Wine
$ sudo apt install --install-recommends winehq-stable
- When installing wine, as you get this screen, click on “Cancel” button
- Verify the installation succeeded
$ wine --version
- Simple tests
- To make sure wine is working
- Display a simple clock
$ wine clock
- Under wine: Install Microsoft.NET v4.0 and v4.5
$ sudo apt-get install winetricks -y
$ winetricks dotnet40
$ winetricks dotnet45
- Configure Wine to Windows 10
$ wine winecfg
- Open Windows using
-> Applications tab -> Windows version -> Windows 10
-
Clone or download the repository: https://github.com/lmbelo/delphi4docker
-
Run delphi4dockercli
- Setup the delphi4dockercli options
- If you’ve followed the prescribed default settings in the above steps, you just need to set up the “Host Addr” option
- Goto Window VM and click on “Send” button in the delphi4dockersrv application
- Now press on the Receive button in the delphi4dockercli in Ubuntu VM
- Wait until the operation finish and press on the “Upack and Setup” button
- Enter the windows command prompt using the wine cmd command
- Run the path\to\rsvars.bat as mentioned in the below image. This will configure the MSBuild
- You can now compile the Test project using the msbuild
- Recommendation: Place your test projects into the path\to\Embarcadero\Studio\Projects\ folder
- You can configure the “Test Projects Folder” when bundling your Delphi environment using your Windows VM using the delphi4dockersrv application
- Finally you can see the result of your test project compilation as you can observe in the image below
Before creating the docker container, we will install the Docker to our Ubuntu 20.04 system, which is available by default in the Ubuntu repository
Note: You can simplify this process running the setup_docker.sh script
Update all packages list on the Ubuntu repository and install Docker using the apt command below
$ sudo apt update
$ sudo apt install docker.io
Once all installation is completed, start the Docker service and add it to the system boot
$ systemctl start docker
$ systemctl enable docker
Now check the Docker service using the command below
$ systemctl status docker
The Docker service is up and running on Ubuntu 22.04
Next, run the docker command below to ensure the installation is correct
$ docker run hello-world
Below is the result you will get.
Hello from Docker!
This message shows that your installation appears to be working correctly
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon
2. The Docker daemon pulled the "hello-world" image from the Docker Hub
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
As can be seen, you get the Hello World message from Docker, and the Docker installation on Ubuntu 20.04 has been completed successfully
- Open the docker > PersonalDockerfile from the cloned delphi4docker repo. Edit the file as needed and configure your Docker image
- You’ll start with the base image as you can see in the “Download Delphi base image” section
- An important step is to copy the host wine prefix that you’ve set up using the above steps. This step is already provided as part of the dockerfiles under the “Copy host wine” section. So you need not edit this
- After that run the docker > PersonalDockerbuild using:
$ ./PersonalDockerBuild
- Above step will clone the wine from your Ubuntu machine and create a docker image with Delphi compiler for you. This step will take a long time and require a lot of disk space
- Please keep in mind that you can’t distribute the above-created docker image publicly because of license limitations. You can use it for your personal uses as you have the necessary Emabarcadero license