<<HOME <TechDocs

Alexander von Boguszewski

TIBCO BWCE Container mit Docker


Mit TIBCO BusinessWorks ™ Container Edition (BWCE) können recht schnell und einfach Anwendungen gebaut werden, die nativ in Docker- oder Cloud-Foundry-Containern deployed werden können. TIBCO liefert zwar ein eigenes Standard Image, dies ist meiner Meinung aber recht groß und hat auch einige andere Nachteile. Wir können aber auch selbst ein eigenes Base-Image erstellen. Nachfolgendes Beispiel ist zwar auch nicht Production Ready, soll aber als Inspiration für eigene Ansätze dienen. Als Base Image verwende ich Alpine Linux, da die Basis Installation nur 5 MByte groß ist. Wir sparen uns nicht nur erheblich Speicherplatz, sondern auch Zeit beim Download, der Installation und dem Ausrollen auf dem Docker Host. Zudem erhöht ein System mit kleinerem Fußabdruck die Sicherheit, da die Angriffsfläche verringert wird. Alpine Linux basiert auf Busybox und der C-Standard-Bibliothek Musl und verwendet die PAX- und GRSecurity-Patches. Leider müssen wir die GLIBC für die Java Plattform nachinstallieren.

docker pull alpine 

Legen wir nun mit dem Image unseren ersten Container an uns starten diesen direkt:

docker create --name=bwceconatiner -t -i alpine
docker start -a -i bwceconatiner

Durch das -a -i verbindet der Docker-Client die aktuelle Konsole mit der Comandozeile des Containers. Wenn wir die Eingabe durch exit schließen, wird damit auch der Container-Prozess beendet.

Der Befehl docker ps zeigt alle gerade laufenden Container. Der Befehl docker ps -a zeigt auch angelegte Container an, die gerade nicht laufen.

Sollte ein Container nicht mehr benötigt haben, können wir ihn löschen mit docker rm bwceconatiner

Der folgende Befehl liefert die Ausgaben, die die Container-Anwendung auf ihre Konsole schreibt: docker logs bwceconatiner

Wir können auch in einem laufenden Container eine interaktive Shell starten: docker exec -t -i bwceconatiner bash

Für unser eigenes Base Image habe ich folgendes Dockerfile erstellt

FROM alpine:3.5
MAINTAINER Alexander von Boguszewski <avonbogu@tibco.com>

# BWCE Environment Configuration
	ENV TIBCO_HOME=/opt/tibco \
	APPDIR=/opt/tibco \
	JAVA_HOME=/opt/tibco/tibco.home/tibcojre64/1.8.0 \
 	MALLOC_ARENA_MAX=2 \
	MALLOC_MMAP_THRESHOLD_=1024 \
	MALLOC_TRIM_THRESHOLD_=1024 \
	MALLOC_MMAP_MAX_=65536 \
	MEMORY_LIMIT=512M \
	BW_LOGLEVEL=info

# Create Tibco Binary Folder
RUN mkdir -p ${TIBCO_HOME} && \
	mkdir -p ${APPDIR} 

# Download and install bash
RUN apk add --update bash 

# Download and install glibc, little bit hacky
ENV GLIBC_VERSION 2.23-r3

RUN apk add --update curl && \
  curl -Lo /etc/apk/keys/sgerrand.rsa.pub https://raw.githubusercontent.com/sgerrand/alpine-pkg-glibc/master/sgerrand.rsa.pub && \
  curl -Lo glibc.apk "https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-${GLIBC_VERSION}.apk" && \
  curl -Lo glibc-bin.apk "https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-bin-${GLIBC_VERSION}.apk" && \
  apk add glibc-bin.apk glibc.apk && \
  /usr/glibc-compat/sbin/ldconfig /lib /usr/glibc-compat/lib && \
  echo 'hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4' >> /etc/nsswitch.conf && \
  rm -rf glibc.apk glibc-bin.apk 
  

# Copy BWCE Files to Image
COPY "bwce-runtime  java-code  scripts resources" /tmp/

#add tibco user
RUN addgroup tibco && \
	adduser -S -H tibco tibco && \	
	chown  tibco ${TIBCO_HOME} && \
	chown  tibco ${APPDIR} && \
	chmod 755 /tmp/*.sh

USER tibco

# Configure BWCE Installation
RUN  /tmp/install.sh


USER root


ENTRYPOINT ["/opt/tibco/scripts/start.sh"]

Bevor wir unser neues Basis Image bauen, muss natürlich die BWCE Runtime (bwce_cf.zip) aus dem TIBCO EDelivery geladen und im gleichen Ordner wie das Dockerfile gespeichert werden. Eine Internetverbindung ist erforderlich, um Images und deren Abhängigkeiten von Docker herunterzuladen. Das Dockerfile erwartet die Ordner resources und scripts im gleichen Verzeichnis. Der Ordner resources beinhaltet alle Zertifikate, Java Bibliotheken (JAR), BWCE Plugins andere Komponenten, die wir für unser persönliches Base Image benötigen. Die Bash-Skripte in scripts dienen für das Einrichten des Images, sowie der Installation und Konfiguration von BWCE. Mit dem Skript createDockerImage.sh kann unser neues Basis-Docker-Image erstellt werden.

	if [[ $# -lt 1 || $# -gt 2 ]]; then
    	echo "Usage: ./createDockerImage.sh <path/to/bwce_cf.zip> <Tag>"
    	echo "Location of bwce_cf.zip"
    	echo "Version Eg: v2.0.0"
    	exit 1
	fi


	#set tagname
	if [ -z "$2"  ]; then
	tag="alpinebwcebase:latest"
	else
	tag="alpinebwcebase:"$2
	fi
	echo "Tag is set to $tag"


	#copy bwce_cf.zip, the bwce runtime
	zipLocation=$1
	mkdir -p bwce-runtime && cp -i $zipLocation "$_"

	#Download the original token resolver
	tibcoTokenResolverURL=https://raw.githubusercontent.com/TIBCOSoftware/bwce-docker/master/java-code/ProfileTokenResolver.java
	curl -o java-code/ProfileTokenResolver.java $tibcoTokenResolverURL


	docker build -f Dockerfile -t $tag .

	rm -rf bwce-runtime

Mit diesem Base-Image können wir nun Images für einzelne Applikationen/Services erstellen. Als Beispiel verwende ich den von TIBCO bereitgestellten HELLO-WORLD-Service Um für ein Image für ein konkretes Projekt zu erstellen verwende ich hier in eigenes Dockerfile. Ich habe ein kurzes Script erstellt, dass den Service aus dem GitHub Repository lädt und ein entsprechendes Service Image baut. Wir können das Image aber natürlich auch leicht manuell bauen.

curl -LOk -o docker.http.application_1.0.0.ear https://github.com/TIBCOSoftware/bwce-docker/raw/master/examples/HTTP/docker.http.application_1.0.0.ear

Im Dockerfile erkennt man, das hierfür einfach das EAR File in das Image kopiert und das Configuration Script ausgeführt wird.

FROM alpinebwcebase:latest
MAINTAINER Alexander von Boguszewski <avonbogu@tibco.com>


USER tibco

COPY *.ear /tmp

# Configure BWCE Application
RUN  ${TIBCO_HOME}/scripts/configuration.sh

EXPOSE 8080
EXPOSE 8090

Um das Image zu bauen und die BWCE Anwendung zu Starten dann :

docker build -t $tag  .
run -P -e MESSAGE = 'Willkommen bei BWCE 2.0 !!!'  Bwce-http-app

Um den BWCE Service zu testen suchen wir zuerst die Portnummer mit Docker ps abgebildet und rufen dann im Browser http: // : auf. Als Ergebnis sollte im Browser “Willkommen bei BWCE 2.0 !!!” erscheinen.

Die angepassten Dockerfiles und Skripte liegen auf GitHub, bzw. im original TIBCO Repository