Debugging Delphi applications inside a Windows Docker container by Jaruzafa

emailx45

Местный
Регистрация
5 Май 2008
Сообщения
3,571
Реакции
2,438
Credits
573
Debugging Delphi applications inside a Windows Docker container
27/02/2018 / JARUZAFA
[SHOWTOGROUPS=4,20]
1588110856952.png

Hi there! Ever wondered how to deploy delphi applications inside a Windows Docker container? And how to debug them once they’re inside the container? Search no more! I will explain how to run a Windows Docker container with PAServer up and running, ready to debug your applications.

This can came in handy when:
  • Your service/app/… works great, but it fails miserably when it’s executed in a container and you need to debug it
  • You want a quick & dirty deploy way of your service/app/… into a container, without the hassle of building a Dockerfile
Remember that in Windows containers you don’t have a GUI, so you only can run service-like apps (no VCL, no Firemonkey…).

The fast way
To follow this tutorial you’ll need:
Ok, let’s go ahead, follow these steps:
  • Run Docker for Windows
  • In context menu: Switch to Windows containers
    • DockerSwitchToWindowsContainers.png
  • Open powershelland run:
    • docker pull jaruzafa/paserverwindows
    • docker run -d -h mypaserver jaruzafa/paserverwindows
  • Now you have a Docker Windows container running PAServer at default port (64211) on host “mypaserver”
  • Fire up RadStudio and open your project (or a console blank project just for testing)
  • Right-click on your target plataform (Windows 32 or 64) and select “Properties”
  • At “Profile” combo select “Add New...”
    • Hostname: mypaserver
    • Port: 64211
    • No password
      • DelphiConnectionOptions.png
  • Important! If your target platform is Windows 32 make sure that: Project->Options->Delphi compiler->Linking->Include remote debug symbols->TRUE(otherwise you’ll get an error, eventually)
    • 2018-02-27-12_30_03-Project-Options-for-ProjDocker.exe-Win32-Debug.png
  • Click OK and set a breakpoint on your code.
  • Run with debug (or press F9) and wait until your breakpoint is reached
  • Enjoy the life
This video shows all the steps

Under the hood
So you want to know what’s going on to hack it and customize for your own needs, right? Good, I love your attitude. Let’s go and take a look on what you need to debug delphi apps in a container.

The image
First of all we need to build an image with windows and PAServer installed and running. This Dockerfile will do the job:
Код:
FROM microsoft/windowsservercore
ADD install_paserver.bat /paserver/install_paserver.bat
ADD http://altd.embarcadero.com/releases/studio/19.0/PAServer/Release2/setup_paserver.exe /paserver
WORKDIR /paserver
RUN install_paserver.bat
EXPOSE 64211
CMD ["/Program Files (x86)/Embarcadero/PAServer/19.0/paserver.exe"]

It downloads the PAServer setup package from Embarcadero servers, installs it, expose the port 64211, and starts paserver.exe
Pretty straightforward don’t you think? But wait… what’s that install_paserver.bat? why don’t just call setup_paserver.exe?
For some reason (unkown to me), setup_paserver.exe returns an error code=1, when running on silent mode. That error code breaks the docker build, so I came up with an install_paserver.bat that forces error code to 0:
Код:
setup_paserver.exe -i silent
exit /b 0

So far so good! Build the image (mind the point ‘.’ at the end, it’s important):
Код:
docker build -t paserverwindows .

After a while you’ll have the docker image, named “paserverwindows”.

The container
Now that you have the image, your next step is running it:
Код:
docker run -d -h mypaserver paserverwindows

RadStudio side
That’s it. It just works like a regular Remote Debugging project. You may name your container with a hostname using the -h parameter.
If you want to tune your PAServer with a password or a custom port you’ll need to copy out configuration file. If you need more info, go to Для просмотра ссылки Войди или Зарегистрируйся.

Some thoughts
  • Source is available at Для просмотра ссылки Войди или Зарегистрируйся
  • Unfortunately, I couldn’t use microsoft/nanoserver image (just sized 1GB) because it lacks of 32-bit Runtime, needed for PAServer.
  • You can run the container in interactive modewith:
    • docker run -i -h mypaserver jaruzafa/paserverwindows
    • But…. the console interface is quite laggy and it turn to be unusable. I have not found a solution to this, but if you come up with one, please leave a comment.
I hope you have enjoyed this post as much as I have enjoyed writing it. Comments, bug reports and thoughts will be highly appreciated!

[/SHOWTOGROUPS]