OpenELIS Dockerization - Tech Analysis

This page contains tech notes pertaining to OpenELIS dockerization activity.

draft page created for @Mohankumar Thangavel to update.

List of Action Items

  1. Separate OpenElis Schema and fresh data from dump file Done

  2. Parameterise Hostname in atomfeed.properties file and hibernate.cfg.xml needs analysis

  3. Analyse docker registries to store docker images DONE
    Going forward with existing Bahmni Repo on docker hub

    1. Registry for storing build images

    2. Registry for storing release images

  4. Creating a new repository for Docker compose files NOT A PRIORITY

  5. Volume mounting for OpenElis Application Data

Open Questions for Discussion

  1. Are we managing the bahmni docker hub repo ? https://hub.docker.com/u/bahmni CLARIFIED

  2.  

  3. OpenElis Fresh Database contains some data? Do we need all those ?

  4. As an implementer, will I alter database using SQL statements ?

 

Tech Debts:

  1. OpenELIS schema is done partially from Liquibase and partially from SQL Script

  2. Currently there are two dockerfiles for OpenElis Db- One for fresh DB and the other for Demo DB.

  3. Demo data for OpenElis application comes from emr-functional-tests repo.

 

Flow Diagram:

 

Docker Repository Analysis

 

 

Docker Hub

Github Container Registry (beta)

Amazon ECR

 

Docker Hub

Github Container Registry (beta)

Amazon ECR

Public Repos

Unlimited - Free

Unlimited - Free

$0.10 \GB month

Private Repos

Free -1

$5/month -unlimited

500 MB is free

$0.10 \GB month

Auto Clean Up

Need to do manually or by configuring an external cron job

Need to do manually or by configuring an external cron job

Has built in features

Pull Rate Limits (May not be a considering factor)

100 pulls in six hours for anonymous users

Not yet released. May have some when public version is announced.

Data charges are levied based on the total data transfer happened.

Self Hosting Registry Server is also possible. https://docs.docker.com/registry/deploying/

 

Preferences :

  1. Use Docker Hub for release images:

    1. Standard docker registry used by most projects

    2. Image naming is just simple (Ex: bahmni/openelis:0.93)

  2. Use Github Container Registry for nightly build images:

    1. As we have the plan of moving to Github Actions, this might be helpful in optimising build time.

    2. Community members who want to test out build versions can explicitly pull and use these images in which case the image name must be replaced as ghcr.io/bahmni/openelis:0.93-121

    3. Although docker hub supports any number of tags that can be stored in a repo, keeping it clean may help implementers to easily pickup right images.