Getting Started with Genero Container Images
Welcome to your guide to deploying Genero Applications using Genero Containers.
Genero Container Images are created to optimize the deployment and runtime of your Genero application in any Docker environment. With Genero Containers, your team gets simplified app deployment and rollback procedures, continuous integration and deployment (CI/CD), automated testing and infrastructure-as-code(IaC) approaches. Our images are built to run your app directly on Docker or on an advanced Kubernetes environment making your app highly available, scalable, resilient and secure.
This guide will help you get a jump start on creating a Genero Runtime container, containerizing your own Genero application, and adding custom configurations to your container instances on Docker.
Genero Container Images
We are currently providing several types of Genero Container Images that can mainly be split into 2 categories: Runtime Images and Build Images.
All the Genero Container Runtime images contain Genero Business Development Language runtime (abbreviated as BDL and also referred to as FGL/FGLGWS throughout this doc) and Genero Application Server (abbreviated as GAS throughout this doc). Additionally, we have derivative images that additionally include Genero Report Writer (GRE) runtime and database clients. For examples: genero/enterprise/runtime and genero/enterprise/runtime-gre.
Build images, also referred to as development images, contain Genero Business Development Language runtime and the Genero Studio Server (GSTSRV). These images also include packages and tools that enable the build of a Genero application. For example genero/enterprise/development-build-gar.
The images are located in an Amazon registry known as AWS ECR. This is a private registry with restricted access. For more info, check the Prerequisites section in this guide.
Some images support multiple architectures: ARM and x86-64. Pulling an image like this will automatically resolve to the version compatible with your system during the pull process.
Image Short Name | Description | ECR Name | Products Versions |
---|---|---|---|
genero/enterprise/runtime |
This image lets you deploy a container running a Genero Application Server (GAS). OS/Arch: Linux® Rocky9, x86-64, ARM Note that these images provide FGLGWS and GAS, but DO NOT include GRE. |
567640560273.dkr.ecr.eu-west-2.amazonaws.com/genero/enterprise/runtime:rl9-gas5.01.02-fgl5.01.02 |
|
genero/enterprise/runtime-gre |
This image lets you deploy a container running a Genero Application Server. OS/Arch: Linux Rocky9, x86-64, ARM Note that these images provide FGLGWS, GAS and GRE. |
567640560273.dkr.ecr.eu-west-2.amazonaws.com/genero/enterprise/runtime-gre:rl9-gas5.01.02-fgl5.01.02-gre5.01.00 |
|
genero/enterprise/runtime-mysql |
Run a Genero Application Server (GAS) that supports connection to a MySQL database. OS/Arch: Linux Rocky9, x86-64, ARM Note that these images provide FGLGWS and GAS, but DO NOT include GRE. |
567640560273.dkr.ecr.eu-west-2.amazonaws.com/genero/enterprise/runtime-mysql:rl9-gas5.01.02-fgl5.01.02-mysql8.0.42 |
|
genero/enterprise/runtime-gre-mysql |
Run a Genero Application Server (GAS) that supports connection to a MySQL database.
OS/Arch: Linux Rocky9, x86-64, ARM Note that these images provide FGLGWS, GAS and GRE. |
567640560273.dkr.ecr.eu-west-2.amazonaws.com/genero/enterprise/runtime-gre-mysql:rl9-gas5.01.02-fgl5.01.02-mysql8.0.42 |
|
genero/enterprise/runtime-psql |
Run a Genero Application Server (GAS) that supports connection to a Postgresql Database. OS/Arch: Linux Rocky9, x86-64, ARM Note that these images provide FGLGWS and GAS, but DO NOT include GRE. |
567640560273.dkr.ecr.eu-west-2.amazonaws.com/genero/enterprise/runtime-psql:rl9-gas5.01.02-fgl5.01.02-psql16 |
|
genero/enterprise/runtime-gre-psql |
Run a Genero Application Server (GAS) that supports connection to a Postgresql Database. OS/Arch: Linux Rocky9, x86-64, ARM Note that these images provide FGLGWS, GAS and GRE. |
567640560273.dkr.ecr.eu-west-2.amazonaws.com/genero/enterprise/runtime-gre-psql:rl9-gas5.01.02-fgl5.01.02-psql16 |
|
genero/enterprise/runtime-ifx |
Run a Genero Application Server (GAS) that supports connection to an Informix® Database. OS/Arch: Linux Rocky9, x86-64 Note that these images provide FGLGWS and GAS, but DO NOT include GRE. |
567640560273.dkr.ecr.eu-west-2.amazonaws.com/genero/enterprise/runtime-ifx:rl9-gas5.01.02-fgl5.01.02-ifx4.50.FC1 |
|
genero/enterprise/runtime-gre-ifx |
Run a Genero Application Server (GAS) that supports connection to an Informix Database. OS/Arch: Linux Rocky9, x86-64 Note that these images provide FGLGWS, GAS and GRE. |
567640560273.dkr.ecr.eu-west-2.amazonaws.com/genero/enterprise/runtime-gre-ifx:rl9-gas5.01.02-fgl5.01.02-gre5.01.00-ifx4.50.FC1 |
|
genero/enterprise/runtime-mssql |
Run a Genero Application Server that supports connection to Microsoft® SQL Database. OS/Arch: Linux Rocky9, x86-64 Note that these images provide FGLGWS and GAS, but DO NOT include GRE. |
567640560273.dkr.ecr.eu-west-2.amazonaws.com/genero/enterprise/runtime-microsoftsql:rl9-gas5.01.02-fgl5.01.02-mssql17.10.0001.1Linux |
|
genero/enterprise/runtime-gre-mssql |
Run a Genero Application Server that supports connection to Microsoft SQL Database. OS/Arch: Linux Rocky9, x86-64 Note that these images provide FGLGWS, GAS and GRE. |
567640560273.dkr.ecr.eu-west-2.amazonaws.com/genero/enterprise/runtime-microsoftsql:rl9-gas5.01.02-fgl5.01.02-gre5.01.00-mssql17.10.0001.1Linux |
|
genero/enterprise/development-build-gar |
This image lets you build a Genero Application into a GAR file. It comes with a Genero Studio (GST) Server installed which enables it to build Genero projects. OS/Arch: Linux Rocky 9, x86-64 |
567640560273.dkr.ecr.eu-west-2.amazonaws.com/genero/enterprise/development-build-gar:5.01 |
|
Ask your support team for more versions of the GCI (4.01 and 3.21 are available).
Starting a Genero Runtime Container
Prerequisites
- Install Docker Desktop (or any other Docker Daemon)
- AWS tools
-
aws cli
– The AWS Command Line Interface (CLI) is used for IAM user authentication. For more information, go to Installing or updating to the latest version of the AWS CLI - AWS Command Line Interface.
-
- AWS keys - These keys grant you access to download (docker pull) the images listed in the table
above only:
- Request access keys from your support team.
- You should get a set of 2 keys: Access and secret key.
- Run
aws config
and set the user's access keys and region:aws configure AWS Access Key ID: XXXXXXXXXXXXXXXXXXXXX AWS Secret Access Key: XXXXXXXXXXXXXXXXXXXXX Default region name [eu-west-2]: eu-west-2
- To test your keys, run this
command:
You should get:aws ecr get-login-password --region eu-west-2 | docker login --username AWS --password-stdin 567640560273.dkr.ecr.eu-west-2.amazonaws.com
Login Succeeded
.
- Genero Containers standalone license:
- Request a license from your support team.
Start a Genero Runtime Container
When you pull an image from the private ECR, ensure that your AWS access keys are configured and that you are logged into the repo.
To log in, run the following command:
aws ecr get-login-password --region eu-west-2 | docker login --username AWS --password-stdin 567640560273.dkr.ecr.eu-west-2.amazonaws.com
Persist Data From Your Genero Container
The Persisting container data webpage states "When a container starts, it uses the files and configuration provided by the image. Each container is able to create, modify, and delete files and does so without affecting any other containers. When the container is deleted, these file changes are also deleted.”
While this ephemeral nature of containers is great, it poses a challenge when you want to persist the data. For example, you might want to save certain configurations or any files on your Genero Container, so that when a container restarts the configurations are not lost, or even further you might want to start another container with the same configurations. So how can you persist these files?
/usr/custom
directory of your container, you will need to
create a volume, we’ll call it custom-vol, and map the volume to the directory you want to
persist, in this case /usr/custom
. Here’s the example of the same
.yaml file used in the previous example with the volume
definition.services:
gas:
ports:
- '8080:80'
image: "567640560273.dkr.ecr.eu-west-2.amazonaws.com/genero/enterprise/runtime:5.00"
restart: always
environment:
# FGL License
- FGL_LICENSE_NUMBER=<FGL License Number>
- FGL_LICENSE_KEY=<FGL License Key>
volumes:
- custom-vol:/usr/custom
volumes:
custom-vol:
custom-vol:
is supposed to be added this way.
When starting a container with the following command, the volume will be mounted or attached into
the container at /usr/custom
. If the volume custom-vol
doesn't
exist, Docker will automatically create it for you. When the container runs, all files it writes
into the /usr/custom
folder will be saved in this volume, outside of the container.
If you delete the container and start a new container using the same volume, the files will still be
there.
You can attach the same volume to multiple containers to share files between containers. This might be helpful in use case where you want to custom configure GAS, GIP or other services.
Deploy your Application to a Genero Container
Manual Deployment During Runtime
You can ask your support team to give you a gar with a sample application for you to test.
docker
ps
and the local path to your .gar, then
run:docker cp archive_name container_id:/archive_name.gar
export GASADMIN="/opt/fourjs/gas/bin/gasadmin gar -E res.appdata.path=/opt/fourjs/gas/appdata"
su - genero -c "$GASADMIN --deploy-archive /archive_name.gar"
su - genero -c "$GASADMIN --enable-archive archive_name"
Connect to your application from
the browser. For example: http://localhost:8080/gas/ua/r/app_name, where app_name
is one of the apps listed in the output of the
--enable-archive
command without the XCF extension. Taking the previous example,
the output would be: Install application app_name.xcf into
/opt/fourjs/gas/appdata/app
Automate Process
Instead of going through the copy/paste and deploy/enable steps manually, whenever you have a new version of your application, there are various ways to automate the process.
Ask your professional services team to get more information on this topic.
Connect to a Database Server from Your Genero Runtime Container
Your application might require a connection to a specific database server to start, log users in, retrieve data, and more. This process is simplified with the provided lineage of Genero Runtime images with db-clients installed. All you have to do is check whether your required database type is listed in the table of the image provided, copy the ECR Name to the image, and use that to start your container(s).
567640560273.dkr.ecr.eu-west-2.amazonaws.com/genero/enterprise/runtime-psql
All you have to do is: - Pull the image -
docker pull 567640560273.dkr.ecr.eu-west-2.amazonaws.com/genero/enterprise/runtime-psql
- Start the container -
docker run -it --privileged --rm --name gas -p 8080:80 -e FGL_LICENSE_NUMBER=<FGL LICENSE> -e FGL_LICENSE_KEY=<FGL_KEY> 567640560273.dkr.ecr.eu-west-2.amazonaws.com/genero/enterprise/runtime-psql:latest
- Now you can get shell access to your container and try connecting to a psql server:
services: postgres: image: postgres:14-alpine ports: - 5432:5432 environment: - POSTGRES_PASSWORD=S3cret - POSTGRES_USER=genero_user - POSTGRES_DB=genero_db hostname: psql-db gas: ports: - '8080:80' image: "567640560273.dkr.ecr.eu-west-2.amazonaws.com/genero/enterprise/runtime-psql" # You can specify any version of the provided gas image tags restart: always environment: # FGL License - FGL_LICENSE_NUMBER=<FGL License Number> - FGL_LICENSE_KEY=<FGL License Key>
Note:To test this case, you can deploy a postgresql container and connect to it.
psql -h psql-db -d genero_db -u genero_user -W
Then enter the password. Create your own Genero Container Image
Manually
If creating a Genero Container Image with your app installed on it is what you are looking for, then you can do this in various ways. Starting with a basic test step. After copying and pasting you gar file, deploying and enabling it on the container and testing that you get a connection, you can simply save the container’s state into a new image. This is similar to the VM snapshots.
To do that, check the Docker manual on the docker image save command: docker image save
After creating the image, you can start your new containers using that image, and your application will run on it.
You can also add libraries and files, install any other dependencies, or add configurations.
From DockerFile
You can create a new Docker Container image based on our Genero Container Image but with additions that your application requires by creating a new Docker file and adding all the requirements there. For example;
FROM <our image>
# Your features
COPY path/to/my_feature_script /path/to/target/location/my_feature_script
...
Automatically via CI/CD
Taking the process of creating your own Genero Container Image 10 steps further by automating it via CI/CD pipelines.
An alternate way of creating a custom image with your app already built-in it is to compile it and install it in the same build process. To that end, we provide an image with GST Server installed on it. The GST Server image lets you compile your Genero project. The resulting files can then be transferred to a Genero runtime image in order to deploy your app.
We recommend using a gar file as the target, but you can compile your app using any mechanism you wish, in which case you’ll need to install what you need on the GST image (this can be done during the build phase).
#*****************************************************************************#
## Intermediate build stage
FROM 567640560273.dkr.ecr.eu-west-2.amazonaws.com/genero/enterprise/development-build-gar AS builder
ARG FGL_LICENSE_NUMBER
ARG FGL_LICENSE_KEY
# You'll need to define FGL_LICENSE_NUMBER and FGL_LICENSE_KEY as environment variables in your repo
# and pass them as build arguments.
ENV FGL_LICENSE_NUMBER=${FGL_LICENSE_NUMBER}
ENV FGL_LICENSE_KEY=${FGL_LICENSE_KEY}
ENV BUILD_CMD=gsmake
ENV SOURCE_4PW_FILE=/opt/genero/<your genero project folder>/<your app name>.4pw
# Define the location of your 4pw file.
COPY ./<your genero project folder> /opt/genero/<your genero project folder>
# Copy project folder to the builder container
RUN /entrypoint.sh
# Build the project
# /!\ Note that you can replace the call to '/entrypoint.sh' or 'gsmake' with the
# call to your preferred build command, you’ll also need to call /generate-fgllicense.sh
# beforehand in order to setup the Genero License, otherwise you won’t be able to compile
# your Genero Project.
#*****************************************************************************#
## Base Install Image
FROM 567640560273.dkr.ecr.eu-west-2.amazonaws.com/genero/enterprise/runtime
COPY --from=builder /opt/genero/<your genero project folder>/distbin/<your app name>.gar /<your app name>.gar
RUN su - genero -c "/opt/fourjs/gas/bin/gasadmin gar -E res.appdata.path=/opt/fourjs/gas/appdata --deploy-archive /<your app name>.gar" \
&& su - genero -c "/opt/fourjs/gas/bin/gasadmin gar -E res.appdata.path=/opt/fourjs/gas/appdata --enable-archive <your app name>"
# NOTE: If you package your app in a different way, you'll have to install the binaries of your app accordingly.
#*****************************************************************************#

In order to properly manage your Genero app and your image, we recommend using 2 separate repositories: one for your Genero app code and one for your custom image build files. You can then declare the the Genero code’s repo as a sub module of the image’s repo. By doing that, you keep both projects (the image’s and the genero app’s) separate but the image’s repo has access to the genero code, which means you can build the app while building your image. A benefit of using sub-modules is that you can add as many genero apps as you need. Here is a link for more details about sub-modules: Git - Submodules
Here are the steps to follow in order to setup your image’s repo:
- Add your Genero code’s git repo as a submodule of your image’s
repo:
git submodule add <Your git link>
Note:If you are using the pipelines build, your pipelines will need to be able to pull the Genero code’s git repo. To create a key for the pipelines, go to your image’s repository settings → under Pipelines, SSH Keys → Generate a key and configure your app’s repo to allow pulls using that generated key. If your Genero code’s repo is under Bitbucket,
. - Edit the Dockerfile to compile your app in a first stage and then build the final image with your app in the final stage. Example here: Bitbucket .
- Repeat for each app you want to add to your custom image.
Summary
Thank you for following this guide to help you get ahead in deploying your Genero application on Docker containers. Now that you know the basics, continue with our team of experts to deploy your Genero application in an advanced environment with various additions that improve your application lifecycle and user experience.
-
Deploying your container(s) on Kubernetes.
-
Adding automated scaling.
-
Adding efficient load-balancing techniques and replication across different data centers across the world.
-
Enabling smart logging, monitoring, and alerting mechanisms.