The purpose of this document is to document the current Docker setup at NCI which provides extended testing and reporting.
In the future, we will set up LexEVS to be deployed via Docker containers.
Overview
The Mayo development team currently has Docker and Jenkins setup locally to build and test all of the LexEVS components. It is our intent to move this setup to NCI for a more permanent and stable location. Additionally, we intend on working with the systems team to prototype deploying LexEVS in as Docker containers.
LexEVS System Test
The lexevs-system-test is a Docker script that builds and tests all of the LexEVS components. Jenkins is used to kick off the Docker script.
Jenkins
Currently the lexevs-system-test is configured and running nightly at NCI.
When the Jenkins build is started, it simply calls a Docker script, passing in parameters that define the LexEVS component branches.
When the Docker script completes, the Jenkin build captures the test reports (XML) files.
Docker
The Docker script is where all of the work is done.
The Git Docker project is located here:
Below is a high level view of what the script does.
- Builds MySQL containers
- Clones LexEVS and LexEVS Remote projects from Git and builds each component
- Creates a container for the URI Resolver
- Builds and runs Junit tests for CTS2
- Runs Junit tests against LexEVS
- Loads terminologies into LexEVS
- Creates a container for LexEVS Remote
- Creates a container for CTS2
- Runs Junit tests against LexEVS Remote
- Stops and remove all containers.
NCI Docker Locations
There are several different repositories from which Docker images can be pulled from. Below is the strategy that is followed for determining where to pull images from.
Docker Hub
When ever possible, images will be pulled from the main Docker hub. This would include images for technology such as an OS, Tomcat, and MySQL. This assumes that Docker hub has the correct version of the software that is approved by the NCI technology stack.
Docker Hub - LexEVS repository
When Docker hub doesn't have an image needed for our specific needs, we will build that image and push it out to our Docker hub public repository. This repository is located here:
https://hub.docker.com/r/lexevs/lexevs/
NCI Nexus Docker Repository
If any of our images are specific and proprietary to NCI and their environment, the image will be built and pushed out to the internal NCI Nexus Docker Repository. A possible instance for this may be that the CentOS 7 image has NCI specific security or other settings that are not appropriate for external users. In this case the image would be stored internally on the NCI Nexus Docker repository.
Note: If there is an image that is stored internally on the NCI Nexus Docker repository, it will only be available to users/builds internal to NCI's VPN. We will need to fork our build scripts to pull "generic" images that are stored in the public LexEVS repository on Docker hub. This will require dual maintenance.
Next Steps
Our next step is to work with the Systems team to develop LexEVS Docker container(s) that could be deployed to an NCI DEV Docker environment that could be used for testing.
NCI Configuration
These are the links to the systems at NCI that have been set up for migrating our lexevs-system-test script to NCI.
Jenkins - Jenkins server to run the lexevs-system-test.
Nexus - Nexus server to push specific versions of NCI technology stack software to. This will be used by the Docker script to pull versions of software that are approved by NCI.
- https://ncidockerhub.nci.nih.gov/nexus/#browse/welcome
- This can be accessed with the user: NCI_lexevs_nexus
Docker interface: ncidockerhub.nci.nih.gov
- The path for pushes is ncidockerhub.nci.nih.gov/lexevs
- To push to NCI docker hub, re-tag the image and push:
Pull standard images from hub.docker and push to NCI Nexus server
Need to log into NCI Docker hub first
- docker login -u <user> -p <pw> ncidockerhub.nci.nih.gov
MySQL 5.6.33
Pull from docker hub
- docker pull mysql:5.6.33
Tag the mysql container
- docker tag mysql:5.6.33 ncidockerhub.nci.nih.gov/lexevs/nci-mysql:5.6.33
Push to NCI Nexus
- docker push ncidockerhub.nci.nih.gov/lexevs/nci-mysql
Tomcat 8.0.43-jre8
Pull from docker hub
- docker pull tomcat:8.0.43-jre8
Tag the tomcat container
- docker tag tomcat:8.0.43-jre8 ncidockerhub.nci.nih.gov/lexevs/nci-tomcat:8.0.43-jre8
Push to NCI Nexus
- docker push ncidockerhub.nci.nih.gov/lexevs/nci-tomcat