Desde Rad Studio 10.2 Tokyo es posible compilar y ejecutar aplicaciones Linux de servidor (sin interfaz de usuario).Vamos a preparar una imagen docker con Ubuntu y todo lo necesario para ejecutar aplicaciones Delphi en Linux, via PAServer. Con Docker podemos desplegar estas aplicaciones en contenedores Linux a nuestro sistema en producción.

Las posibilidades son inmensas, desde montar un universo de microservicios interconectados para alta disponibilidad y tolerancia a fallos a aplicaciones monolíticas. Una de las ventajas de utilizar Docker es que podemos preparar una imagen base (mucho más ligera que mediante máquinas virtuales) e ir desplegándola a medida que lo necesitemos.

Manos a la obra

El camino rápido

Abre una consola donde tengas Docker. En mi caso utilizo Docker Toolbox para Windows y arranco Docker Quickstart Terminal.

docker pull jaruzafa/ubuntupaserver 
docker run -p 64211:64211 -t -i jaruzafa/ubuntupaserver

BOOM! Ya has lo tienes, ahora pasa a leer la parte de RadStudio más abajo.

El camino lento

Nuestra imagen se basará en ubuntu 16.04. Crea un fichero de texto llamado Dockerfile, con este contenido:

#Imagen base sobre la que construiremos la imagen con PAServer
FROM ubuntu

# Todo lo necesario para RadStudio más algunas utilidades pueden venirte bien
RUN \
 apt-get -y update && \
 apt-get -y upgrade && \
 apt-get -y dist-upgrade && \
 apt-get -y install joe wget p7zip-full curl unzip build-essential zlib1g-dev libcurl4-gnutls-dev && \
 apt-get -y install mysecureshell && \
 apt-get -y autoremove && \
 apt-get -y autoclean

# Copia PAServer al contenedor y lo descomprime
COPY LinuxPAServer19.0.tar.gz /root/LinuxPAServer19.0.tar.gz
RUN \
 cd /root && \
 tar xzvf LinuxPAServer19.0.tar.gz && \
 cd PAServer-19.0 && \
 mkdir scratch-dir

# Working directory del contenedor
WORKDIR /root/PAServer-19.0

# Arranca PAServer
CMD ["/root/PAServer-19.0/paserver","-password=1234"]

# Publica el puerto por defecto de PAServer
EXPOSE 64211

Recuerda copiar C:\Program Files\Embarcadero\RADStudio\19.0\PAServer\LinuxPAServer19.0.tar.gz a la carpeta donde tienes el fichero Dockerfile.

Arranca Docker Quickstart Terminal (si utilizas Docker Toolbox) y ejecuta:

docker build -t mirepo/mimagen .

Con esto ya tienes creada la imagen, para arrancar el contenedor:

docker run -p 64211:64211 -t -i mirepo/miimagen

Y ahora desde RADStudio

Que sería de un tutorial sin un Hola Mundo….

En Rad Studio haz click en Nuevo proyecto->Console Application

Completa el código:

program Project1;
 {$APPTYPE CONSOLE}
 {$R *.res}

uses
 System.SysUtils;

begin
 try
   Writeln('Hello world Docker/Linux ');
 except
 on E: Exception do
   Writeln(E.ClassName, ': ', E.Message);
 end;
end.

En el Project Manager, haz click derecho para añadir la plataforma Linux:

Selecciona Linux-64bit:

Te pedirá el nombre del profile.

En mi caso le he puesto “paserverxubuntu”, pero puedes ponerle el nombre que quieras.

Ahora viene la parte importante, te pedirá la IP donde está escuchando el PAServer. Debes poner la IP del host de Docker, no la del contenedor!

En mi caso, que utilizo Docker Toolbox for Windows, la IP es 192.168.99.100.

El puerto por defecto es 64211 y la contraseña es “1234”:

Ahora dale a “Run”  (la primera vez que lo ejecutes se traerá el SDK, esto puede tardar unos minutos)

En el contenedor Docker podrás ver:

Y ya está!

Nota: La imagen Docker de este ejemplo es adecuada para desplegar aplicaciones, pero NO podrás hacer debug (breakpoints y esas cosas, ya sabes…), ya que no contiene todo lo necesario para que el debugger de RadStudio funcione.