Wie man pdfToolbox 'dockerisiert'

Docker ist eine offene Plattform, um Anwendungen virtualisiert  auszuführen. Hierbei verhält es sich jedoch anders als "vollständig" systemabgegrenzten Virtualisierungen wie von z.B. VMware, VirtualBox, Parallels, Xen usw. denn:

  • es hat eine sehr schnelle Startzeit (nur wenige Millisekunden)
  • Änderungen sind nicht dauerhaft (erst beim Übernehmen)
  • bislang kann ausschließlich die pdfToolbox CLI für Linux dockeriziert werden
  • vorerst können ausschließlich nur Konsolenprogramme dockeriziert werden. Besonders GUI basierte Programme werden nicht unterstützt.
  • Container verschwinden, wenn die dockerizierte Anwendung beendet wird

Hinweis: Wichtig auch zu erwähnen ist hier das:

  • Eine "normale" Lizenz kann nicht in einer Docker-Umgebung verwendet werden und ein Lizenzserver ist erforderlich
  • Ein callas License Server selbst kann nicht innerhalb eines Docker Containers betrieben werden
  • Für gewöhnlich können ausschließlich die 64bit callas binaries innerhalb eines Docker Containers verwendet werden.
  • Docker funktioniert sehr gut mit Linux und MacOS.
  • Es gibt zwar auch bereits eine Windows Variante. Bei Tests hat sich diese Version jedoch als nicht benutzbar gezeigt (langsam und unstabil).

Terminologie

  • Docker Image: Ein Image ist eine Sammlung von Dateisystemebenen auf der Festplatte, vergleichbar mit einer besonderen Form eines (ISO) Abbildes, welches alles enthält, um das Programm auszuführen (Die ausführbare Datei, Laufzeitdateien, Konfigurationsdateien usw.)
  • Docker Container: Ein Container ist eine laufende Instanz eines Docker Images.
  • callas OS binary: Das OS spezifische callas software executable, z.B. pdfToolbox.exe (für Windows)
    • Ausschließlich die CLI version ist unterstützt (nicht die GUI-Version)
    • Ausschließlich unterstützt auf Microsoft Windows Docker Hosts
    • Ausschließlich unterstützt für Microsoft Windows Docker Images
    • In anderen Worten: Es ist nicht möglich die nativen Microsoft Windows binaries innerhalb eines Linux Docker Host (oder MacOS Docker Host) auszuführen.
  • pdfToolbox (for Linux)
    • unterstützt auf jeder Docker Host Platform (Linux, Windows and MacOS)
    • benötigt einen Linux glibc kompatiblen Docker container. Daher sind Alpine Linux Container nicht unterstützt (basieren nicht auf glibc)
    • Windows spezifisch: Ausschließlich der Linux Mode ist unterstützt (Hyper-V Isolation)
  • pdfToolbox (for MacOS)
    • Nicht möglich (es gibt keine MacOS Docker Images)

Hinweis: Man kann sogar mehrere Container gestartet haben vom selben Docker Image.

Vorbereiten von "angereicherten" Docker Images

Ein Docker image muss alle zur laufzeitabhängig benötigten Dateien für die callas Applikation (auch bekannt als Binary) enthalten. Dieses wird dann auch angereichertes Docker image genannt.

Es ist empfohlen ein Dockerfile als solches angereichertes Docker image vorzubereiten.

Hinweis: Es wird ausserdem empfohlen ein dedicated build directory zu verwenden, welches das Dockerfile enthält, z.B. ein Verzeichnis mit namen "docker_build".

Hinweis: Ausschließlich die Docker basierten images welche in den folgenden Beispielen beschrieben sind, werden offiziell unterstützt von callas software. In anderen Worden: Es steht Ihnen natürlich frei andere Images zu verwenden. Da aber tausende verschiedene Images existieren, die auf einer anderen Grundlage basieren werden offiziell nur die hier beschriebenen von  callas software unterstützt.

Angereicherte Docker Images für Linux binaries

Als Basis für ein docker image, wird das letzte offiziele Debian image verwendet. Es gibt viele externe Abhängigkeiten, diese werden jedoch automatisch heruntergeladen und installiert.

Vorbereitung

Erstellen Sie eine Textdatei namens Dockerfile innerhalb des docker_build directory

FROM debian:latest

# add some additional repositories (and packages)
RUN sed -i 's,main$,main contrib non-free,' /etc/apt/sources.list \
        && apt update \
        && apt install -y  \
                fontconfig  \
                libfreetype6  \
                lsb-release \
                vim-tiny  \
                perl-modules  \
                ttf-mscorefonts-installer  \
        && apt autoremove \
        && apt autoclean \
        && rm -r -f /var/lib/apt/lists \
        && rm -r -f /usr/share/doc \
        && rm -r -f /usr/share/man

CMD ["/bin/bash"]

Erstellen

Verwenden Sie nun den Docker build Befehl um das angereicherte image (mit Namen debian-enriched) zu erstellen.

cd <directory containing Dockerfile>
docker build -t debian-enriched .

anschließend überprüfen

docker images debian-enriched
    REPOSITORY          TAG      IMAGE ID            CREATED             SIZE
    debian-enriched     latest   3d359679e001        20 minutes ago      218MB

Angereicherte Docker Images für Microsoft Windows Binaries

Als Basis für eine docker image wird das offizielle Servercore LTSC2019 Image verwendet. Externe Abhängigkeiten sind ausschließlich Microsoft Visual Studio Distributable (VC_redist.x64.exe). Es muss jedoch manuell heruntergeladen werden.

Vorbereitung

Laden Sie VC_redist.x64.exe in das docker_build directory herunter (URL: https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) und erstellen Sie eine Textdatei mit Namen Dockerfile innerhalb des docker_build directory.

FROM mcr.microsoft.com/windows/servercore:ltsc2019
RUN MKDIR \tmp

# VC_redist.x64.exe from https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads
COPY VC_redist.x64.exe \tmp
RUN start /w \tmp\VC_redist.x64.exe /install /quiet /norestart

USER ContainerUser

Erstellen

Verwenden Sie nun den Docker build Befehl um das angereicherte image (mit Namen  (named servercore-enriched) zu erstellen.

cd <directory containing Dockerfile and VC_redist.x64.exe>
docker build -t servercore-enriched .

und überprüfen

docker images servercore-enriched
  REPOSITORY            TAG     IMAGE ID            CREATED             SIZE
  servercore-enriched   latest  1ad53e86e52f        16 minutes ago      3.86GB

0 Kommentare

Geben SIe Ihren Kommentar ein

E-Mail senden, wenn jemand auf diesen Kommentar antwortet